一、题目要求如果要获取flag,需要进行购买。打开靶场环境,点击右上角的MENU发现其中有PAYFLAG选项:
当点击PAYFLAG是会出现一个新的页面,页面中告诉的信息是获取flag时需要:
1.支付100000000的money。
2.用student的身份进行登录
3.输入正确的密码
二、查看当前页面的源文件可发现:
~~~post money and password~~~
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (is_numeric($password)) {
echo "password can't be number</br>";
}elseif ($password == 404) {
echo "Password Right!</br>";
}
}
money和password必须要以POST方式进行提交并且对password进行的验证检测。
is_numeric()函数:返回一个bool值,当变量时数字或者时数字字符时函数返回值位true
使用POST提交password=404然后用burp抓包可以查看到数据包中有"Cooke:user=0"的字段,因为提示为:必须要以student的身份登录。
将数据包发送到Repeater模块中去,将user的值改为“user=1”尝试一下:
请求成功,并且是以student的身份请求成功的,但是password错误并告诉我们不能为数字。
将password的值改为password=404s提交数据时,发现密码是正确的。到目前为止已经实现了前两个验证机制。当添加金额时money=100000000提交时,告诉的是数字太长了,减少金额时又提示金额不够。
此时就应该考虑使用数组绕过检测机制的方式进行提交(password=404s&money[]=100000000):
最后就顺利的拿到了flag.
flag{0c08eba1-ab0e-4798-98fd-f9026ab0dfd6}.