SignIn
源码:
|
|
先看一下整体,ip类存在一个变量赋值和数据库插入;flag类能够读取flag,但是需要check值
。真実はいつもひとつ,check
需要SQL注入得到,注入类型:insert注入,而实现注入需要我们插入构造的SQL语句,看向ip类的变量赋值过程:
$this->ip = $this->waf($_SERVER['HTTP_X_FORWARDED_FOR']);
ip的值取自于$_SERVER['HTTP_X_FORWARDED_FOR']
,可以通过在请求头添加X-Forwarded-For
实现变量覆盖插入SQL语句。
接下来看如何访问ip类
并执行__toString
。__toString
的触发条件是类当成字符串使用,flag类中满足条件的共有两处:md5函数和stristr函数。这时结合数据库操作来分析,mysqli_query
函数完成insert插入的过程被作为条件判断,不会有任何有关数据库内容的输出,直接爆这条路行不通。只能尝试盲注了,恰好stristr函数的两个回显内容搭配if语句可以帮助判断,分析到此为止。
先初步构造序列化字符串触发__toString
:
O:4:"flag":2:{s:2:"ip";O:2:"ip":1:{s:2:"ip";N;}s:5:"check";N;}
然后请求头中添加X-Forwarded-For
字段,fuzz发现过滤sleep、benchmark、like,构造SQL语句实现insert注入。
exp:
|
|
Filters
一个web题为什么放在misc,还是说难度不够上web。。。(果然还是我太菜了吗)
开局源码:
|
|
先研究研究。。。