1. 軟件簡介
PCMan's FTP Server是洪任諭程序員所研發的一套FTP服務器軟件。該軟件具有體積小、功能簡單等特點。建立連接如圖1所示:
圖1連接說明圖
2. 漏洞成因
PCMan's FTP Server 2.0.0版本中存在緩衝區溢出漏洞。遠程攻擊者可藉助USER命令中的長字符串利用該漏洞執行任意代碼。通過在recv函數上下斷點持續跟蹤,發現服務端在接收到登錄請求之後,會將收到的信息進行字符串拼接,而在字符串拼接的地方,並未進行長度控制.因此導致緩衝區溢出。
3. 利用過程
3.1 環境搭建
(1) 首先要安裝WDK,WDK是WinDbg自帶(虛擬機中已有)
(2) 安裝Python2.7.2(虛擬機已有)
(3) 安裝Visual C++ 2008運行庫(手動安裝)
01_Tools這個文件夾中==》02_vcredist_x86雙擊安裝,運行庫如圖2所示:
圖2運行庫說明圖
(4) 安裝WinDbg的Python插件”Pykd”(手動安裝)
安裝PKY :C:\Program Files\Windows Kits\8.1\Debuggers\x86\winext這個安裝路徑,pky如圖3所示:
圖3pky說明圖
(5) 運行WinDBG開始調試後,輸入一下命令(手動安裝)
在把mon.py windbg;ib.py方放到windbg運行目錄下
打開windbg.exe 輸入:.loadpky.pyd !py mona,安裝如圖4所示:
圖4安裝說明圖
加載完符號後,打開工具中02__vcredist_x86.exe是加載visual C ++2008
不斷的退出windbg在附加 虛擬機要是橋接模式,符號如圖5所示:
圖5符號說明圖
3.2 溢出測試
(1)用Mon2生成一段3000字節長度的測試代碼(字符串)用於確定溢出點,3000如圖6所示:
圖6 3000說明圖
找到文件夾pattern :在C:\Program Files\Windows Kits\8.1\Debuggers\x86這個路徑下搜索 pattern,然後把這個文件夾複製(到桌面上)出來,pattern如圖7所示:
圖7 patter說明圖
4. PoC
首先用windbg的mona2工具生成0x3000大小的有規律數據” A0A1A2A3A4A5A6A7A8A9一直到E0E1E2E3E4E5E6E7E8E9”,然後編寫FTP登陸程序給軟件傳送這段數據,得到溢出偏移值是2002。構建一個的字符串:"USER "(5字節)+垃圾指令(2005字節)+ 跳板指令(4字節)+ shellcode代碼(不含0x00,0x0A,0x0D,0x20特殊ASCII)+ "\r\n"(2字節)。demo源代碼:有一份能與FTP進行交互的代碼才能受控的觸發此漏洞。理論上講,只要我們編寫的代碼符合RFC959標準,就可以與任何一個FTP服務器進行交互 ,不過FTP客戶端的實現非常簡單,我們完全沒必要去閱讀RFC959文檔,我們只需作如下幾步:
(1) 建立Socket鏈接,連接目標FTP
(2) 接受FTP服務器的歡迎語
(3) 發送“USER XXXX”登錄請求
(4) 接受請求結果(不會走到這一步,此時FTP服務器已被攻擊完)
4.1 構造測試
(1)打開pattern複製裏面十六進制數字到vs中充當測試代碼,測試shellcode如圖8所示:
圖8測試說明圖
(2)然後打開vs開始編寫發送測試數據包 ,數據包如圖9所示:
圖9數據包說明圖
(3)然後打開vs開始編寫發送測試數據包 ,虛擬機中每一次都要加載換環境.load pykd.pyd !py mona g了以後,再用vs發送這個數據包, 觸發異常後如圖所示,證明需要在一個不存在的位置執行代碼,命令如圖10所示:
圖10命令說明圖
(4)vs發送完以後虛擬機上結果
!py mona po 0x6f43376f 知道eip被覆蓋,使用mon2測出溢出點,知道溢出點在偏移2002位置,偏移如圖11所示:
圖11偏移說明圖
4.2 jmp esp
(1)查找esp在所有模塊中命令,指令如圖12所示:
圖12指令說明圖
(2)查找esp在kernel32.dll模塊中命令,指令如圖13所示:
圖13指令說明圖
4.3 實現
(1)vs中指定命令,指定如圖14所示:
圖14指定說明圖
(2)建立套接字,socket如圖15所示:
圖15socket說明圖
(3)運行結果,彈出個MessageBox窗口,窗口如圖16所示:
圖16窗口說明圖
5. 結語
漏洞是由於將客戶端的命令使用sprintf連上時間日期等信息後儲存到局部變量,再寫到日誌文件中,而沒有進行命令長度的檢測,導致緩衝區溢出的發生。緩衝區溢出一般是沒有進行邊界檢查,或使用了不安全的函數,避免這個情況能大大提高安全性。
6. 參考資料
[1] 《0day安全:軟件漏洞分析技術(第2版)》 王清 著