代码审计_urldecode二次编码绕过
题目链接:https://ctf.bugku.com/challenges
题解:
打开题目
得到一段PHP代码
代码中的相关知识点链接: eregi函数:http://www.kuqin.com/php5_doc/function.eregi.html urldecode:是一种URL编码函数
根据代码的意思,首先看没有经过urldecode编码的字符串 $_GET[id] 是否匹配字符串 hackerDJ ,从代码意思看,想要得到flag不应该匹配,但是经过urldecode编码后应匹配字符串 hackerDJ ;因此利用了两次urldecode第一次是浏览器的解码、第二次是函数的解码,所以我利用字符串 hackerDJ 中随便一个字母进行两重编码即可。
例如:选择最后一个字母“J”,进行双重编码
第一次:字母“J”对应的URL编码为:%4A 【其对照表链接为:https://pan.baidu.com/s/1diPXvMA-f3rGAZSdzYHGPg】
第二次:再经过urldecode编码【urldecode在线编码链接:http://www.convertstring.com/zh_CN/EncodeDecode/UrlEncode】
即最后得到:字符“J” 经过二次编码得到 %254A ;因此构造 payload 为:
?id=hackerD%254A
提交得到flag
同样的道理,选取其他字符也是一样的效果,就不再这里一一举例了。
即flag为:flag{bugku__daimasj-1t2}