题目
首先了解下eregi()函数
eregi()函数
语法
int eregi(string pattern, string string, [array regs]);
定义
eregi()函数在一个字符串搜索指定的模式的字符串。搜索不区分大小写。
返回值
如果匹配成功返回true,否则,则返回false
由题目容易知道该代码是对GET的id值二次编码
第一次是浏览器默认对传入参数进行一次解密,
由代码
$_GET[id] = urldecode($_GET[id]);
可知,又进行了一次解码,
所以我们必须将id值进行二次编码后,
才能符合最后的if条件
if($_GET[id] == "hackerDJ")
我利用了字母h的编码%68和符号%的的编码%25,对其绕过:
构造id=%2568ackerDJ,
分析:
第一次浏览器先解码,将%25解码为%,变为id=%68ackerDJ;
第二次urldecode()函数解码,将%68解码为h,最后变为id=hackerDJ;
从而最后满足if条件,输出flag。
得到
flag{bugku__daimasj-1t2}