怎么用Gotestwaf测试你的WAF检测能力

这篇文章主要讲解了“怎么用Gotestwaf测试你的WAF检测能力”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Gotestwaf测试你的WAF检测能力”吧!

关于Gotestwaf

Gotestwaf,全称为Go Test WAF,该工具可以使用不同类型的攻击技术和绕过技术来测试你Web应用程序防火墙的检测能力。Gotestwaf是一个基于Go开发的开源项目,它实现了一种三步请求生成过程,可以对编码器和占位符的Payload进行相乘操作。假设你定义了2个Payload、3个编码器(Base64、JSON和URLencode)和1个占位符(HTTP GET变量)。在这种情况下,Gotestwaf将在测试用例中发送2*3*1=6个请求。

Payload

你可以发送的Payload字符串,支持比如说<script>alert(111)</script>或其他更复杂的东西。当前版本的Gotestwaf还不支持类似宏这样的功能,但我们之后会添加相关支持。由于这是一个YAML字符串,因此你还可以使用二进制编码,具体请参考https://yaml.org/type/binary.html。

编码器

数据编码器工具应适用于Payload,支持Base64和JSON Unicode编码(\u0027代替’)等。

占位符

占位符位于HTTP请求中,用于存放已编码的Payload。比如说URL参数、URI、POST表单参数或JSON POST主体。

工具安装DockerHub

最新版本的Gotestwaf可以通过DockerHub库直接获取:https://hub.docker.com/r/wallarm/gotestwaf。

我们可以直接使用下列命令将项目库拉取到本地:

docker pull wallarm/gotestwaf本地Docker构建docker build . --force-rm -t gotestwaf docker run -v ${PWD}/reports:/go/src/gotestwaf/reports gotestwaf --url=https://the-waf-you-wanna-test/

运行命令之后,你将会在reports文件夹下查看到waf-test-report-<date>.pdf报告文件,你也可以将其映射到容器中的/go/src/gotestwaf/reports处。

代码构建

Gotestwaf支持在目前常见的操作系统平台上运行,包括Linux、Windows和macOS,我们可以直接在安装了Go环境的系统上进行源码编译和构建:

go build -mod vendor工具配置选项Usage of /go/src/gotestwaf/gotestwaf:       --blockRegex string      Regex to detect a blocking page with the same HTTP response status code as a not blocked request       --blockStatusCode int    HTTP status code that WAF uses while blocking requests (default 403)       --configPath string      Path to the config file (default "config.yaml")       --followCookies          If true, use cookies sent by the server. May work only with --maxIdleConns=1       --idleConnTimeout int    The maximum amount of time a keep-alive connection will live (default 2)       --maxIdleConns int       The maximum number of keep-alive connections (default 2)       --maxRedirects int       The maximum number of handling redirects (default 50)       --nonBlockedAsPassed     If true, count requests that weren't blocked as passed. If false, requests that don't satisfy to PassStatuscode/PassRegExp as blocked       --passRegex string       Regex to a detect normal (not blocked) web page with the same HTTP status code as a blocked request       --passStatusCode int     HTTP response status code that WAF uses while passing requests (default 200)       --proxy string           Proxy URL to use       --randomDelay int        Random delay in ms in addition to the delay between requests (default 400)       --reportPath string      A directory to store reports (default "reports")       --sendDelay int          Delay in ms between requests (default 400)       --testCase string        If set then only this test case will be run       --testCasesPath string   Path to a folder with test cases (default "testcases")       --testSet string         If set then only this test set's cases will be run       --tlsVerify              If true, the received TLS certificate will be verified       --url string             URL to check (default "")       --verbose                If true, enable verbose logging (default true)       --wafName string         Name of the WAF product (default "generic")       --workers int            The number of workers to scan (default 200)       --wsURL string           WebSocket URL to check工具使用样例测试OWASP ModSecurity核心规则集(CRS)

首先,我们需要构建&运行ModSecurity CRS Docker镜像。我们可以使用下列命令自动拉取、构建和运行ModSecurity CRS Docker镜像:

make modsec

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。