[huayang]
没想到还是解出来了
昨晚看见群里有人聊一个sql注入的题
瞟了一眼心想就这啊sqlmap专治不服
什么?有过滤,百度了一下sqlmap的过滤
就这,,
第二天 55555~
哭jj,做不来啊,完全不会呀
最后还是在师傅的帮助下搞定
Flag
看图
为什么师傅已经讲得很清楚了
思路
最开始我先用万能的or去试
' or 1=1#
返回一个hack我就知道被过滤了
想这种有回显的如果没有被过滤一定会提示yes or no
写上注释符
'/**/or/**/1=1#
果然返回用户名密码错误
咦???我知道要返回但不应该是可以得到flag了吗
看了源码才知道这tm的竟然没用and连接!!!
来看看有and连接的句子
$sql="select * from users where username='$name' and password='$pwd'";
如果是这样我们吧后面的pass一注释就可以直接拿到flag
好吧我们来看看这题的源码
这个难度应该在3颗星以上吧
我们带到语句中去再详细说一下
select password from member where username=’ union select 1 #
后面不写注释符会报错
从上面得知()也被过滤了所以我们千万别想着爆库爆表爆字段
通过’直接闭合前面的select语句,使其前半句查询结果空(除非存在name=”的情况),即数据库中不存在该查询数据
后面的union select 1#就很神奇,平常我们看见的都是union select 1,2#
这个的主要的用法是探知并且使其返回列,有种和oder by的感觉
mysql_query()意思是执行这段sql语句
mysql_fetch_array() 函数从结果集中取得一行作为关联数组
我们再来看看下列代码
意思好像是查询有无password再与pass比较
我们来说说pass的验证逻辑
1.首先执行mysql语句(’会返回一张空表,后面select 1#则会返回1)
2.返回一个数也就是语句中的列
3.反回的数被下面的第二个if所截取与pass判断
至于绕过的name可以参照’/**/or/**/1=1#进行理解。
这下因该知道了为什么师傅说得最后构造密码了
不说了,多做题,脑洞大一点别整天想着sqlmap一梭
这个就算用sqlmap不加自己写的脚本也得不到flag
[/huayang]
FROM:浅浅淡淡[hellohy]
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论