米斯特白帽培训讲义 工具篇 BruteXSS

讲师:gh0stkey

整理:飞龙

协议:CC BY-NC-SA 4.0

介绍

BruteXSS 是一个非常强大和快速的跨站点脚本检测工具,可用于暴力注入参数。BruteXSS 从指定的词库加载多种有效载荷进行注入,并且使用指定的载荷和扫描检查这些存在 XSS 漏洞的参数。得益于非常强大的扫描功能,在执行任务时,BruteXSS 非常准确而且极少误报。 BruteXSS 支持 POST 和 GET 请求,并适应现代 Web 应用程序。

特性:

  • XSS 爆破
  • XSS 扫描
  • GET/POST 请求
  • 可包含自定义单词
  • 人性化的 UI

安装

首先安装 Python 2.7。

依赖是ColoramaMechanize两个库。但我看到源码中包含了这两个库,所以一般不用自己安装。如果运行失败,那么执行这两条命令手动安装一下。

  1. pip install colorama
  2. pip install Mechanize

之后从https://github.com/shawarkhanethicalhacker/BruteXSS/zipball/master下载所有文件,解压。

还需要单词列表,原版的wordlist.txt有 20 条语句,只能执行基本的 XSS 检查。

https://github.com/ym2011/penetration/blob/master/BruteXSS/wordlist-small.txt这个文件有 100 条语句,可以执行相对全面的 XSS 检查。

https://github.com/ym2011/penetration/blob/master/BruteXSS/wordlist-medium.txt这个文件有 200 条语句,可以执行绕过 WAF 的 XSS 检查。

https://github.com/ym2011/penetration/blob/master/BruteXSS/wordlist-huge.txt这个文件有 5000 条语句,可以非常全面并且执行绕过 WAF 的 XSS 检查。

然后为了模拟被测页面,我们还要部署一个页面:

  1. \\XSS反射演示
  2. <form action="" method="get">
  3. <input type="text" name="xss"/>
  4. <input type="submit" value="test"/>
  5. </form>
  6. <?php
  7. $xss = @$_GET['xss'];
  8. if($xss!==null){
  9. echo $xss;
  10. }

假设我们能够通过localhost/xss.php来访问它。

使用

首先在解压处执行:

  1. python brutexss.py

于是就进入命令行界面了

  1. ____ _ __ ______ ____
  2. | __ ) _ __ _ _| |_ ___ \ \/ / ___/ ___|
  3. | _ \| '__| | | | __/ _ \ \ /\___ \___ \
  4. | |_) | | | |_| | || __/ / \ ___) |__) |
  5. |____/|_| \__,_|\__\___| /_/\_\____/____/
  6. User:Gh0stkey
  7. 注意:使用错误的有效载荷的定义
  8. 字典可能给你积极性质
  9. 更好地使用字典
  10. 提供积极的结果。
  11. [?] 选择方法: [G]GET 或者 [P]Post (G/P):

下面它会询问我们一些配置。我们在选择方法时输入G,指定 URL 时输入http://localhost/xss.php?xss,这里一定要把参数暴露出来给它。然后字典位置输入wordlist.txt,大家也可以尝试其他字典。

  1. [?] 选择方法: [G]GET 或者 [P]Post (G/P): G
  2. [?] 输入 URL:
  3. [?] > http://localhost/xss.php?xss=
  4. [+] 检测 localhost 是可用的...
  5. [+] localhost is available! Good!
  6. [?] 输入字典的位置 (按Enter键使用默认 wordlist.txt)
  7. [?] > wordlist.txt

之后程序会显示结果,告知我们该页面存在 XSS 漏洞。

  1. [+] 从指定字典加载载荷.....
  2. [+] 25 攻击载荷加载...
  3. [+] Bruteforce开始:
  4. [+] 测试 'xss' 参数...
  5. [+] 0 / 25 攻击载荷注入...
  6. [!] Xss漏洞发现
  7. [!] 参数: xss
  8. [!] Payload: </script>"><script>prompt(1)</script>
  9. [+] Bruteforce完成。
  10. [+] 1 参数是 容坠セ鞯? xss.
  11. [+] 扫描结果 localhost:
  12. +----+------------+----------------+
  13. | Id | Parameters | Status |
  14. +----+------------+----------------+
  15. | 0 | xss | Vulnerable |
  16. +----+------------+----------------+
  17. [?] [E]结束进程\[A]程序初始化

之后它会让我们选择,结束进程的意思就是退出,初始化的意思就是重新开始。如果不需要扫描其他东西,我们输入E

如果是 POST 扫描,我们为 URL 输入http://localhost/xss.php,为数据输入xss=就可以了。

由于一些 XSS 比如储存型 XSS 不便于自动化扫描,这个工具的作用仍然很有限,遇到扫不出来的漏洞很正常。