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

没想到还是解出来了

昨晚看见群里有人聊一个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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