今天有点时间就多写几篇解题思路吧,
希望能够帮助到那些需要帮助的人,
所有的wp都是以一题一篇的形式写出
主要是为了能够让读者更好的阅读以及查找,
希望你们不要责怪!!共勉!!!
这一题做的时间比较久,但是收获颇多!!!!
永远爱你们的————新宝宝
PHP大法分值:20
- 来源: DUTCTF
- 难度:中
- 参与人数:10372人
- Get Flag:4086人
- 答题人数:4256人
- 解题通过率:96%
解题链接: http://ctf5.shiyanbar.com/DUTCTF/index.php
解题思路:看见这一题首先是没有思路,仔细查看,就会发现很多有意思的事情
首先:你会发现有点不一样呀:
然后按照提示进行更改得到:
发现并没有得到有用的信息:之后就是需要对于源代码进行分析:
我们重新审视下那段php代码,看到一段
要传入一个url编码的参数,这时候我们可以用到一个工具,
小葵转码工具,我们可以进行url转码!!!
我们把这段代码输入试试看~~~
还是不允许访问,仔细看PHP就会发现,这个是浏览器的一个漏洞,浏览器会自动把url编码进行一次转义,
所以我们应该把当前url编码再进行编码一次!
然后再进行一次转码:
输入到(这一个需要看仔细一点呀)上面那个地方是输入二次转码得到的字符串!!!
其实还有一种做法:
首先eregi()函数进行一次比较判断,如果想打印flag,id不能等于"hackerDJ" ,并且经过url解码后id等于"hackerDJ"
但这里需要注意的是:在浏览器中提交时浏览器会为我们进行一次解码
可以在本地执行下面的代码:
<?php
$id = '%68ackerDJ';
if(eregi("hackerDJ",$id)) {
echo("<p>not allowed!</p>");
exit();
}
$id = urldecode($id);
if($id == "hackerDJ")
{
echo "<p>Access granted!</p>";
echo "<p>flag: *****************} </p>";
}
?>
可以看到成功打印,说明浏览器的确为我们转换了一次
因此我们需要进行两次编码: h --> %68 --> %2568
第一次得到:
第二次得到:
构造url: index.php?id=%2568ackerDJ最后答案:
flag: DUTCTF{PHP_is_the_best_program_language}