成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

WebServer端口重定向后門的研究

安全 黑客攻防
內(nèi)網(wǎng)環(huán)境中,firewall只允許Web Server的80端口建立網(wǎng)絡(luò)連接,并且Web Server上的80端口已經(jīng)被IIS、Apache等軟件占用了的情況下,怎么建立一個(gè)RAT后門。

前段時(shí)間有朋友問到了我一個(gè)關(guān)于“無端口可用”的問題。說在如下圖所示的內(nèi)網(wǎng)環(huán)境中,firewall只允許Web Server的80端口建立網(wǎng)絡(luò)連接,并且Web Server上的80端口已經(jīng)被IIS、Apache等軟件占用了的情況下,怎么建立一個(gè)RAT后門。

 

圖片1.jpg

 

早些時(shí)候的著名后門byshell就考慮到了這個(gè)問題,于是使用了一種非常挫的方式去解決。客戶端將數(shù)據(jù)發(fā)送到80端口,服務(wù)端將IIS的進(jìn)程打開,循環(huán)遍歷IIS進(jìn)程的整個(gè)內(nèi)存去尋找數(shù)據(jù)標(biāo)記。顯然這種方法從效率和穩(wěn)定性上來講,都是不可取的。這里姑且不把這種方法當(dāng)做方法。

過去有人提出過一種端口復(fù)用的方法去建立的后門,這個(gè)方法使用了setsockopt()這個(gè)API,這個(gè)API在MSDN里說是用來設(shè)置套接字的選項(xiàng)的。原型如下。

view source

print?1.int setsockopt(

2. SOCKET s,

3. int level,

4. int optname,

5. const char FAR* optval,

6. int optlen

7.);

我們這里只關(guān)心它的第三個(gè)參數(shù),這個(gè)參數(shù)用來設(shè)置套接字狀態(tài)。這個(gè)參數(shù)有一個(gè)取值為SO_REUSEADDR,MSDN對(duì)這個(gè)參數(shù)的解釋如下。

The state of the SO_REUSEADDR socket option determines whether the local transport address to which a socket will be bound is always shared with other sockets. This socket option applies only to listening sockets, datagram sockets, and connection-oriented sockets.

也就是說,當(dāng)?shù)谌齻€(gè)參數(shù)的取值設(shè)置為SO_REUSEADDR時(shí),套接字的端口是可以共享復(fù)用的。具體共享細(xì)節(jié)為后來居上,后建立該參數(shù)鏈接的套接字先拿到數(shù)據(jù)。此方法目前對(duì)Apache和IIS5.0及以下版本有效。那為什么IIS6.0及以上就不行了呢?之后會(huì)做解釋。

通過逆向和查閱開源代碼可以得知,Apache和IIS5.0及以下版本使用了應(yīng)用層的IOCP模型進(jìn)行通信,盡管框架比較復(fù)雜,但是依然在應(yīng)用層創(chuàng)建了套接字。到這里你是否有新的想法呢?沒錯(cuò),我想到了可以使用遠(yuǎn)程線程注入一個(gè)DLL進(jìn)行Api Hook例如WSARecv()、WSASend()這樣的API獲取套接字和異步IO的緩沖區(qū)指針,再使用getpeername()函數(shù)對(duì)比客戶端信息,緊接著用套接字進(jìn)行IO。

或者也可以使用更簡(jiǎn)單粗暴的方法,直接使用SPI安裝一個(gè)LSP,也可以抓到數(shù)據(jù),但是就比較難再做通信了。我們將這種在應(yīng)用層建立套接字通信轉(zhuǎn)接通信過程的方法總結(jié)為下圖,紅線表示可以利用的地方。

 

圖片2.png

 

這里可能就有同學(xué)會(huì)問到,為什么不能直接上Rootkit呢?如果從ring0層去考慮這個(gè)問題理論上是非常容易的。我們可以使用TDI或者NDIS的過濾驅(qū)動(dòng)直接過濾所有IO網(wǎng)卡的流量,不過寫個(gè)這么重量級(jí)的后門,的確有“殺雞焉用宰牛刀”的意味。再者,也可以使用SSDT HOOK和對(duì)TCP驅(qū)動(dòng)下IRP HOOK去解決問題。但是為什么不去做呢?因?yàn)槭褂抿?qū)動(dòng)目前已經(jīng)不是Windows木馬編程潮流所在。

