【原创】记一次ctf实战—— 2017-赛客夏令营-Web-Injection V2.0

admin 2023年1月8日02:36:19评论19 views字数 969阅读3分13秒阅读模式

[huayang]

【原创】记一次ctf实战—— 2017-赛客夏令营-Web-Injection V2.0

没想到还是解出来了

昨晚看见群里有人聊一个sql注入的题

瞟了一眼心想就这啊sqlmap专治不服

什么?有过滤,百度了一下sqlmap的过滤

就这,,

第二天 55555~

哭jj,做不来啊,完全不会呀

最后还是在师傅的帮助下搞定

【原创】记一次ctf实战—— 2017-赛客夏令营-Web-Injection V2.0

Flag

看图

【原创】记一次ctf实战—— 2017-赛客夏令营-Web-Injection V2.0

为什么师傅已经讲得很清楚了

思路

最开始我先用万能的or去试

' or 1=1#
【原创】记一次ctf实战—— 2017-赛客夏令营-Web-Injection V2.0

返回一个hack我就知道被过滤了

想这种有回显的如果没有被过滤一定会提示yes or no

写上注释符

'/**/or/**/1=1#
【原创】记一次ctf实战—— 2017-赛客夏令营-Web-Injection V2.0

果然返回用户名密码错误

咦???我知道要返回但不应该是可以得到flag了吗

看了源码才知道这tm的竟然没用and连接!!!

来看看有and连接的句子

$sql="select * from users where username='$name' and password='$pwd'";

如果是这样我们吧后面的pass一注释就可以直接拿到flag

好吧我们来看看这题的源码

【原创】记一次ctf实战—— 2017-赛客夏令营-Web-Injection V2.0

这个难度应该在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() 函数从结果集中取得一行作为关联数组

我们再来看看下列代码

【原创】记一次ctf实战—— 2017-赛客夏令营-Web-Injection V2.0

意思好像是查询有无password再与pass比较

我们来说说pass的验证逻辑

1.首先执行mysql语句(’会返回一张空表,后面select 1#则会返回1)

2.返回一个数也就是语句中的列

3.反回的数被下面的第二个if所截取与pass判断

至于绕过的name可以参照’/**/or/**/1=1#进行理解。

这下因该知道了为什么师傅说得最后构造密码了

不说了,多做题,脑洞大一点别整天想着sqlmap一梭

这个就算用sqlmap不加自己写的脚本也得不到flag

[/huayang]

FROM:浅浅淡淡[hellohy]

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月8日02:36:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【原创】记一次ctf实战—— 2017-赛客夏令营-Web-Injection V2.0http://cn-sec.com/archives/1443389.html

发表评论

匿名网友 填写信息