SQL注入绕过safedog姿势及原理

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

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

一、绕过union select联合注入防御

当我们面对安全狗的防护,想要对目标站点进行SQL注入的渗透测试时,会发现安全狗会拦截带有union select的字段,直接使用SQL传统的union联合注入,URL构造如下:

http://192.168.136.7/sqli/Less-2/?id=-1 union select 1,2,3

则会遭到安全狗的拦截,如下所示:
在这里插入图片描述
经过多次尝试,使用如下的payload可以绕过安全狗的防御

http://192.168.136.7/sqli/Less-2/?id=-1 union--+tctctc%0A select 1,2,3

上述url访问后页面如下所示:
在这里插入图片描述
为什么上述payload能够绕过安全狗的防御呢,让我们来仔细看一下上述payload中关键的部分:
在union和select关键字中间,添加了如下内容:

union--+tctctc%0A select

要理解上述payload,主要是理解为什么上述SQL语句能够成功执行,以及安全狗将上述SQL语句判定为什么。
在上述payload中,–是注释符,在安全狗认为,–后面的所有内容均为注释,因此没有出现union和select的联合注入威胁,因此被绕过。
而对于数据库而言,尽管–后面的内容被认为是注释,但是需要注意的是%0A在URL编码中是换行符的意思,即%0A后面的内容被换行,因此–注释的仅仅是tctctc这些我们故意构造的绕过安全狗的数据,因此上述SQL语句可以被数据库正常执行!

二、绕过database数据库名查询的防御

安全狗还会对查询database数据库的SQL语句进行防御,例如,如果我们访问如下的URL:

http://192.168.136.7/sqli/Less-2/?id=-1 union--+tctctc%0A select 1,2,database()

那么会被安全狗所拦截,结果如下所示:
在这里插入图片描述
上述payload被拦截的原因,就是出现了database()关键字,那么我们如何绕过该关键字呢?
我们可以利用MySQL数据库特性来绕过该限制,构造payload如下所示:

http://192.168.136.7/sqli/Less-2/?id=-1 union--+tctctc%0A select 1,2,database/**/()

该pyaload与之前的payload不同之处在于,在database和括号之间插入了/**/,这在MySQL数据库中可以正常执行,但是在安全狗中认为分割了database(),因此被绕过,该payload执行结果如下所示:
在这里插入图片描述
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

猜你喜欢

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