還記得之前提到的IIS6.0和以上版本的問題嗎?這里一個(gè)新問題出現(xiàn)了,從IIS6.0開始,微軟可能考慮到了安全性和穩(wěn)定性以及數(shù)據(jù)處理的效率的問題,將網(wǎng)絡(luò)通信的過程封裝在了ring0層,使用了http.sys這個(gè)驅(qū)動(dòng)來直接進(jìn)行網(wǎng)絡(luò)通信。如下圖所示。

這樣一來,應(yīng)用層就沒有了套接字,我們就不能使用上述方法去解決這個(gè)問題了。那怎么辦呢?難道應(yīng)用層因此就再?zèng)]有可以利用的地方了嗎?這么想并不符合Geek的風(fēng)格。于是,經(jīng)過對(duì)W3wp.exe的初步的逆向,又發(fā)現(xiàn)了一些可以利用的地方。

 

圖片3.png

 

這個(gè)過程中,ring0無法處理的HTTP請(qǐng)求,都下發(fā)由w3wp.exe進(jìn)程處理。針對(duì)HTTP請(qǐng)求考慮,我想到了如下幾點(diǎn)可以轉(zhuǎn)接網(wǎng)絡(luò)通信過程的地方。

1.GET或者POST對(duì)硬盤中的文件做訪問,有可能需要通過應(yīng)用層CreateFile()、ReadFile()、WriteFile()去完成。(API HOOK?)

2.對(duì)于HTTP這種大部分內(nèi)容由ANSI字符串解析的協(xié)議,難道用不到標(biāo)準(zhǔn)字符串處理函數(shù)嗎?(還是API HOOK?)

3.對(duì)ASP、PHP、JSP腳本的解釋,可能需要將數(shù)據(jù)提交給解釋引擎去完成。(inline hook?)

基于以上幾點(diǎn),我也一一做了驗(yàn)證。這里逆向要注意了,OllyDbg對(duì)低權(quán)限進(jìn)程的Attach調(diào)試穩(wěn)定性并不好,經(jīng)常崩掉。所以我換了非常難看的Windbg。微軟自家的調(diào)試器調(diào)自家的程序非常穩(wěn)定。首先bp了CreateFileW(),得到了一個(gè)比較驚喜的效果。如圖所示。

 

圖片4.png

 

Windbg攔下了CreateFileW(),并且在第一個(gè)參數(shù)里,我們看到了我們提交的“fuckyou1234”,這里我們就完全可以用if(wcsncmp(s1,L”fuckyou1234”,11))這樣取得后門命令了。

而我通過對(duì)多個(gè)字符串處理函數(shù)的bp,同樣也發(fā)現(xiàn)了可以利用的地方。例如wcsstr()函數(shù)的斷點(diǎn),成功的抓到了cookies和一些其他與HTTP協(xié)議相關(guān)的信息。cookies可以比URL提交跟多內(nèi)容,并且可以繞過一些log和過濾。如下圖所示。

 

圖片5.jpg

 

這是對(duì)前兩個(gè)問題逆向的初步成果,至于第三個(gè)問題,暫時(shí)先留著好了。現(xiàn)在遇到了一個(gè)新的問題,當(dāng)拿到需要執(zhí)行的命令,我們至少不能讓他去w3wp.exe這個(gè)低權(quán)限的進(jìn)程去實(shí)施。那么怎么讓他在高權(quán)限的進(jìn)程去實(shí)施呢?還有,我們執(zhí)行完的結(jié)果,該怎么返回給客戶端呢?

這里我考慮到了留一個(gè)宿主進(jìn)程,建立事件對(duì)象和郵槽或者管道接受由w3wp.exe發(fā)來的命令。至于把數(shù)據(jù)反饋到客戶端,我們可以重定向CreateFileW()的第一個(gè)參數(shù),將他指向管道也好,指向某個(gè)硬盤里的輸出文件也好,當(dāng)緊接著去ReadFile()的時(shí)候,就可以順利將我們的執(zhí)行結(jié)果反饋到客戶端去了。

