极客大挑战2019_BuyFlag
[极客大挑战 2019]BuyFlag
0x00 过程
进到页面发现右上角一个菜单,发现二级页面buyflag,直奔主题。
根据提示发现买flag需要两个条件,一个是用户必须是CUIT,然后密码输对,最后要有足够的钱。这里只需要把cookie里的user=0
改成user=1
即可绕过用户限制。
查看源码发现密码提交的php代码:
1 |
|
发现用到了is_numeric
,这里判断password是否为数字,如果为数字则返回密码不能是数字,如果不是数字则会判断是否等于404,相等才会告知密码正确。
这就出现了矛盾点,首先不能是数字,而且密码还必须是404。不过我们可以通过在参数值前后加非数字值进行绕过,例如is_numeric(404%00)
,则会判断为字符串而不是数字。而双等号在php是弱比较,即404abcd==404
为真。就可以绕过限制了。
但是我们还需要提交金钱,后面再加一个&money=100000000
,发现做了限制:
还能通过常用绕过strcmp方法:money[]=1,这是因为strcmp比较的是字符串类型,如果强行传入其他类型参数,会出错,出错后返回值0,即在面对数组类型时会报错返回0来达到漏洞绕过。
这里也可以使用科学计数法,money=1e16
来绕过。
极客大挑战2019_BuyFlag
https://k1nm0.com/2022/10/23/BuyYourFlag/