溢位程式使用通道對抗防火牆 (轉)
溢位程式使用通道對抗防火牆 (轉)[@more@]現在很多等應用使用了,我們自己也可能處於、透明閘道器等後面,這對於等的通訊造成了一個小小的麻煩。可能很多人會想到code主動連線,這個如果防火牆做得好的話,不准許訪問外部一樣不行,即使不考慮這防火牆,而我們自己可能往往處於代理或者透明閘道器後面,考慮這也是一道難題。
但我們仔細考慮考慮一下資料傳輸問題,就會發現實際上這一切都沒有想象的那麼困難,其實早已經有東西為我們掃清了道路,那就是資料通道。所以很多問題怕的就是我們沒有去想,沒有去理解一些東西。只要我們訪問到了server,其實對於現在這些應用,中間已經建立了類似下面一樣的一個通道,其實中間可能還更復雜,但對於我們的應用,都會有這麼一個通道。
client 要運用這個通道,只要我們在server上找到了對於這個通道的讀寫就可以了。下面具體針對IIS說一說應用。IIS有兩種介面,IS和CGI,主要考慮這兩種應用的情況下的辦法。
1、ISAPI介面;IIS的server與ISAPI通訊大致是這樣:
ecb
servertypedef struct _EXTENSION_CONTROL_BLOCK
{D cbSize; // Size of this struct.
DWORD dwVersion; // Version info of this spec
HCONN ConnID; // Context number not to be modified!
DWORD dwHttpStatude; // HTTP Status code
CHAR lpszLogData[HSE_LOG_BUFFER_LEN];// null tenated log info specific to this Extension DLL
LPSTR lpszMethod; // REQUEST_METHOD
LPSTR lpszQueryString; // QUERY_STRING
LPSTR lpszPathInfo; // PATH_INFO
LPSTR lpszPathTranslated; // PATH_TRANSLATED
DWORD cbTotalBytes; // Total bytes indicated from client
DWORD cbAvailable; // Available number of bytes
LPBYTE lpbData; // Pointer to cbAvailable bytes
LPSTR lpszContentType; // Content type of client data
BOOL (WINAPI * GetServerVariable);
BOOL (WINAPI * WriteClient);
BOOL (WINAPI * ReadClient);
BOOL (WINAPI * ServerSupportFunction);
}
可以看出isapi裡面有個WriteClient和ReadClient支援對客戶的讀、寫,其實這就是對於那個通道的讀、寫。只要我們在ISAPI溢位時,shellcode能找到這個ecb引數,就可以讀寫這個通道,實現對抗防火牆,與我們的client的溢位互動的功能了。這點可以考慮溢位時的暫存器以及堆疊裡面的引數等看什麼是ecb引數,實在不行還可以shellcode直接搜尋結構找到我們自己的ecb,這兩種辦法在我的不同程式裡面使用過,效果都不錯。
注意的ISPAI實現上沒有實現ReadClient的功能,可能因為覺得處理一個請求的時候已經不在需要讀客戶端了,但你完全可以透過ecb找到socket,再直接呼叫send功能傳送。再就是很多proxy(閘道器一定不會)實現上也是client------>proxy------>server------>proxy------>client,而不是client 2、CGI介面;熟悉IIS的cgi介面一點的可能就會明白其資料是下面一種形式:
pipe pipe
server------>cgi------>server
看IIS這點處理資料也同樣不是完全互動的,所以我開始處理CGI的溢位的時候也是沒辦法使用的開port,再client連這port的辦法實現。但對於上面那種良好的互動性、對付防火牆等功能,始終心存懷念,所以也一直考慮解決辦法。
這段時間突然想到,雖然這時cgi是在單獨的空間裡面,但會不會繼承了server的socket,仍然還有讀寫那socket的可能呢?於是今天在cgi的shellcode裡面不是直接輸出或者開port等待連線後往裡面寫,而是填加了程式碼往所有socket裡面寫,可喜的是在client裡面成功接收到來自shellcode的資訊。這說明這個通道是通的,讀應該也沒問題。現在需要的就是shellcode裡面怎麼找到這個正確的socket。這點也需要技術去解決,不過應該沒什麼問題。
對於apache等的cgi,相信也有同樣的結果,願望始終應該要美好點嘛。
上面介紹了iis的兩種應用的情況下使用通道對抗防火牆,但看那技術對於別的等的應用應該一樣可以。畢竟這種思路是系統無關的,剩下的就只有技術細節了。是不是也想把你的unix下的shellcode加上對抗防火牆的功能了呢?其實我的溢位程式編寫裡面還有很多東西你可以考慮借鑑的呢,像溢位點定位呢、shellcode定位呢,原始碼編寫shellcode呢,shellcode編碼呀等等。其實很想自己動手寫一個滿意的unix等系統的溢位程式樣本出來,但一個人不能什麼都做呀,也還有很多別的事要做呢。
但我們仔細考慮考慮一下資料傳輸問題,就會發現實際上這一切都沒有想象的那麼困難,其實早已經有東西為我們掃清了道路,那就是資料通道。所以很多問題怕的就是我們沒有去想,沒有去理解一些東西。只要我們訪問到了server,其實對於現在這些應用,中間已經建立了類似下面一樣的一個通道,其實中間可能還更復雜,但對於我們的應用,都會有這麼一個通道。
client 要運用這個通道,只要我們在server上找到了對於這個通道的讀寫就可以了。下面具體針對IIS說一說應用。IIS有兩種介面,IS和CGI,主要考慮這兩種應用的情況下的辦法。
1、ISAPI介面;IIS的server與ISAPI通訊大致是這樣:
ecb
servertypedef struct _EXTENSION_CONTROL_BLOCK
{D cbSize; // Size of this struct.
DWORD dwVersion; // Version info of this spec
HCONN ConnID; // Context number not to be modified!
DWORD dwHttpStatude; // HTTP Status code
CHAR lpszLogData[HSE_LOG_BUFFER_LEN];// null tenated log info specific to this Extension DLL
LPSTR lpszMethod; // REQUEST_METHOD
LPSTR lpszQueryString; // QUERY_STRING
LPSTR lpszPathInfo; // PATH_INFO
LPSTR lpszPathTranslated; // PATH_TRANSLATED
DWORD cbTotalBytes; // Total bytes indicated from client
DWORD cbAvailable; // Available number of bytes
LPBYTE lpbData; // Pointer to cbAvailable bytes
LPSTR lpszContentType; // Content type of client data
BOOL (WINAPI * GetServerVariable);
BOOL (WINAPI * WriteClient);
BOOL (WINAPI * ReadClient);
BOOL (WINAPI * ServerSupportFunction);
}
可以看出isapi裡面有個WriteClient和ReadClient支援對客戶的讀、寫,其實這就是對於那個通道的讀、寫。只要我們在ISAPI溢位時,shellcode能找到這個ecb引數,就可以讀寫這個通道,實現對抗防火牆,與我們的client的溢位互動的功能了。這點可以考慮溢位時的暫存器以及堆疊裡面的引數等看什麼是ecb引數,實在不行還可以shellcode直接搜尋結構找到我們自己的ecb,這兩種辦法在我的不同程式裡面使用過,效果都不錯。
注意的ISPAI實現上沒有實現ReadClient的功能,可能因為覺得處理一個請求的時候已經不在需要讀客戶端了,但你完全可以透過ecb找到socket,再直接呼叫send功能傳送。再就是很多proxy(閘道器一定不會)實現上也是client------>proxy------>server------>proxy------>client,而不是client 2、CGI介面;熟悉IIS的cgi介面一點的可能就會明白其資料是下面一種形式:
pipe pipe
server------>cgi------>server
看IIS這點處理資料也同樣不是完全互動的,所以我開始處理CGI的溢位的時候也是沒辦法使用的開port,再client連這port的辦法實現。但對於上面那種良好的互動性、對付防火牆等功能,始終心存懷念,所以也一直考慮解決辦法。
這段時間突然想到,雖然這時cgi是在單獨的空間裡面,但會不會繼承了server的socket,仍然還有讀寫那socket的可能呢?於是今天在cgi的shellcode裡面不是直接輸出或者開port等待連線後往裡面寫,而是填加了程式碼往所有socket裡面寫,可喜的是在client裡面成功接收到來自shellcode的資訊。這說明這個通道是通的,讀應該也沒問題。現在需要的就是shellcode裡面怎麼找到這個正確的socket。這點也需要技術去解決,不過應該沒什麼問題。
對於apache等的cgi,相信也有同樣的結果,願望始終應該要美好點嘛。
上面介紹了iis的兩種應用的情況下使用通道對抗防火牆,但看那技術對於別的等的應用應該一樣可以。畢竟這種思路是系統無關的,剩下的就只有技術細節了。是不是也想把你的unix下的shellcode加上對抗防火牆的功能了呢?其實我的溢位程式編寫裡面還有很多東西你可以考慮借鑑的呢,像溢位點定位呢、shellcode定位呢,原始碼編寫shellcode呢,shellcode編碼呀等等。其實很想自己動手寫一個滿意的unix等系統的溢位程式樣本出來,但一個人不能什麼都做呀,也還有很多別的事要做呢。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1009226/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SYMANTEC防火牆核心溢位利用之非安全返回法二(轉)防火牆
- 抗DoS、DDoS防火牆產品大檢閱(轉)防火牆
- 對個人防火牆XFilter的感受 (轉)防火牆Filter
- Linux防火牆程式設計(轉)Linux防火牆程式設計
- 全面分析防火牆及防火牆的滲透(轉)防火牆
- 使用netfilter/iptables配置防火牆(轉)Filter防火牆
- 使用iptable實現動態防火牆(轉)防火牆
- 使用IPtables搭建防火牆的規則(轉)防火牆
- 使用IP鏈建立Linux防火牆(轉)Linux防火牆
- 使用iptables建置Linux 防火牆(2)(轉)Linux防火牆
- 使用iptables建置Linux 防火牆(3)(轉)Linux防火牆
- AutoRun病毒防火牆如何使用 AutoRun病毒防火牆教程防火牆
- 選用單防火牆DMZ還是雙防火牆DMZ(轉)防火牆
- 安全教程——使用Windows防火牆十問答(轉)Windows防火牆
- Juniper防火牆簡介(轉)防火牆
- 防火牆介紹(1)(轉)防火牆
- 防火牆介紹(2)(轉)防火牆
- 動態 iptables 防火牆(轉)防火牆
- NAT iptables防火牆(script)(轉)防火牆
- 防火牆埠(下)(轉載)防火牆
- 防火牆埠(中)(轉載)防火牆
- 防火牆埠(上)(轉載)防火牆
- 八種防火牆產品評測(企業級防火牆)(轉)防火牆
- 使用隨身碟的小型ADSL防火牆(轉)防火牆
- Linux 防火牆配置使用Linux防火牆
- WAb防火牆與傳統防火牆防火牆
- FreeBSD防火牆技術(轉)防火牆
- 深入淺出談防火牆(轉)防火牆
- 動態iptables防火牆dynfw(轉)防火牆
- 輕輕鬆鬆穿透防火牆(轉)穿透防火牆
- Iptables防火牆規則使用梳理防火牆
- 開源的firewall(防火牆) SINUS (轉)防火牆
- 淺析Windows防火牆的缺陷(轉)Windows防火牆
- 用FWTK配置Linux防火牆(轉)Linux防火牆
- 用IPFW實現BSD防火牆(轉)防火牆
- Docker 埠對映防火牆規則配置Docker防火牆
- WindowsXP作業系統防火牆經典使用指南(轉)Windows作業系統防火牆
- 防火牆(firewall)防火牆