這里涉及到高低權(quán)限進(jìn)程通信的一個(gè)問題,高權(quán)限進(jìn)程創(chuàng)建的內(nèi)核對(duì)象必須設(shè)置安全屬性為低權(quán)限可繼承句柄,并且設(shè)置安全描述符和DACL。事件、郵槽、管道的等內(nèi)核對(duì)象才能被低權(quán)限進(jìn)程打開。具體代碼如下。最后,我用上述所訴內(nèi)容,寫了如下的一個(gè)后門。

view source

print?01.HANDLE secCreateEventPort(WCHAR* szNameEvent)

02.{

03. SECURITY_DESCRIPTOR SecDescriptor = {0};

04. SECURITY_ATTRIBUTES SecurityAttributes = {0};

05. if (InitializeSecurityDescriptor(&SecDescriptor,SECURITY_DESCRIPTOR_REVISION) == FALSE)

06. return INVALID_HANDLE_VALUE;

07. if(SetSecurityDescriptorDacl(&SecDescriptor,TRUE, NULL, FALSE) == 0)

08. return INVALID_HANDLE_VALUE;

09. SecurityAttributes.bInheritHandle = TRUE;

10. SecurityAttributes.lpSecurityDescriptor = &SecDescriptor;

11. SecurityAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);

12. return CreateEvent(&SecurityAttributes,TRUE,FALSE,szNameEvent);

13.}

 

圖片6.jpg
責(zé)任編輯:藍(lán)雨淚 來源: 博客
相關(guān)推薦

2013-06-26 15:42:54

2021-12-02 18:14:37

PortBender定向工具安全工具

2010-12-14 15:07:15

ICMP路由重定向

2020-12-09 11:10:12

shellLinux管道

2011-04-08 15:52:22

路由器

2017-01-19 19:14:20

Linux重定向命令

2010-03-09 16:11:59

Linux重定向

2009-11-23 18:39:17

PHP重定向

2010-07-13 14:10:44

ICMP協(xié)議

2022-09-02 08:03:44

IO程序網(wǎng)卡

2010-07-21 15:56:04

2021-03-28 08:32:58

Java

2017-12-06 10:15:27

跳轉(zhuǎn)機(jī)制Chrome

2020-07-27 07:41:23

Linux重定向數(shù)據(jù)流

2010-12-31 13:35:25

文件夾重定向

2011-06-15 14:43:43

301重定向

2009-06-25 14:54:22

Servlet轉(zhuǎn)發(fā)Servlet重定向

2009-12-01 11:04:10

PHP重定向網(wǎng)頁(yè)

2009-06-30 15:37:27

Servlet和JSP

2014-08-07 10:23:24

linux重定向
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 精品久久久久久久久久久久 | 亚洲色欧美另类 | 亚洲成人网在线 | 中文字幕 视频一区 | 亚洲视频一区二区 | 日韩久久久久久 | 少妇精品久久久久久久久久 | 午夜欧美| caoporn地址 | 在线三级网址 | 涩涩视频在线观看免费 | 中文字幕在线观看 | 中文字幕乱码视频32 | av福利网| 久久精品欧美电影 | 国产91在线播放 | 欧美第一区 | 99视频网站 | 性天堂网| 亚洲三级在线观看 | 午夜精品一区二区三区免费视频 | 一级做a爰片久久毛片 | 欧美电影在线观看网站 | 欧美日韩精品免费 | 国产一区二区三区视频 | 亚洲精品在线看 | 国产精品永久在线观看 | 69视频在线播放 | 国产美女精品视频免费观看 | 欧美极品一区二区 | 亚洲二区视频 | 男女免费网站 | 亚洲精品福利视频 | 久久国产精品精品国产色婷婷 | 91免费观看视频 | 精久久 | 日本在线视频中文字幕 | 国产精品久久久久久久久久软件 | 热久久免费视频 | 亚洲欧美一区二区三区视频 | 99精品国产一区二区三区 |