💡 想测试网站是否存在 XSS 漏洞?想要一款强大的自动化工具?今天和大家整理分享一下最近使用到 XSS 漏洞排查工具(XSStrike)笔记,带你玩转 XSStrike!
XSS(跨站脚本攻击)一直是 Web 安全领域最常见的漏洞之一,而 XSStrike 作为一款智能化 XSS 测试工具,能够自动分析参数、绕过 WAF 规则,并生成高效的 XSS payload。
本篇文章将带你详细了解 XSStrike 的安装方法、实战用法,让你快速上手这款 XSS 渗透利器!👨💻
什么是 XSS ?
XSS(跨站脚本攻击)是一种常见的前端安全漏洞,攻击者可以通过注入恶意脚本来窃取用户信息、劫持会话甚至篡改网页内容。对于 Web 开发者来说,理解 XSS 的攻击方式和防御手段至关重要。
XSS 跨站攻击原理
XSS 的本质是 攻击者在网页中注入恶意脚本(JavaScript),并让受害者的浏览器执行该脚本,从而窃取敏感信息、劫持用户会话、伪造请求等。
攻击流程:
- 注入恶意代码:攻击者通过输入框、URL参数、评论区等可交互的地方,提交一段恶意 JavaScript 代码。
- 存储/反射到页面:服务器或前端未对输入进行适当过滤,导致这段代码被存储或直接在页面中输出。
- 用户访问触发执行:当受害者访问被污染的页面时,恶意 JavaScript 在用户浏览器中执行,获取 Cookie、LocalStorage 数据,甚至发送请求到攻击者的服务器。
常见类型:
- 存储型 XSS:恶意代码存入数据库,影响所有访问该页面的用户。
- 反射型 XSS:恶意代码通过 URL 传递,仅影响点击该链接的用户。
- DOM 型 XSS:前端 JavaScript 代码解析用户输入时动态执行恶意脚本。
防御手段:
- 输入校验:对用户输入进行严格过滤,禁止特殊字符。
- 输出编码:对 HTML、JavaScript、URL 进行转义,防止代码执行。
- 使用 CSP(内容安全策略):限制页面可执行的脚本来源。
- HttpOnly Cookie:防止 JavaScript 直接访问 Cookie。
通过这些防御措施,可以有效降低 XSS 攻击的风险。
XSStrike 简介
XSStrike 是一个跨站脚本检测套件,配备了四个手写解析器、一个智能负载生成器、一个强大的模糊引擎和一个速度极快的爬虫。
XSStrike 不像所有其他工具那样注入有效负载并检查其工作情况,而是使用多个解析器分析响应,然后通过与模糊引擎集成的上下文分析来制作保证工作的有效负载。以下是 XSStrike 生成的有效负载参数的效果示例,可以看到已经嵌入一块弹窗逻辑。
%3ChTml/+/onMoUseover%0d=%0d[8].find(confirm)//
除此之外,XSStrike还具有爬行、模糊测试、参数发现、WAF检测功能。它还扫描 DOM XSS 漏洞。
XSStrike 文档
源码位置:https://github.com/s0md3v/XSStrike
使用文档:https://github.com/s0md3v/XSStrike/wiki/Usage
XSStrike 下载 & 安装
1、安装 python3 环境
(1)Python3 下载
下载地址:https://www.python.org/downloads/release/python-3114/ 选择 Windows installer (64-bit) 下载安装。
(2)Python3 安装
安装时选安装界面下方【添加到环境变量】,建议自定义安装,勾选全选安装。
(3)Windows命令行直接执行 python -V 检查是否安装成功(出现版本号则成功)
2、XSStrike 下载
下载地址:https://github.com/s0md3v/XSStrike
3、XSStrike 直接解压
4、Windows 文件路径命令行可键入 cmd 回车直接进入终端命令行
5、测试产生攻击效果时发现还有依赖没有装完全
注:提示 fuzzywuzzy 没有安装则 pip 单独安装(如果提示自动安装则忽略)。
执行以下命令安装 fuzzywuzzy
pip install fuzzywuzzy
6、环境已经准备完全
测试一个在线的 xss 靶场网站(http://test.ctf8.com/level1.php?name=test),http 请求参数 name 字段有机会可以进行拼凑攻击。
命令行执行测试
python xsstrike.py -u "http://test.ctf8.com/level1.php?name=test"
执行结果:
可以发现已经把渗透的结果测试出来,并且还分析出潜在的攻击代码,我们可以拿着这个载荷(payload)到靶场网站进行 xss 攻击查看效果。
替换 http 请求中的 request 参数,使用分析出来的结果值进行请求,验证 XSStrike 工具发现可嵌入了 xss 攻击脚本。
http://test.ctf8.com/level1.php?name=<a%0donmouSEoVEr%0d=%0d(confirm)()>v3dm0s
让我们直接访问看看效果,发现已经构成攻击,一直循环点击,无法结束弹窗。
如果是需要请求测试一些需要登录的网站,需要设置请求头。
python xsstrike.py -u http://example.com/page.php?q=query --headers "Accept-Language: en-US\nCookie: null"
XSStrike 参数
usage: xsstrike.py [-h] [-u TARGET] [--data DATA] [-t THREADS] [--seeds SEEDS] [--json] [--path]
[--fuzzer] [--update] [--timeout] [--params] [--crawl] [--blind]
[--skip-dom] [--headers] [--proxy] [-d DELAY] [-e ENCODING]
optional arguments:
-h, --help show this help message and exit
-u, --url target url
--data post data
-f, --file load payloads from a file
-t, --threads number of threads
-l, --level level of crawling
-t, --encode payload encoding
--json treat post data as json
--path inject payloads in the path
--seeds load urls from a file as seeds
--fuzzer fuzzer
--update update
--timeout timeout
--params find params
--crawl crawl
--proxy use prox(y|ies)
--blind inject blind xss payloads while crawling
--skip skip confirmation dialogue and poc
--skip-dom skip dom checking
--headers add headers
-d, --delay delay between requests
扫描单个网址
选项:-u
或 --url
测试使用 GET 方法的单个网页。
python xsstrike.py -u "http://example.com/search.php?q=query"
提供 POST 数据
python xsstrike.py -u "http://example.com/search.php" --data "q=query"
测试 URL 路径组件
选项:--path
想要在 URL 路径中注入有效负载,例如http://example.com/search/<payload>
,您可以使用--path
switch 来做到这一点。
python xsstrike.py -u "http://example.com/search/form/query" --path
将 POST 数据视为 JSON
选项:--json
该开关可用于通过 POST 方法测试 JSON 数据。
python xsstrike.py -u "http://example.com/search.php" --data '{"q":"query"}' --json
提供 HTTP 标头
选项:--headers
用\n
以下分隔符分隔: python xsstrike.py -u http://example.com/page.php?q=query --headers "Accept-Language: en-US\nCookie: null"
官网文档
详情请查看:https://github.com/s0md3v/XSStrike/wiki/Usage
总结
XSStrike 作为一款 XSS 渗透神器,能 自动发现漏洞、生成最优 payload、绕过 WAF,极大提升 XSS 测试效率。
💬 你有用过 XSStrike 进行 XSS 渗透测试吗?欢迎留言讨论你的经验和想法!