​ w3af 是一个针对web应用程序的开源漏洞扫描和审查软件,基于phton编写,用来帮助开发者发现web程序中的安全问题。目前可以检查包括 XSS,SQL注入,CSRF 在内的 200 种以上的安问题,官方网址为 http://w3af.org/。

w3af 的安装,w3af 包含了可视化桌面版本和控制台版本,我们先以桌面版本为例。

w3af 下载下载:

wget https://github.com/andresriancho/w3af/archive/1.6.49.tar.gz
tar -zxvf ./1.6.49.tar.gz

安装依赖环境

$ sudo yum -y install python python-devel python-pip install openssl openssl-devel openssl-libs  libxslt libxslt-devel  yum install libxml2 libxml2-devel pygtksourceview graphviz
$ ln -s /usr/include/libxml2/libxml /usr/include/libxml

w3af 运行需要依赖很多模块,首次执行 w3af_gui 时会有提示,并生成一个依赖模块安装脚本 /tmp/w3af_dependency_install.sh

$ ./w3af_gui
Your python installation needs the following modules to run w3af:
    clamd github git.util pybloomfilter esmre phply stopit nltk chardet tblib pdfminer concurrent.futures ndg pyasn1 lxml scapy.config guess_language cluster msgpack ntlm Halberd darts.lib.utils jinja2 vulndb markdown xdot


After installing any missing operating system packages, use pip to install the remaining modules:
    sudo pip install clamd==1.0.1 PyGithub==1.21.0 GitPython==0.3.2.RC1 pybloomfiltermmap==0.3.11 esmre==0.3.1 phply==0.9.1 stopit==1.1.0 nltk==3.0.1 chardet==2.1.1 tblib==0.2.0 pdfminer==20140328 futures==2.1.5 ndg-httpsclient==0.3.3 pyasn1==0.1.3 lxml==2.3.2 scapy-real==2.2.0-dev guess-language==0.2 cluster==1.1.1b3 msgpack-python==0.4.4 python-ntlm==1.0.1 halberd==0.2.4 darts.util.lru==0.5 Jinja2==2.7.3 vulndb==0.0.17 markdown==2.6.1 xdot==0.6

A script with these commands has been created for you at /tmp/w3af_dependency_install.sh
The required "dot" binary is missing, please install the "graphviz" package in your operating system

执行依赖安装脚本:

$ /tmp/w3af_dependency_install.sh

本例中 w3af_gui 需要在 Linux 桌面环境下运行。

启动桌面版:

$ ./w3af_gui

初始界面如下:

从图总可见,用于安全扫描的的插件很多,打开每个插件都有单独的配置(右侧最大的面板区域)。主要如下几类:

  • 抓取(crawl):负责遍历URL,并从页面中发现新的URL,表单以及注入点。
  • 审计(audit):向抓取插件发现的漏洞注入点发送攻击数据,用以识别漏洞。
  • 扫描(grep):分析其他插件发送的HTTP请求和响应,并从中识别漏洞。
  • 破坏(mangle):通过正则表达式来修改请求和响应。
  • 暴力破解(Bruteforce):暴力破解登录账户。
  • 逃避(evasion):修改其他插件锁产生的HTTP流量,以逃避服务端的入侵检测。
  • 授权类(auth):帮助其他插件扫描哪些需要授权验证的URL,比如预登陆。
  • 基础设施类(Infrastructure):用于识别远程应用程序以外的信息,比如操作系统,防火墙,Web服务器软件等信息。比如 find_jboss 插件用来挖掘 jboss 的目录和潜在的安全漏洞。(TUDO补充)

查看所有的插件请参考官方网站:http://w3af.org/plugins,截止写稿时,官方已经继承了145个插件。

我们通过类似来演示w3af的用法,我们以xss漏洞为例,先构建一个含有xss漏洞的简单代码 xss.php 如下:

<?php
echo $_GET['name'];

​ 选择审计类插件中的 xss 插件,填写目标URL地址,要带上参数,w3af 会尝试各种可能的产生漏洞的参数值。

点击 Start 按钮开始扫描,当发现漏洞时会在日这种显示处理,如下:

扫描结束之后,可以通过 Result 查看漏洞的具体情况,和发现漏洞锁使用的参数。

很多情况被测试的地址需要登录才能访问,所有在进行漏洞扫描时需要带上登录信息,这里我们在用里一个例子来说明如何进行授权的扫描,我们使用钱文介绍的 DVWA ,我们将安全级别调为low(调整方式参考前文TODO),low级别包含了很多明显的安全漏洞,我们使用其中的SQL注入来测试,如图:

