代码审计_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}

posted @ 2019-02-15 19:32  gzu_zb  阅读(2165)  评论(0编辑  收藏  举报