BUUCTF [极客大挑战 2019] BuyFlag
启动靶机,打开环境:
首页是安全小组的简介,在右上角Menu选择PAYFLAG
进入后看到获取flag的条件:
查看网页源码得到提示:
~~~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
使用BurpSuite抓取数据包,查看到Cookie
值中有user=0
:
修改Cookie中的user=1
:
提示已经为Cuiter
,但需要输入密码,根据之前代码提示,使用%00
截断is_numeric()
函数的判断,所以通过POST
方式传入password=404%00
:
传参时注意修改传参方式为:POST
,并且添加POST头信息:Content-Type: application/x-www-form-urlencoded
,得到回显:
需要输入金额,推断其需要传入参数money
的值:
当传入所需的money
值时,系统提示数字过长,注意到Response中PHP版本:
推断其不能输入8
位字符,可能为strcmp()
函数判断,所以采用数组绕过,构造如下POST
传参:password=404%00&money[]=1
:
发送数据包后得到flag: