SQL注入的其他姿势

判断是否存在注入

1.加单引号
数据库出现报错信息
2.添加“and 1=1” 和“and 1=2”
1=1返回正常信息
1=2返回不正常结果//即存在注入漏洞
3.时间延迟
benchmark函数可以将一条表达式执行多次,通常用于评价mysql执行的速度
SQL注入的其他姿势
即存盲注漏洞

判断数据库种类

1.直接使用select查询
SQL注入的其他姿势
2.报错查询

其他姿势

除了正规注入以外,还有一些其他姿势
mysql注释符:
1.#
2.–(空格)
3./**/
对于第三种注释符,我们不仅可以用来绕过空格如:
SQL注入的其他姿势
还可以执行命令
SQL注入的其他姿势
在注释开头部分添加一个感叹号并在上面跟上数据库版本编号,那么该注释将被解析成代码,只要安装的版本高于或者等于注释中包含的版本,代码就会被执行。

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组成了一个汉字后就出现报错页面了
SQL注入的其他姿势
我们继续构造payload
SQL注入的其他姿势
已经查询出用户和数据库来了。
现在继续构造:
SQL注入的其他姿势
这个题的答案就出来了。

过滤注入

题目地址:过滤注入
SQL注入的其他姿势
试了一下and,被过滤掉了
这时我们可以使用%00截断
SQL注入的其他姿势
我们就可以进一步构造payload:
SQL注入的其他姿势
这样就可以进一步构造payload

无回显页面利用延时注入

题目网址:基于时间盲注
sleep()函数,使返回结果延时后显示
SQL注入的其他姿势
如果在一个完全没有返回结果的页面,即找不到回显的情况下,可利用延时注入
查询当前用户:
SQL注入的其他姿势
使用substring()函数截断
SQL注入的其他姿势
得到ascii码
SQL注入的其他姿势
这时我们就可以利用sleep函数:
select if(ascii(substring((select user()), 1, 1))=114,sleep(5), 2);
如果正确的话,延时五秒
SQL注入的其他姿势
那么就可以通过这种方法编写python脚本进行注入了