滲透防火墻的Shellcode技術(shù)_第1頁
滲透防火墻的Shellcode技術(shù)_第2頁
滲透防火墻的Shellcode技術(shù)_第3頁
滲透防火墻的Shellcode技術(shù)_第4頁
滲透防火墻的Shellcode技術(shù)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 滲透防火墻的Shellcode 技術(shù)作者:內(nèi)容摘要1. 遠程shellcode 的幾種實現(xiàn)方式2. 復用當前連接技術(shù)的一些問題及優(yōu)勢3. Win32平臺的具體實現(xiàn)4. Linux x86平臺的具體實現(xiàn)5. AIX PowerPC平臺的具體實現(xiàn)6. 特別感謝7. 參考文檔第2頁實現(xiàn)方式簡介1. 遠程shellcode 的幾種實現(xiàn)方式1.1 監(jiān)聽端口1.1.1 監(jiān)聽新的端口1.1.2 重新使用原端口 端口復用 重新綁定1.2 反向連接1.3 復用當前連接的SOCKET1.3.1 IIS的ECB 結(jié)構(gòu)1.3.2 getpeername1.3.3 fcntl設(shè)置socke

2、t 狀態(tài)1.3.4 ioctl(Linux/Unix和ioctlsocket(Win321.3.5 使用OOB 特性1.3.6 Hook系統(tǒng)的recv 調(diào)用第3頁復用當前連接技術(shù)介紹2. 復用當前連接技術(shù)的一些問題及優(yōu)勢2.1 綁定shellUnix 下可以直接把SOCKET 作為“/bin/sh”的輸入輸出句柄。在Win32下,socket(函數(shù)隱式指定了重疊標志,它創(chuàng)建的SOCKET 是重疊套接字(overlapped socket,不能直接將cmd.exe 的stdin 、stdout 、stderr 轉(zhuǎn)向到套接字上,只能用管道(pipe來與cmd.exe 進程傳輸數(shù)據(jù)。winsock

3、推薦使用重疊套接字,所以實際使用盡可能用管道。WSASocket(創(chuàng)建的SOCKET 默認是非重疊套接字,可以直接將cmd.exe 的stdin 、stdout 、stderr 轉(zhuǎn)向到套接字上。第4頁復用當前連接技術(shù)介紹2.2 多線程環(huán)境搜索SOCKET-=-=-=-=-=-start sample code =-=-=-=-=-=-=s = WSASocket(2,1,.bind(s,.listen(s,.s2 = accept(s,.-=-=-=-=-=-end sample code =-=-=-=-=-=-當s 處于accept 狀態(tài)時,任何對s 操作的網(wǎng)絡函數(shù)都會處于等待狀態(tài),直到有

4、連接建立。先用WaitForSingleObjectEx 處理句柄,當s 處于accept 狀態(tài)時會返回WAIT_TIMEOUT,可用的句柄返回WAIT_OBJECT_0。然后再用ioctlsocket/recv處理判斷是否當前連接的socket 。第5頁復用當前連接技術(shù)介紹2.3 優(yōu)勢復用當前連接的技術(shù)相對較隱蔽,而且對于Win32的用管道綁定cmd.exe 后,和服務器交互的數(shù)據(jù)可以用xor 的辦法進行編碼,進一步躲避IDS 的檢測。單單查找SOCKET 的shellcode 可以寫的相對比較短,在找到SOCKET 后,可以再繼續(xù)接收一段功能更復雜的shellcode 到緩沖區(qū),然后跳入執(zhí)

5、行。對于該后續(xù)shellcode 就沒有任何字符和長度的限制。甚至接收一個dll 文件,實現(xiàn)更復雜的功能。第6頁Win32平臺的具體實現(xiàn)3. Win32平臺的具體實現(xiàn)3.1 端口復用具體實現(xiàn)端口復用shellcode 要求服務重新綁定在地址,而且不能使用SO_EXCLUSIVEADDRUSE選項??蛻舳斯舻臅r候需要把服務端的具體IP 和端口寫入shellcode 里面。Shellcode 里執(zhí)行:setsockopt(s, 0xFFFF, 4, &d, 4;bind(s, &sockaddr, 0x10;用netstat -na 在服務端查看可以看到同一個端口有

6、和具體IP 兩個綁定著。如果服務端在NAT 環(huán)境里,可能會存在問題。第7頁Win32平臺的具體實現(xiàn)3.2 重新綁定原端口的實現(xiàn)CreateProcess(創(chuàng)建一個suspend 模式的進程。GetThreadContext(來獲得該線程的上下文結(jié)構(gòu)和寄存器信息。用VirtualAllocEx(在該進程里分配內(nèi)存。把shellcode 指令用WriteProcessMemory(來寫入該進程剛才分配的空間。SetThreadContext(把GetThreadContext(獲得的EIP 修改指向VirtualAllocEx(分配的內(nèi)存地址。ResumeThread(恢復suspe

7、nd 模式的進程。TerminateProcess(-1, 0終止當前進程。循環(huán)綁定原來端口。第8頁Win32平臺的具體實現(xiàn)3.3 getpeername查找socket客戶端在發(fā)送攻擊串之前用getsockname 函數(shù)獲得套接字本地信息,把相應信息寫入shellcode 。服務端shellcode 從1開始遞增查找socket ,并且用getpeername 函數(shù)獲得套接字遠程信息。如果兩個信息相符就認為找到socket ,跳出遞增循環(huán),并且把shell 綁定在這個socket 上。有很大局限性,如果客戶端在NAT 網(wǎng)絡環(huán)境里,客戶端getsockname 取得的套接字信息和服務端getp

8、eername 取得的套接字信息不一定相符,導致查找socket 失敗。第9頁Win32平臺的具體實現(xiàn)3.4 字串匹配查找socket客戶端在發(fā)送完攻擊數(shù)據(jù)包后,再發(fā)送幾個字節(jié)的字符串,在服務端的shellcode 對一個遞增的socket 值接收相應字節(jié)的字符串,然后匹配是否是當前連接的socket 。這種方法避免了getpeername 在NAT 網(wǎng)絡環(huán)境里的限制。多線程環(huán)境下容易處理到處于accept 下的socket ,一般的網(wǎng)絡函數(shù)都會進入等待狀態(tài),直到有連接建立。flier 提到WaitForSingleObjectEx 處理這種處于accept 的socket 會返回WAIT_T

9、IMEOUT,可用的句柄返回WAIT_OBJECT_0。第10頁Win32平臺的具體實現(xiàn)3.4 字串匹配查找socket查找流程如下:while (1i+;ret = WaitForSingleObjectEx(i, 10, 1;if (ret != 0 continue;ret = ioctlsocket(i, FIONREAD, &ul;if (ul!= 4 continue;recv(i, buff, 4, 0;if( *(DWORD *buff = 'Xc0n' gotoshell;bkbll 測試發(fā)現(xiàn)socket(函數(shù)創(chuàng)建的句柄在accept 用戶后有g(shù)ets

10、ockname 操作,那么后續(xù)WaitForSingleObjectEx 返回WAIT_TIMEOUT (0x102。第11頁Win32平臺的具體實現(xiàn)3.5 Hook系統(tǒng)的recv 調(diào)用用VirtualProtect 設(shè)置真實recv 函數(shù)地址開始的5個字節(jié)為可寫。把真實recv 開始的指令改為跳轉(zhuǎn)到新recv 函數(shù)。在新的recv 函數(shù)里先把這5個字節(jié)指令改回去。調(diào)用真實recv 來執(zhí)行系統(tǒng)本來的操作。再把真實recv 函數(shù)地址開始的5個字節(jié)改為跳轉(zhuǎn)新recv 的指令。比較接收的數(shù)據(jù)是否是約定字串,如果是就綁定一個cmd.exe ,否則跳到壓棧的返回地址,繼續(xù)系統(tǒng)原來的流程。這種方法能繞過r

11、pc 之類機制,也能夠搜索再次連接的socket 。第12頁Win32平臺的具體實現(xiàn)3.6 文件上傳下載功能的實現(xiàn)必須要客戶端和shellcode 做緊密配合。上傳文件需要客戶端打開并讀取文件發(fā)送給服務端,服務端的shellcode 創(chuàng)建并寫入該文件。下載文件需要服務端的shellcode 打開讀取文件發(fā)送給客戶端,客戶端創(chuàng)建并寫入該文件。由于是非阻塞的連接,上傳文件的時候,服務端的shellcode 必須判斷socket 里是否還有數(shù)據(jù)可接收,如果沒有就關(guān)閉句柄,執(zhí)行后續(xù)流程。下載文件的時候,客戶端必須判斷socket 里是否還有數(shù)據(jù)。select 和ioctlsocket 都可以實現(xiàn)這個功

12、能。select 的匯編實現(xiàn)相對復雜,ioctlsocket 需要在發(fā)送緩沖塊大于接收緩沖塊的情況下使用。第13頁Win32平臺的具體實現(xiàn)3.6 文件上傳下載功能的實現(xiàn)客戶端和服務端shellcode 可以使用一個約定的key 對傳輸?shù)臄?shù)據(jù)做xor 操作,由于用管道綁定cmd ,那么交互的命令也是編碼的,進一步增強隱蔽性,躲避IDS 的檢測。第14頁Linux x86平臺的具體實現(xiàn)4. Linux x86平臺的具體實現(xiàn)4.1 fcntl設(shè)置socket 狀態(tài)scz 最早使用這種方法,基本思路如下:while (1i+;oldflags = fcntl(i, F_GETFL, 0;fcntl(i

13、, F_SETFL, oldflags| O_NONBLOCK;read(i, buf, 4;fcntl( i, F_SETFL, oldflags; if (buf= 'Xc0n' gotoshell; 第15頁Linux x86平臺的具體實現(xiàn)4.2 利用OOB 特性bkbll 最先使用該技術(shù)。Berkeley 套接口的實現(xiàn)OOB 數(shù)據(jù)一般是不會被阻塞的,查找的流程大致如下:while (1i+;recv(i, buf, 1, 1;if (buf= 'I' gotoshell;Unix/Linux該方法最是簡單易行,而且有效。第16頁Linux x86平臺的具

14、體實現(xiàn)4.3 利用ioctl 函數(shù)的一些特性ioctl 的FIONREAD 可以判斷句柄有多少數(shù)據(jù)可讀,而且一般情況不會被阻塞。查找socket 的流程大致如下:while (1i+;ioctl(i, FIONREAD, &ul;if (ul!= 4 continue;read(i, buf, 4;if (buf= 'Xc0n' gotoshell;第17頁Linux x86平臺的具體實現(xiàn)4.4 文件上傳下載功能的實現(xiàn)和Win32實現(xiàn)相似,只是Linux/Unix下似乎沒有額外通過管道來綁定/bin/sh,所以shell 里交互的數(shù)據(jù)無法編碼處理。隱蔽性可能較差。第18

15、頁AIX PowerPC下具體實現(xiàn)5. AIX PowerPC平臺的具體實現(xiàn)緩存機制instruction cachedata cache第19頁AIX PowerPC下具體實現(xiàn)PowerPC 自修改的代碼按照如下的步驟:存儲修改的指令。執(zhí)行dcbst 指令,強制包含有修改過的指令的高速緩存行進行存儲。執(zhí)行sync 指令,確保dcbst 完成。執(zhí)行icbi 指令,使將要存放修改后指令的指令高速緩存行無效。執(zhí)行isync 指令,清除所有指令的指令管道,那些指令在高速緩存行被設(shè)為無效之前可能早已被取走了?,F(xiàn)在可以運行修改后的指令了。當取這個指令時會發(fā)生指令高速緩存失敗,結(jié)果就會從存儲器中取得修改后

16、的指令。第20頁AIX PowerPC下具體實現(xiàn)有些AIX 是沒有高速緩存管理指令。簡單的解決方法是做完自修改后執(zhí)行一個系統(tǒng)中斷,那么后面就能正確執(zhí)行自修改后的指令。實現(xiàn)解碼shellcode ,為實現(xiàn)復雜shellcode 做好基礎(chǔ)。第21頁AIX PowerPC下具體實現(xiàn)5.1 利用OOB 特性的實現(xiàn)和Linux x86的實現(xiàn)類似難點:各版本AIX 的系統(tǒng)調(diào)用號都是不相同的,導致exploit 不通用。本地exploit 先用oslevel -r 判斷系統(tǒng)版本,然后把各不同系統(tǒng)調(diào)用號寫入shellcode 。遠程exploit 更加困難。如果服務端開放dtscpd 服務,給該服務發(fā)送驗證數(shù)據(jù)可以得到系統(tǒng)版本信息。第22頁特別感謝6. 特別感謝eyas, scz, flier, tombkeeper, watercloud, Emmanuel, H D Moore, KF.第23頁參考文檔7. 參考文檔1 Win32 Assembly Components2 Win32 One-Way Shellcode3 Understanding Windows Shellcode5 Serv-U FTPD 2.x/3.x/4.x/5.x "MDTM"

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論