本文共 789 字,大约阅读时间需要 2 分钟。
启动靶机,打开环境:
首页是安全小组的简介,在右上角Menu选择PAYFLAG
进入后看到获取flag的条件: 查看网页源码得到提示: ~~~post money and password~~~if (isset($_POST['password'])) { $password = $_POST['password']; if (is_numeric($password)) { echo "password can't be number"; }elseif ($password == 404) { echo "Password Right!"; }}
分析代码:
需要通过POST
方式传入变量password
的值,且is_numeric()
函数限制了变量$password
不能为数值型,但又需要变量$password
等于404
使用BurpSuite抓取数据包,查看到Cookie
值中有user=0
:
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: 转载地址:http://ecraf.baihongyu.com/