打开pay.php界面F12可以看见源代码
php
<!--
~~~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>";
}
}
-->
然后用POST提交password=404asfdf&money=100000000
![](https://i-blog.csdnimg.cn/direct/09b6e6cdb84748c19e4d2f59df370461.png)
半天没动静,后来看网上才知道应该抓包修改Cookie的值,不然就不能认证为CUIT,这个在ATTENTION的第二行也有体现(所以总计是有三个条件)
这里将user的值从0改为1(0代表着false)
为了让password绕过数字验证,以下几种写法都可以:
404asdf(随便写) 404%20 404%00
![](https://i-blog.csdnimg.cn/direct/41e74c19955b41f488915b2ac8a0c2d6.png)
然后就显示money的值太长了,有两种方法可以修改:
1.科学计数法
将money的值写为1e9 (注意这里要大于题目给的1e8)
但是为什么1e8不行呢?(明明可以转化啊)
![](https://i-blog.csdnimg.cn/direct/dbfb2218dc1c472c97adda4adb6fa047.png)
2.数组绕过
因为提示的是字符串太长了,所以网上猜测可能采用strcmp()进行比大小,所以这里可以用数组绕过
strcmp():它会按照字节顺序对两个字符串进行比较,区分大小写。该函数常用于需要精确比较字符串内容的场景,比如验证用户输入的密码是否正确等
- 返回值 :
- 如果
$str1
小于$str2
,返回一个小于 0 的整数。 - 如果
$str1
大于$str2
,返回一个大于 0 的整数。 - 如果
$str1
等于$str2
,返回 0。
- 如果
![](https://i-blog.csdnimg.cn/direct/c8803131a22644ecaa566185545e5a26.png)
将money写为money[]=0(随便一个数),strcmp()在遇见数组和数比大小的时候会直接返回0,也就是这个数和数组相等
拿到flag
![](https://i-blog.csdnimg.cn/direct/9aef7358c13243f1b515d62e475d1805.png)