25.PHP大法
分析:
PHP函数:
eregi()函数 —— 不区分大小写的检查一个字符串里是否包含另外一个字符串;可以使用%00截断绕过,匹配数组的话会返回NULL(与本题无关),跟ereg()功能类似;
<?php
if(eregi("hackerDJ",$_GET[id])) {
echo("<p>not allowed!</p>");
exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
echo "<p>Access granted!</p>";
echo "<p>flag: *****************} </p>";
}
?>
<br><br>
Can you authenticate to this website?
分析代码:
1.输入的字符串必须不能有“hackerDJ”,大小写都不可以
2.将传入的字符串进行url解密
3.如果字符串等于hackerDJ,则输出flag
所以根据eregi("hackerDJ",$_GET[id]) $_GET[id] = urldecode($_GET[id]);我们只要对hackerDJ,进行url编码一次,就可以绕过eregi()函数,也满足了$_GET[id] == "hackerDJ"条件,但是最重要的一点是浏览器url在传递参数的时候会进行一次decode,所以这里我们要进行两次url编码才可以,
为了简单,也可以把开头的h编码两次就可以。
hackerDJ->%68ackerDJ->%2568ackerDJ
(当然你把68也encode,最后变成 %25%36%38ackerDJ 也是可以的。当然你也可以把所有的字符都进行两次encode,只要你不嫌麻烦)
构造url: index.php?id=%2568ackerDJ
传入参数id,得到flag
flag: DUTCTF{PHP_is_the_best_program_language}