buuctf-[极客大挑战 2019]BuyFlag(小宇特详解)
这里打开之后是一个网站没有注入点,这里抓包看一下有哪些目录
这里会发现一个pay.php文件访问一下
这里说flag需要100000000money
查看一下源码
<!--
~~~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,然后用is_numeric来判断是否是数字,这里要求password不能是数字,但是当password是404的时候password正确。
这里由于password404使用的是是一种弱比较,在404后面加上东西比如404XX==404,404XX会自动变成int型。
这里考虑如何绕过数字验证
这里绕过is_numeric的检测方法有两种
1.对于%00无论是%00放在前后都可以判断为非数值.
2.%20空格字符只能放在数值后面。
也可以用
?what=1'
?what=1,
?what=1%00
这里直接抓包,放到重放器中。
修改GET为POST,这里的cookie是user=0,这里要改为1,因为0一般是FALSE的意思。然后在body中写
password=404%20&money=100000000
然后会提醒你长度太长
这里一种方法是利用科学计数法
1.money=1e8
第二种办法就是使用strcmp函数特性
2.money[]=100000000