​ 通过 Chome 的开发者工具(菜单->更多工具->开发者工具->Network)可以看到在请求访问 DVWA 时发送的登录Cookie,我们将其提取出来,w3af 进行扫描时要带上这段头信息,如图:

将这段信息复制到一个文本文件中,如 /tmp/headers.txt

Cookie:security=low; PHPSESSID=6e6ki4a0gg53lj0amksp8lt0b5

在 w3af 中设置头信息文件(Configuration -> HttpConfig->General),如图:

在审计插件中选择Sqli(SQL 注入)并启动.

​ 发现漏洞时会在日志中显示,如图。w3af 支持多种形式的报告输出形式,除了输出到控制台以外,还可以输出到文本文件,html文件,xml 文件,或者通过邮件发送。

​ 除了客户刷界面意外,w3af 支持命令行的方式,在没有桌面环境下可以使用 w3af_console 来执行扫描。上面的 xss 漏洞扫描,按照命令行方式的操作过程如下:

$ ./w3af_console
# 进入插件插件配置
w3af>>> plugins
# 配置使用哪种设计插件,这里是xss。也可以通过配置多种插件,如 audit csrf sqli。只输入 audit 会显示当前所有可用的审计插件。
w3af/plugins>>> audit xss
# 设置扫描报告输出输出位置,console 表示输出到终端控制台,其他的还有 html_file, text_file, email_report 等等。直接输入 output 会显示当前所有输出插件。
w3af/plugins>>> output console
# 返回主配置界面
w3af/plugins>>> back
# 进入目标地址配置界面
w3af>>> target
# 进入目标地址,多个用逗号分隔
w3af/config:target>>> set target http://192.168.56.101/xss.php?name=11
# 返回主配置界面
w3af/config:target>>> back
The configuration has been saved.
# 开始扫描
w3af>>> start
# 发现漏洞
A Cross Site Scripting vulnerability was found at: "http://192.168.56.101/xss.php", using HTTP method GET. The sent data was: "name=" The modified parameter was "name". This vulnerability was found in the request with id 35.
Scan finished in 0 seconds.
Stopping the core...
w3af>>> 

# 扫描结束之后,可以通过 kb 指令查看所有被发现的漏洞。
w3af>>> kb
w3af/kb>>> list vulns
|-----------------------------------------------------------------------------------------------------------------------------|
| Vulnerability   | Description                                                                                               |
|-----------------------------------------------------------------------------------------------------------------------------|
| Cross site      | A Cross Site Scripting vulnerability was found at: "http://192.168.56.101/xss.php", using HTTP method     |
| scripting       | GET. The sent data was: "name=" The modified parameter was "name". This vulnerability was found in the    |
| vulnerability   | request with id 35.                                                                                       |
|-----------------------------------------------------------------------------------------------------------------------------|

​ 另外, w3af_console 还支持脚本执行,使得自动化扫扫描称为可能。w3af 的自动化脚本,其实就是 w3af_console 的命令语句的结合,比如上面 sqli 注入的例子,对脚本如下:

plugins
audit sqli
output console
back
# 设置 header 文件
http-settings
set headers_file /tmp/headers.txt
back
target
set target http://192.168.56.101/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit
back
start

执行脚本

$ ./w3af_console -s ./test.w3af 
w3af>>> plugins
w3af/plugins>>> audit sqli
w3af/plugins>>> output console
w3af/plugins>>> back
w3af>>> http-settings
w3af/config:http-settings>>> set headers_file /tmp/headers.txt
w3af/config:http-settings>>> back
The configuration has been saved.
w3af>>> target
w3af/config:target>>> set target http://192.168.56.101/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#
w3af/config:target>>> back
The configuration has been saved.
w3af>>> start
A SQL error was found in the response supplied by the web application, the error is (only a fragment is shown): "You have an error in your SQL syntax;". The error was found on response with id 36.
A SQL error was found in the response supplied by the web application, the error is (only a fragment is shown): "MySQL server version for the right syntax to use". The error was found on response with id 36.
SQL injection in a MySQL database was found at: "http://192.168.56.101/dvwa/vulnerabilities/sqli/", using HTTP method GET. The sent data was: "id=a%27b%22c%27d%22&Submit=Submit" The modified parameter was "id". This vulnerability was found in the request with id 36.
Scan finished in 0 seconds.
Stopping the core...
w3af>>>

在 w3af scrt 目录总提供了大量的脚本的例子,作为作为参考,如图:

results matching ""

    No results matching ""