SQL注入的其他姿势
判断是否存在注入
1.加单引号
数据库出现报错信息
2.添加“and 1=1” 和“and 1=2”
1=1返回正常信息
1=2返回不正常结果//即存在注入漏洞
3.时间延迟
benchmark函数可以将一条表达式执行多次,通常用于评价mysql执行的速度
即存盲注漏洞
判断数据库种类
1.直接使用select查询
2.报错查询
略
其他姿势
除了正规注入以外,还有一些其他姿势
mysql注释符:
1.#
2.–(空格)
3./**/
对于第三种注释符,我们不仅可以用来绕过空格如:
还可以执行命令
在注释开头部分添加一个感叹号并在上面跟上数据库版本编号,那么该注释将被解析成代码,只要安装的版本高于或者等于注释中包含的版本,代码就会被执行。
mysql显错注入
(1) Updatexml函数
?id=1+and%20updatexml(1,concat(0x7e,(SELECT%[email protected]@version),0x7e),1)
(2) Floor函数
?id=1+and(select 1 from(select count(*),concat((select (select (select concat(0x7e,version(),0x7e))) from information_schema.tableslimit 0,1),floor(rand(0)*2))x from information_schema.tablesgroup by x)a)
(3) extractvalue
?id=1+and extractvalue(1, concat(0x7e, (select @@version),0x7e))
宽字节注入
题目地址:sql宽字节注入
字节注入也是在最近的项目中发现的问题,大家都知道%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MYSQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗’,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。比如:
id后跟’并没有显示报错信息。
但加入了%df组成了一个汉字后就出现报错页面了
我们继续构造payload
已经查询出用户和数据库来了。
现在继续构造:
这个题的答案就出来了。
过滤注入
题目地址:过滤注入
试了一下and,被过滤掉了
这时我们可以使用%00截断
我们就可以进一步构造payload:
这样就可以进一步构造payload
无回显页面利用延时注入
题目网址:基于时间盲注
sleep()函数,使返回结果延时后显示
如果在一个完全没有返回结果的页面,即找不到回显的情况下,可利用延时注入
查询当前用户:
使用substring()函数截断
得到ascii码
这时我们就可以利用sleep函数:
select if(ascii(substring((select user()), 1, 1))=114,sleep(5), 2);
如果正确的话,延时五秒
那么就可以通过这种方法编写python脚本进行注入了