GCCISC的三个WP
-------白茶、李泽邦
1.矛盾的要求呢
观察描述:robots php,思考可能和robots协议有关
进入网页看到如下:
这段文字分成两部分,上半部分就是robots.txt之后的结果,我们可以尝试进入get_flag.php的页面,发现 Let's get the flag
这句话。结合一开始看到的代码界面,就可以得出下半部分的php代码就是get_flag.php的代码。即我们需要通过GET方法传递a,b两个参数。
看到对于a参数的条件就是$a==0
就行了,关键问题在于$b的判断条件【具体函数用法百度】。我们既要使b这个参数不是纯数字,又要让它大于6666,所以这就引出了PHP中的比较运算符的陷阱
这里贴一个官方手册:https://www.php.net/manual/zh/language.operators.comparison.php,可以查询到字符串和数值比较的时候具体怎么转换的,然后我们根据条件构造出playload:b=20030107Breeze
就可以
具体playload:
得到flag:gccisc{asfasigbiodwsgh}
2.2048
这题简单,直接干就完事
麻了,中道崩殂。
所以肝帝最后不打算干了,鼠标光标放在数字0处,右键然后选择“检查”,就可以发现HTML代码,修改得分:
改就完事了:
然后我们再移动一下方向键,就会弹出一个框:
一眼就得出是base64编码,借用工具解码就可以得出:gccisc{baiusgasfasfasfbhouais}
3.绕过
进去又是直接代码,题目提示的很明显了:代码审计,说人话就是_看代码_。
一些重要的点在图中已经标注出来了。
我们先看到下面的if判断,可以知道我们必须要noother_says_correct($_GET['key'])
这个值为true,才可以echo $flag
,所以我们就是要从函数入手。
看到函数中有两个返回的地方,而满足返回true的地方只有return $number == '54975581388';
这就是告诉我们$number在最后的时候只能等于54975581388,而不能是其他的任何东西。
但是我们再回到return语句的上面,发现在函数中的一个if条件判断卡死了我们,最后我们得出了整个题目的关键就在于这个判断。只要我们能够通过各种奇淫技巧来绕过这个判断,就可以完美的得出flag了!!!!
总结一下:我们需要通过GET方法传递一个key参数,且参数必须得通过一定的变形,最后让它进入代码的return那行的时候为54975581388。
那么方法在哪里呢,有什么东西可以帮助我们这样子呢。
那就是进制转换。
在php中,在转码时会把16进制转化为十进制.
所以我们只需要将54975581388
这串数字改成16进制,并且在前面加上0x,最后的playload就是:0xccccccccc
将它输入到框里面就可以爆出flag:gccisc{asfjga8gag8ga9r}
0 条评论