BUU sql注入-[强网杯 2019]随便注
Posted 1vyyyyyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUU sql注入-[强网杯 2019]随便注相关的知识,希望对你有一定的参考价值。
一、题目
一进来先看看能否用构造单引号闭合:
发现提示报错,可以操作了
二、解题
方法一:handler命令打开
先查列数,这里是输入2没报错,但输入3报错了,所以是2列
试试联合查询:
回显信息是
return preg_match("/select|update|delete|drop|insert|where|\\./i",$inject);
$inject是我们在输入框中提交的变量名,preg_match()在这里的作用是检测关键字,猜测会被过滤掉,其中联合查询要用的select,where都不行,换个思路
这个时候想到堆叠注入
sql命令中,我们通常用 ; 来表示一句命令的结束,那么在多个命令语句中间插入 ; ,这些命令就可以一起执行,而联合查询中无论是union 还是union all ,能执行的语句类型都是有限的
直接查表
1';show tables;#
这一长串数字非常可疑,把里面的列show出来看看
果然有flag
现在我们只需要打开这个flag
在mysql中有一种命令叫 handler
通过HANDLER tbl_name OPEN打开一张表,无返回结果,实际上我们在这里声明了一个名为tb1_name的句柄。
通过HANDLER tbl_name READ FIRST获取句柄的第一行,通过READ NEXT依次获取其它行。最后一行执行之后再执行NEXT会返回一个空的结果。
handler命令与select命令区别在于,前者一次只返回一行,而后者会返回所有相关结果
那么在这里直接构造payload
1';handler `1919810931114514` open;handler `1919810931114514` read first;#
直接爆出flag
方法二:用alert和rename命令改名后查询
rename 用于修改 table 的名称
alter 用于修改表中字段的属性
1. 将已有的表words改名为words1
2. 表1919810931114514改名为words
3. 将新的表words中的列flag改为id
构造payload
1';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;show columns from words;#
最后用1’ or 1=1 #查询就得到flag
三、总结
1. 注入语句中的关键字被形如preg_match()、mb_substr()、mb_subpos()等函数检测过滤后需要考虑其他方法,如堆叠注入,布尔盲注,时间盲注等
2. 注入大致步骤:检测能否注入->检测注入类型->order by查列数->show databases查库->show tables查表->show columns from TABLE_NAME查字段->select或handler开文件
3. 多看大佬的文章!!!
以上是关于BUU sql注入-[强网杯 2019]随便注的主要内容,如果未能解决你的问题,请参考以下文章