第27章 揪住黑客!
羅韜神色變得鄭重了些。
打開源文件,把主工程文件導入自己的編譯器,一行一行地查看源碼。
林青玉輕手輕腳走進寢室,站在羅韜身後。
隨著時間一點點地過去,她的一顆心漸漸下沉。
突然,羅韜身體向前探去,仔仔細細看了片刻,嘴裡道:「發現一處問題。」
說話間移動滑鼠,將一行代碼標為高亮。
林青玉連忙湊過去看,發現那行代碼是——
fprintf(logfile, log_entry);
「這一行,存在格式化字符串漏洞。」
羅韜手指指著屏幕,對著林青玉解說起來。
「對方若是知道這個漏洞,就會發送一條特製的公開消息,其中嵌入大量的格式化符號——比如%x、%n這些格式說明符。
%x可以從棧上讀取數據,泄露內存信息。
%n可以向任意內存地址寫入任意值。
因為,%n會將當前已輸出的字符數寫入對應地址。
攻擊者利用這些,一步步地推移棧上的指針,最終覆蓋函數返回地址,實現遠程代碼執行。」
林青玉雖然專業教人編程,卻從未涉及安全領域,聽了一個似懂非懂。
羅韜不想總是解決這類小問題,唯一辦法就是教會對方。
所以,他表現出了極強耐心。
「當伺服器程序將攻擊者的消息記錄到日誌時,日誌函數沒有對消息內容做任何過濾,直接將其作為格式字符串傳遞給fprintf函數。
攻擊者通過那些格式化符號推移棧上的指針,最終用一個%n,將當前輸出的字符數寫入了程序全局偏移表中fprintf函數的入口地址,將其篡改為他預先布置的shellcode的起始地址。
此後伺服器再次調用fprintf時,實際執行的是攻擊者的代碼,從而以root權限為他開啟了一個後門埠。
他通過這個後門修改了程序內存中標識用戶權限的變量,使自己獲得了最高權限。」
這一次,林青玉徹底聽明白了,由衷地說了一聲:「感謝解惑!」
然後擺了擺手:「你先處理漏洞,不用管我。」
羅韜點點頭,卻沒有立即修補漏洞,而是先去追查入侵者的來源。
來而不往非禮也!
對方那麼狂,必須給他一點教訓。
他登錄伺服器,查看當前所有網絡連接。
發現聊天室的進程裡面,維護著四五十個來自外部的活躍連接。
其中一個的發包周期,恰好與黑客帳號的發言頻率相對應。
他記下那個IP位址,然後打開一個命令行窗口。
「噼哩啪啦……」
羅韜雙手十指在鍵盤上面飛舞,速度之快把林青玉都嚇了一跳。
她很想問一句——「你現在在幹什麼?」
看到羅韜那般專注,最終把話咽了回去。
羅韜這時寫的,是個最簡易的TCP埠掃描器。
原理簡單得可怕:創建socket,用connect()去嘗試連接目標IP的常用埠,能連上的就是開放的。
使用這個小工具,可以快速掃描目標開放的埠。
一分鐘左右,代碼寫完。
編譯、運行,輸入那個IP位址。
屏幕上面,開始滾過一行行結果——
21埠:開放
23埠:開放
80埠:開放
139埠:開放
445埠:開放
3389埠:開放
……
過了一陣,羅韜雙目緊緊盯著屏幕,目光鎖定在3389埠。
林青玉也不是全無見識,直接問出心中疑惑:「你想反攻對方?這很難吧?」
「會者不難,難者不會!」羅韜臉上浮現笑意,「已經有眉目了。」
說話間,點擊滑鼠退出掃描程序,嘗試連接過去——
通過之前植入的後門,他發現這是一台Windows主機。
而且,3389埠開放意味著遠程桌面服務正在運行。
羅韜沒有貿然連接,而是先檢查這台機器的歷史操作記錄。
在臨時目錄中,他發現了幾處線索:一個名為「exploit.c」的源碼文件,一個編譯好的可執行文件,還有幾個日誌片段。
這說明,攻擊者只是用這台機器作為跳板。
好消息是,攻擊者沒有清除操作痕跡。
羅韜仔細檢查了系統日誌,發現攻擊者通過另一台中間伺服器登錄這台機器,而那個中間伺服器的IP屬於教育網。
202.114.64.xxx
羅韜手指指著IP位址,對著林青玉說道:
「這個IP位址,多半是某個大學的,應該可以查到。」
林青玉點點頭,仔細記下,轉身走了出去。
羅韜進一步分析,發現那個攻擊者曾經多次從這台跳板機訪問另一個固定地址。
大約是一直都太順利,根本沒有清理連接記錄。
羅韜嘴角浮起一抹嘲諷,再次打開掃描工具,對準那個新發現的地址。
路運成全程看著羅韜操作,完全就是不明覺厲心態。
突然。
他發現羅韜打開一個畫著窗口圖標的東西,裡面有兩個空白的框子。
羅韜在第一個框裡敲了一串數字,又點開下面一個小方塊,選了另一串更長的字符貼進去。
過不多時,屏幕上出現了一個完整的電腦桌面,壁紙是藍天白雲青草地。
典型的Win98界面。
隨著羅韜不斷點擊滑鼠,路運成看到一個個的文件夾展開,課程表、實習報告……
直到看到一個相冊,裡面的照片一點一點刷新出來,路運成終於確認一件事——羅韜進入那名黑客的電腦里了!
那麼厲害的一個黑客,就這樣被羅韜拿下了?
為了確定這點,他直接不恥下問:「羅韜,你在遠程操控對方電腦嗎?」
「算是吧。」羅韜頭也不抬,一邊說話一邊截圖。
路運成馬上又問:「那他知道嗎?」
羅韜搖搖頭,臉上浮起笑意:「他要知道,現在肯定拔網線了!」
實際上,羅韜是通過跳板機上殘留的RDP連接記錄,獲取了目標IP和用戶名。
對方顯然大意了,在連接時選擇了「記住密碼」,憑證被明文緩存在註冊表的DefaultPassword鍵值中。
羅韜提取出這組憑據,直接建立了遠程桌面會話。
此時,他打開mstsc的遠程協助功能,利用Shadow會話技術,在不影響對方操作的情況下實時監控桌面。
對方全屏展開了小雨點聊天室,輸入框裡字符不斷增加。
【那誰誰不是很厲害嗎,快來……】
羅韜等到攻擊者打出後面的「抓我呀」三個字,趕緊截了一張圖片。
又等片刻,等到攻擊者把這一句發出去,變成小雨點聊天室中的一行系統文字,又截一張。
證據固定完畢。
羅韜在命令行中調用shutdown.exe,強制終止目標系統:
shutdown /s /t 0 /f
系統立即響應,終止所有進程並進入關機流程。
對方界面很快變藍,系統提示「正在關機」。
緊接著,屏幕一黑,連接斷開了。
「你把對方關機了?」路運成瞪眼問道。
羅韜點點頭,回到跳板機,修改了本地安全策略,強制要求複雜密碼並禁用憑據緩存。
然後,斷開了所有連接。
此時此刻,某大學宿舍。
一個年輕人坐在電腦面前,神情很是疑惑。
「咋就關機了?」
打開源文件,把主工程文件導入自己的編譯器,一行一行地查看源碼。
林青玉輕手輕腳走進寢室,站在羅韜身後。
隨著時間一點點地過去,她的一顆心漸漸下沉。
突然,羅韜身體向前探去,仔仔細細看了片刻,嘴裡道:「發現一處問題。」
說話間移動滑鼠,將一行代碼標為高亮。
林青玉連忙湊過去看,發現那行代碼是——
fprintf(logfile, log_entry);
「這一行,存在格式化字符串漏洞。」
羅韜手指指著屏幕,對著林青玉解說起來。
「對方若是知道這個漏洞,就會發送一條特製的公開消息,其中嵌入大量的格式化符號——比如%x、%n這些格式說明符。
%x可以從棧上讀取數據,泄露內存信息。
%n可以向任意內存地址寫入任意值。
因為,%n會將當前已輸出的字符數寫入對應地址。
攻擊者利用這些,一步步地推移棧上的指針,最終覆蓋函數返回地址,實現遠程代碼執行。」
林青玉雖然專業教人編程,卻從未涉及安全領域,聽了一個似懂非懂。
羅韜不想總是解決這類小問題,唯一辦法就是教會對方。
所以,他表現出了極強耐心。
「當伺服器程序將攻擊者的消息記錄到日誌時,日誌函數沒有對消息內容做任何過濾,直接將其作為格式字符串傳遞給fprintf函數。
攻擊者通過那些格式化符號推移棧上的指針,最終用一個%n,將當前輸出的字符數寫入了程序全局偏移表中fprintf函數的入口地址,將其篡改為他預先布置的shellcode的起始地址。
此後伺服器再次調用fprintf時,實際執行的是攻擊者的代碼,從而以root權限為他開啟了一個後門埠。
他通過這個後門修改了程序內存中標識用戶權限的變量,使自己獲得了最高權限。」
這一次,林青玉徹底聽明白了,由衷地說了一聲:「感謝解惑!」
然後擺了擺手:「你先處理漏洞,不用管我。」
羅韜點點頭,卻沒有立即修補漏洞,而是先去追查入侵者的來源。
來而不往非禮也!
對方那麼狂,必須給他一點教訓。
他登錄伺服器,查看當前所有網絡連接。
發現聊天室的進程裡面,維護著四五十個來自外部的活躍連接。
其中一個的發包周期,恰好與黑客帳號的發言頻率相對應。
他記下那個IP位址,然後打開一個命令行窗口。
「噼哩啪啦……」
羅韜雙手十指在鍵盤上面飛舞,速度之快把林青玉都嚇了一跳。
她很想問一句——「你現在在幹什麼?」
看到羅韜那般專注,最終把話咽了回去。
羅韜這時寫的,是個最簡易的TCP埠掃描器。
原理簡單得可怕:創建socket,用connect()去嘗試連接目標IP的常用埠,能連上的就是開放的。
使用這個小工具,可以快速掃描目標開放的埠。
一分鐘左右,代碼寫完。
編譯、運行,輸入那個IP位址。
屏幕上面,開始滾過一行行結果——
21埠:開放
23埠:開放
80埠:開放
139埠:開放
445埠:開放
3389埠:開放
……
過了一陣,羅韜雙目緊緊盯著屏幕,目光鎖定在3389埠。
林青玉也不是全無見識,直接問出心中疑惑:「你想反攻對方?這很難吧?」
「會者不難,難者不會!」羅韜臉上浮現笑意,「已經有眉目了。」
說話間,點擊滑鼠退出掃描程序,嘗試連接過去——
通過之前植入的後門,他發現這是一台Windows主機。
而且,3389埠開放意味著遠程桌面服務正在運行。
羅韜沒有貿然連接,而是先檢查這台機器的歷史操作記錄。
在臨時目錄中,他發現了幾處線索:一個名為「exploit.c」的源碼文件,一個編譯好的可執行文件,還有幾個日誌片段。
這說明,攻擊者只是用這台機器作為跳板。
好消息是,攻擊者沒有清除操作痕跡。
羅韜仔細檢查了系統日誌,發現攻擊者通過另一台中間伺服器登錄這台機器,而那個中間伺服器的IP屬於教育網。
202.114.64.xxx
羅韜手指指著IP位址,對著林青玉說道:
「這個IP位址,多半是某個大學的,應該可以查到。」
林青玉點點頭,仔細記下,轉身走了出去。
羅韜進一步分析,發現那個攻擊者曾經多次從這台跳板機訪問另一個固定地址。
大約是一直都太順利,根本沒有清理連接記錄。
羅韜嘴角浮起一抹嘲諷,再次打開掃描工具,對準那個新發現的地址。
路運成全程看著羅韜操作,完全就是不明覺厲心態。
突然。
他發現羅韜打開一個畫著窗口圖標的東西,裡面有兩個空白的框子。
羅韜在第一個框裡敲了一串數字,又點開下面一個小方塊,選了另一串更長的字符貼進去。
過不多時,屏幕上出現了一個完整的電腦桌面,壁紙是藍天白雲青草地。
典型的Win98界面。
隨著羅韜不斷點擊滑鼠,路運成看到一個個的文件夾展開,課程表、實習報告……
直到看到一個相冊,裡面的照片一點一點刷新出來,路運成終於確認一件事——羅韜進入那名黑客的電腦里了!
那麼厲害的一個黑客,就這樣被羅韜拿下了?
為了確定這點,他直接不恥下問:「羅韜,你在遠程操控對方電腦嗎?」
「算是吧。」羅韜頭也不抬,一邊說話一邊截圖。
路運成馬上又問:「那他知道嗎?」
羅韜搖搖頭,臉上浮起笑意:「他要知道,現在肯定拔網線了!」
實際上,羅韜是通過跳板機上殘留的RDP連接記錄,獲取了目標IP和用戶名。
對方顯然大意了,在連接時選擇了「記住密碼」,憑證被明文緩存在註冊表的DefaultPassword鍵值中。
羅韜提取出這組憑據,直接建立了遠程桌面會話。
此時,他打開mstsc的遠程協助功能,利用Shadow會話技術,在不影響對方操作的情況下實時監控桌面。
對方全屏展開了小雨點聊天室,輸入框裡字符不斷增加。
【那誰誰不是很厲害嗎,快來……】
羅韜等到攻擊者打出後面的「抓我呀」三個字,趕緊截了一張圖片。
又等片刻,等到攻擊者把這一句發出去,變成小雨點聊天室中的一行系統文字,又截一張。
證據固定完畢。
羅韜在命令行中調用shutdown.exe,強制終止目標系統:
shutdown /s /t 0 /f
系統立即響應,終止所有進程並進入關機流程。
對方界面很快變藍,系統提示「正在關機」。
緊接著,屏幕一黑,連接斷開了。
「你把對方關機了?」路運成瞪眼問道。
羅韜點點頭,回到跳板機,修改了本地安全策略,強制要求複雜密碼並禁用憑據緩存。
然後,斷開了所有連接。
此時此刻,某大學宿舍。
一個年輕人坐在電腦面前,神情很是疑惑。
「咋就關機了?」