Buyflag

拿到题目可以获取到几条关键提示

  • 如果你想要买flag你必须是CUIT的学生

  • 你必须回答正确的密码

Buyflag_第1张图片

查看源码也发现有php源码提示信息

要求通过POST方式传参,并利用isset检测是否有password字段
is_numeric是检测password字段是否为数字或者数字字符串,如果为数字则回显密码错误
如果password等于404则回显密码正确
Buyflag_第2张图片

这里看着有些矛盾,这里可以引入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请求

Buyflag_第3张图片

可以看到在更改请求方式和更改cooke值后发包就会发现提示信息已经将我们视为CUIT的学生,下一步就是构造password

Buyflag_第4张图片

构造完password后,可以发现提示要钱,经过查看wp得知金钱的参数是money

Buyflag_第5张图片

而且需要的还不少

Buyflag_第6张图片

又提示我,字段太长了,通过查看wp得知可以使用科学计数法

Buyflag_第7张图片

成功获取flag

Buyflag_第8张图片

你可能感兴趣的:(mysql,数据库)