拿到题目可以获取到几条关键提示
如果你想要买flag你必须是CUIT的学生
你必须回答正确的密码
查看源码也发现有php源码提示信息
要求通过POST方式传参,并利用isset检测是否有password字段
is_numeric是检测password字段是否为数字或者数字字符串,如果为数字则回显密码错误
如果password等于404则回显密码正确
这里看着有些矛盾,这里可以引入PHP弱类型比较相关的知识
在PHP中当字符串与数字相比较时,字符串会先被转化为数字
比如说第一次a转化为数字失败,也就是FALSE,然后0也表示false,所以这里返回的是true
但是如果字符串是以数字开头的,那么就会转成这个数字再做比较,所以第二个也是true,第三个则是因为转成数字后变成了12,不等于1,则为false。
var_dump('a' == 0);//bool(true)
var_dump('1a' == 1);//bool(true)
var_dump('12a' == 1);//bool(false)
所以我们只需要构造pssword为404+任意字符就可以绕过is_num函数的检测
抓包之后发现cookie user字段,更改为1试试,然后我们可以看到这里是GET请求方式,但是要求的是以POST请求
可以看到在更改请求方式和更改cooke值后发包就会发现提示信息已经将我们视为CUIT的学生,下一步就是构造password
构造完password后,可以发现提示要钱,经过查看wp得知金钱的参数是money
而且需要的还不少
又提示我,字段太长了,通过查看wp得知可以使用科学计数法
成功获取flag