版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 滲透防火墻的Shellcode 技術(shù)作者:內(nèi)容摘要1. 遠(yuǎn)程shellcode 的幾種實(shí)現(xiàn)方式2. 復(fù)用當(dāng)前連接技術(shù)的一些問題及優(yōu)勢(shì)3. Win32平臺(tái)的具體實(shí)現(xiàn)4. Linux x86平臺(tái)的具體實(shí)現(xiàn)5. AIX PowerPC平臺(tái)的具體實(shí)現(xiàn)6. 特別感謝7. 參考文檔第2頁實(shí)現(xiàn)方式簡(jiǎn)介1. 遠(yuǎn)程shellcode 的幾種實(shí)現(xiàn)方式1.1 監(jiān)聽端口1.1.1 監(jiān)聽新的端口1.1.2 重新使用原端口 端口復(fù)用 重新綁定1.2 反向連接1.3 復(fù)用當(dāng)前連接的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頁復(fù)用當(dāng)前連接技術(shù)介紹2. 復(fù)用當(dāng)前連接技術(shù)的一些問題及優(yōu)勢(shì)2.1 綁定shellUnix 下可以直接把SOCKET 作為“/bin/sh”的輸入輸出句柄。在Win32下,socket(函數(shù)隱式指定了重疊標(biāo)志,它創(chuàng)建的SOCKET 是重疊套接字(overlapped socket,不能直接將cmd.exe 的stdin 、stdout 、stderr 轉(zhuǎn)向到套接字上,只能用管道(pipe來與cmd.exe 進(jìn)程傳輸數(shù)據(jù)。winsock
3、推薦使用重疊套接字,所以實(shí)際使用盡可能用管道。WSASocket(創(chuàng)建的SOCKET 默認(rèn)是非重疊套接字,可以直接將cmd.exe 的stdin 、stdout 、stderr 轉(zhuǎn)向到套接字上。第4頁復(fù)用當(dāng)前連接技術(shù)介紹2.2 多線程環(huán)境搜索SOCKET-=-=-=-=-=-start sample code =-=-=-=-=-=-=s = WSASocket(2,1,.bind(s,.listen(s,.s2 = accept(s,.-=-=-=-=-=-end sample code =-=-=-=-=-=-當(dāng)s 處于accept 狀態(tài)時(shí),任何對(duì)s 操作的網(wǎng)絡(luò)函數(shù)都會(huì)處于等待狀態(tài),直到有
4、連接建立。先用WaitForSingleObjectEx 處理句柄,當(dāng)s 處于accept 狀態(tài)時(shí)會(huì)返回WAIT_TIMEOUT,可用的句柄返回WAIT_OBJECT_0。然后再用ioctlsocket/recv處理判斷是否當(dāng)前連接的socket 。第5頁復(fù)用當(dāng)前連接技術(shù)介紹2.3 優(yōu)勢(shì)復(fù)用當(dāng)前連接的技術(shù)相對(duì)較隱蔽,而且對(duì)于Win32的用管道綁定cmd.exe 后,和服務(wù)器交互的數(shù)據(jù)可以用xor 的辦法進(jìn)行編碼,進(jìn)一步躲避IDS 的檢測(cè)。單單查找SOCKET 的shellcode 可以寫的相對(duì)比較短,在找到SOCKET 后,可以再繼續(xù)接收一段功能更復(fù)雜的shellcode 到緩沖區(qū),然后跳入執(zhí)
5、行。對(duì)于該后續(xù)shellcode 就沒有任何字符和長(zhǎng)度的限制。甚至接收一個(gè)dll 文件,實(shí)現(xiàn)更復(fù)雜的功能。第6頁Win32平臺(tái)的具體實(shí)現(xiàn)3. Win32平臺(tái)的具體實(shí)現(xiàn)3.1 端口復(fù)用具體實(shí)現(xiàn)端口復(fù)用shellcode 要求服務(wù)重新綁定在地址,而且不能使用SO_EXCLUSIVEADDRUSE選項(xiàng)??蛻舳斯舻臅r(shí)候需要把服務(wù)端的具體IP 和端口寫入shellcode 里面。Shellcode 里執(zhí)行:setsockopt(s, 0xFFFF, 4, &d, 4;bind(s, &sockaddr, 0x10;用netstat -na 在服務(wù)端查看可以看到同一個(gè)端口有
6、和具體IP 兩個(gè)綁定著。如果服務(wù)端在NAT 環(huán)境里,可能會(huì)存在問題。第7頁Win32平臺(tái)的具體實(shí)現(xiàn)3.2 重新綁定原端口的實(shí)現(xiàn)CreateProcess(創(chuàng)建一個(gè)suspend 模式的進(jìn)程。GetThreadContext(來獲得該線程的上下文結(jié)構(gòu)和寄存器信息。用VirtualAllocEx(在該進(jìn)程里分配內(nèi)存。把shellcode 指令用WriteProcessMemory(來寫入該進(jìn)程剛才分配的空間。SetThreadContext(把GetThreadContext(獲得的EIP 修改指向VirtualAllocEx(分配的內(nèi)存地址。ResumeThread(恢復(fù)suspe
7、nd 模式的進(jìn)程。TerminateProcess(-1, 0終止當(dāng)前進(jìn)程。循環(huán)綁定原來端口。第8頁Win32平臺(tái)的具體實(shí)現(xiàn)3.3 getpeername查找socket客戶端在發(fā)送攻擊串之前用getsockname 函數(shù)獲得套接字本地信息,把相應(yīng)信息寫入shellcode 。服務(wù)端shellcode 從1開始遞增查找socket ,并且用getpeername 函數(shù)獲得套接字遠(yuǎn)程信息。如果兩個(gè)信息相符就認(rèn)為找到socket ,跳出遞增循環(huán),并且把shell 綁定在這個(gè)socket 上。有很大局限性,如果客戶端在NAT 網(wǎng)絡(luò)環(huán)境里,客戶端getsockname 取得的套接字信息和服務(wù)端getp
8、eername 取得的套接字信息不一定相符,導(dǎo)致查找socket 失敗。第9頁Win32平臺(tái)的具體實(shí)現(xiàn)3.4 字串匹配查找socket客戶端在發(fā)送完攻擊數(shù)據(jù)包后,再發(fā)送幾個(gè)字節(jié)的字符串,在服務(wù)端的shellcode 對(duì)一個(gè)遞增的socket 值接收相應(yīng)字節(jié)的字符串,然后匹配是否是當(dāng)前連接的socket 。這種方法避免了getpeername 在NAT 網(wǎng)絡(luò)環(huán)境里的限制。多線程環(huán)境下容易處理到處于accept 下的socket ,一般的網(wǎng)絡(luò)函數(shù)都會(huì)進(jìn)入等待狀態(tài),直到有連接建立。flier 提到WaitForSingleObjectEx 處理這種處于accept 的socket 會(huì)返回WAIT_T
9、IMEOUT,可用的句柄返回WAIT_OBJECT_0。第10頁Win32平臺(tái)的具體實(shí)現(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 測(cè)試發(fā)現(xiàn)socket(函數(shù)創(chuàng)建的句柄在accept 用戶后有g(shù)ets
10、ockname 操作,那么后續(xù)WaitForSingleObjectEx 返回WAIT_TIMEOUT (0x102。第11頁Win32平臺(tái)的具體實(shí)現(xiàn)3.5 Hook系統(tǒng)的recv 調(diào)用用VirtualProtect 設(shè)置真實(shí)recv 函數(shù)地址開始的5個(gè)字節(jié)為可寫。把真實(shí)recv 開始的指令改為跳轉(zhuǎn)到新recv 函數(shù)。在新的recv 函數(shù)里先把這5個(gè)字節(jié)指令改回去。調(diào)用真實(shí)recv 來執(zhí)行系統(tǒng)本來的操作。再把真實(shí)recv 函數(shù)地址開始的5個(gè)字節(jié)改為跳轉(zhuǎn)新recv 的指令。比較接收的數(shù)據(jù)是否是約定字串,如果是就綁定一個(gè)cmd.exe ,否則跳到壓棧的返回地址,繼續(xù)系統(tǒng)原來的流程。這種方法能繞過r
11、pc 之類機(jī)制,也能夠搜索再次連接的socket 。第12頁Win32平臺(tái)的具體實(shí)現(xiàn)3.6 文件上傳下載功能的實(shí)現(xiàn)必須要客戶端和shellcode 做緊密配合。上傳文件需要客戶端打開并讀取文件發(fā)送給服務(wù)端,服務(wù)端的shellcode 創(chuàng)建并寫入該文件。下載文件需要服務(wù)端的shellcode 打開讀取文件發(fā)送給客戶端,客戶端創(chuàng)建并寫入該文件。由于是非阻塞的連接,上傳文件的時(shí)候,服務(wù)端的shellcode 必須判斷socket 里是否還有數(shù)據(jù)可接收,如果沒有就關(guān)閉句柄,執(zhí)行后續(xù)流程。下載文件的時(shí)候,客戶端必須判斷socket 里是否還有數(shù)據(jù)。select 和ioctlsocket 都可以實(shí)現(xiàn)這個(gè)功
12、能。select 的匯編實(shí)現(xiàn)相對(duì)復(fù)雜,ioctlsocket 需要在發(fā)送緩沖塊大于接收緩沖塊的情況下使用。第13頁Win32平臺(tái)的具體實(shí)現(xiàn)3.6 文件上傳下載功能的實(shí)現(xiàn)客戶端和服務(wù)端shellcode 可以使用一個(gè)約定的key 對(duì)傳輸?shù)臄?shù)據(jù)做xor 操作,由于用管道綁定cmd ,那么交互的命令也是編碼的,進(jìn)一步增強(qiáng)隱蔽性,躲避IDS 的檢測(cè)。第14頁Linux x86平臺(tái)的具體實(shí)現(xiàn)4. Linux x86平臺(tái)的具體實(shí)現(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平臺(tái)的具體實(shí)現(xiàn)4.2 利用OOB 特性bkbll 最先使用該技術(shù)。Berkeley 套接口的實(shí)現(xiàn)OOB 數(shù)據(jù)一般是不會(huì)被阻塞的,查找的流程大致如下:while (1i+;recv(i, buf, 1, 1;if (buf= 'I' gotoshell;Unix/Linux該方法最是簡(jiǎn)單易行,而且有效。第16頁Linux x86平臺(tái)的具
14、體實(shí)現(xiàn)4.3 利用ioctl 函數(shù)的一些特性ioctl 的FIONREAD 可以判斷句柄有多少數(shù)據(jù)可讀,而且一般情況不會(huì)被阻塞。查找socket 的流程大致如下:while (1i+;ioctl(i, FIONREAD, &ul;if (ul!= 4 continue;read(i, buf, 4;if (buf= 'Xc0n' gotoshell;第17頁Linux x86平臺(tái)的具體實(shí)現(xiàn)4.4 文件上傳下載功能的實(shí)現(xiàn)和Win32實(shí)現(xiàn)相似,只是Linux/Unix下似乎沒有額外通過管道來綁定/bin/sh,所以shell 里交互的數(shù)據(jù)無法編碼處理。隱蔽性可能較差。第18
15、頁AIX PowerPC下具體實(shí)現(xiàn)5. AIX PowerPC平臺(tái)的具體實(shí)現(xiàn)緩存機(jī)制instruction cachedata cache第19頁AIX PowerPC下具體實(shí)現(xiàn)PowerPC 自修改的代碼按照如下的步驟:存儲(chǔ)修改的指令。執(zhí)行dcbst 指令,強(qiáng)制包含有修改過的指令的高速緩存行進(jìn)行存儲(chǔ)。執(zhí)行sync 指令,確保dcbst 完成。執(zhí)行icbi 指令,使將要存放修改后指令的指令高速緩存行無效。執(zhí)行isync 指令,清除所有指令的指令管道,那些指令在高速緩存行被設(shè)為無效之前可能早已被取走了?,F(xiàn)在可以運(yùn)行修改后的指令了。當(dāng)取這個(gè)指令時(shí)會(huì)發(fā)生指令高速緩存失敗,結(jié)果就會(huì)從存儲(chǔ)器中取得修改后
16、的指令。第20頁AIX PowerPC下具體實(shí)現(xiàn)有些AIX 是沒有高速緩存管理指令。簡(jiǎn)單的解決方法是做完自修改后執(zhí)行一個(gè)系統(tǒng)中斷,那么后面就能正確執(zhí)行自修改后的指令。實(shí)現(xiàn)解碼shellcode ,為實(shí)現(xiàn)復(fù)雜shellcode 做好基礎(chǔ)。第21頁AIX PowerPC下具體實(shí)現(xiàn)5.1 利用OOB 特性的實(shí)現(xiàn)和Linux x86的實(shí)現(xiàn)類似難點(diǎn):各版本AIX 的系統(tǒng)調(diào)用號(hào)都是不相同的,導(dǎo)致exploit 不通用。本地exploit 先用oslevel -r 判斷系統(tǒng)版本,然后把各不同系統(tǒng)調(diào)用號(hào)寫入shellcode 。遠(yuǎn)程exploit 更加困難。如果服務(wù)端開放dtscpd 服務(wù),給該服務(wù)發(fā)送驗(yàn)證數(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《醫(yī)藥數(shù)理統(tǒng)計(jì)方法》題庫(kù)
- 《市場(chǎng)營(yíng)銷學(xué)》期末復(fù)習(xí)章節(jié)試題及答案
- 第3單元 封建時(shí)代的歐洲(高頻非選擇題25題)(解析版)
- 八下期末考拔高測(cè)試卷(3)(原卷版)
- 第24課 人民解放戰(zhàn)爭(zhēng)的勝利(解析版)
- 《電鍍工藝流程》課件
- 院線電影投資發(fā)行合同三篇
- 七夕情人節(jié)課件15
- 酒店管理中的設(shè)備設(shè)施管理
- 高一的軍訓(xùn)心得筆記10篇
- 移動(dòng)發(fā)布推介會(huì)服務(wù)方案
- 供應(yīng)商產(chǎn)品質(zhì)量監(jiān)督管理制度
- 單位工程、分部工程、分項(xiàng)工程及檢驗(yàn)批劃分方案
- 器樂Ⅰ小提琴課程教學(xué)大綱
- 主債權(quán)合同及不動(dòng)產(chǎn)抵押合同(簡(jiǎn)化版本)
- 服裝廠安全生產(chǎn)責(zé)任書
- JGJ202-2010建筑施工工具式腳手架安全技術(shù)規(guī)范
- 液壓爬模系統(tǒng)作業(yè)指導(dǎo)書
- 2018-2019學(xué)年北京市西城區(qū)人教版六年級(jí)上冊(cè)期末測(cè)試數(shù)學(xué)試卷
- SFC15(發(fā)送)和SFC14(接收)組態(tài)步驟
- LX電動(dòng)單梁懸掛說明書
評(píng)論
0/150
提交評(píng)論