Bypass D盾 sqserver注入绕过

admin 2024年2月21日23:46:36评论21 views字数 3628阅读12分5秒阅读模式
#正常流量
GET /index.php HTTP/1.1
Host: bypass.com
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible;MSIE 9.0; windows NT 6.1; win64; x64;Trident/5.0)
Connection: close

#经过waf进行流量转发,将客户端IP标记到当前流量中,向后转发
GET /index.php HTTP/1.1
Host: bypass.com
Accept-Encoding: gzip, deflate
Accept: */*
X-forwared-for: 1.1.1.1
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible;MSIE 9.0; windows NT 6.1; win64; x64;Trident/5.0)
Connection: close
#非正常流量,主动伪造转发记录
GET /index.php HTTP/1.1
Host: bypass.com
Accept-Encoding: gzip, deflate
Accept: */*
X-forwared-for: 4.4.4.4
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible;MSIE 9.0; windows NT 6.1; win64; x64;Trident/5.0)
Connection: close

#经过waf流量转发,将客户端IP写到转发字段末尾,那么检测ip时,如果不进行流量转发清洗,那么就会得到假的IP
GET /index.php HTTP/1.1
Host: bypass.com
Accept-Encoding: gzip, deflate
Accept: */*
X-forwared-for: 4.4.4.4,3.3.3.3
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible;MSIE 9.0; windows NT 6.1; win64; x64;Trident/5.0)
Connection: close

WAF的几种部署模式

基于DNS解析的云WAF

修改DNS,让域名解析到反向代理服务器。所有流量经过反向代理进行检测,检测无问题之后再转发给后端的Web服务器。

Bypass D盾 sqserver注入绕过

串联模式

  • 反向代理模式

WAF作为反向代理服务器向后端服务器转发收到的HTTP请求,在转发的同时会对经过的HTTP请求做攻击检测。

但该模式会改变现有网络结构,用户真实IP会以HTTP Header传递给后端web服务器,需要提前配置好域名与目的服务器的转发规则,在站点和后端Web服务器较多的情况下,转发规则等配置较复杂。

Bypass D盾 sqserver注入绕过

  • 透明代理模式

WAF将客户端与web服务器之间TCP连接监控下来。在用户无感知的情况下代理了WEB客户端和服务器之间的会话,并基于桥模式进行转发。从WEB客户端的角度看,WEB客户端仍然是直接访问服务器。

从WAF工作转发原理看和透明网桥转发一样,因而称之为透明代理模式。该方式的特点是:对网络的改动最小,可以实现零配置部署。

Bypass D盾 sqserver注入绕过

旁路模式

利用交换机的端口镜像功能,将业务流量转发一份给WAF,WAF只对业务流量进行监控和报警,不进行拦截阻断。对于WAF而言,流量只进不出。

该模式的特点是:在WAF出故障的情况下,不影响业务连续性。但是需要联动其他设备(如出口防火墙)来下发阻断策略。

Bypass D盾 sqserver注入绕过

软件嵌入中间件+检测引擎模式

利用交换机的端口镜像功能,将业务流量转发一份给WAF,WAF只对业务流量进行监控和报警,不进行拦截阻断。对于WAF而言,流量只进不出。

该模式的特点是:在WAF出故障的情况下,不影响业务连续性。但是需要联动其他设备(如出口防火墙)来下发阻断策略。

在使用 Nginx 作为反向代理的业务下,WAF 提供 Nginx 模块嵌入原有 Nginx,将请求转发给检测引擎,可以做到在不改动原有网络拓扑的情况下完成检测任务;

Bypass D盾 sqserver注入绕过

WAF绕过方法详解

架构层面

  • 寻找真实服务器IP

    • 云WAF是通过修改DNS解析来隐藏了真实IP

    • 查找域名历史解析记录

    • 利用邮件发送功能中的源地址

    • ……

  • 利用畸形数据包绕过

    • 超长数据包(资源大小限制)

    • 畸形协议,如HTTP不同的请求方法污染、多个同样的头部

    • 这种情况主要是让硬件WAF产生硬件BYPASS,流量直接转发给后端服务器

  • 利用WAF的SSL缺陷

    • WAF对某些SSL算法的不支持

    • 如 TLSv1 256 bits ECDHE-RSA-AES256-SHA

    • 旁路模式中有效

规则缺陷/特性

  • Web容器特性

    • 特殊的百分号

    • 环境:仅在IIS+ASP

Bypass D盾 sqserver注入绕过

  • UNICODE编码

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

字符 Unicode编码
a %u0000  %u0041  %u0061  %u00aa  %u00e2
单引号 %u0027  %u02b9  %u02bc  %u02c8  %u2032  %uff07  %c0%27  %c0%a7  %e0%80%a7
字符 Unicode**编码**
空白 %u0020  %uff00  %c0%20  %c0%a0  %e0%80%a0
左括号( %u0028  %uff08  %c0%28  %c0%a8  %e0%80%a8
右括号 %u0029  %uff09  %c0%29  %c0%a9  %e0%80%a9

规则缺陷/特性

  • HPP(HTTP参数污染)

    • HPP是指HTTP参数污染 HTTP Parameter Pollution。当查询字符串多次出现同一个key时,根据容器不同会得到不同的结果。

    • 例如GET提交:id=123&id=456

Bypass D盾 sqserver注入绕过

  • HPP(HTTP参数污染)

    • 对于某些WAF过滤规则,可以利用以下Payload:

    • id=-1 union+select+username,password/&id=/from+admin+limit 1

Bypass D盾 sqserver注入绕过

  • HPP(HTTP参数污染)

    • 下表中列举了一些主流环境下的HPP情况:

Bypass D盾 sqserver注入绕过

  • 畸形method

    • 某些WAF在处理数据的时候严格按照GET、POST等标准HTTP方法来获取数据,或者采用正则匹配的方式来处理数据,可能因为WAF和WEB服务解析的前后不对等绕过WAF。

    • 存在环境:Apache 2.X

    • 某些apache版本在做GET请求的时候,无论method为何值均会取出GET的内容。

Bypass D盾 sqserver注入绕过

  • 参数数量限制

    • WAF在实际环境中为防止拒绝服务式攻击 (denial of service attacks),默认最多解析前 100 个请求参数 (包括同名的),更多的参数将直接忽略。

    • 存在环境:Nginx+Lua WAF

    • 默认情况下,通过ngx.req.get_uri_args、ngx.req.get_post_args获取uri参数,只能获取前100个参数

Bypass D盾 sqserver注入绕过

  • 变换请求方式

    • 假如php里使用$_REQUEST获取参数,那么php获取参数的默认优先级是:

    • $_COOKIE  >  $_POST  >  $_GET。此时WAF层只过滤get/post,但没有过滤cookie,于是导致了绕过。

    • 存在环境:PHP

  • urlencode和form-data转换

    • POST在提交数据的时候有两种方式,第一种方式是使用urlencode的方式提交,第二种方式是使用form-data的方式提交。使用form-data的方式去提交可以绕过某些WAF,如第一节课中的实例就利用到了该方法。

BypassD盾MSSQL数据库注入

MSSQL特性

select id,contents,time from news where news_id=1①union②select③1,2,db_name()④from⑤admin

位置一

可利用其他控制字符替换空格:%01~%0F、%11~%1F。

可利用注释符号:/**/

可利用数学运算以及数据类型:news_id=1.1,news_id=1e0,news_id=1-1

位置二

可利用其他控制字符替换空格:%01~%0F、%11~%1F。

可利用注释符号:/**/

可利用冒号:union:slect

位置三

可利用其他控制字符替换空格:%01~%0F、%11~%1F。

可利用注释符号:/**/

可利用其他符号:+ 、- 、 ~ 、:、.

位置四

可利用其他控制字符替换空格:%01~%0F、%11~%1F。

可利用注释符号:/**/

可利用其他字符:%80~%FF

位置五

可利用其他控制字符替换空格:%01~%0F、%11~%1F。

可利用注释符号:/**/

可利用冒号:union:slect

可利用其他字符::、.、%80~%FF

原文始发于微信公众号(0x00实验室):Bypass D盾 sqserver注入绕过

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月21日23:46:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Bypass D盾 sqserver注入绕过http://cn-sec.com/archives/2507561.html

发表评论

匿名网友 填写信息