免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。
目录
[1. 寻找输入点](#1. 寻找输入点)
[2. 构造测试输入](#2. 构造测试输入)
[3. 提交测试输入并观察响应](#3. 提交测试输入并观察响应)
[4. 验证漏洞存在](#4. 验证漏洞存在)
[5. 记录和分析结果](#5. 记录和分析结果)
[1. 基本反射型XSS测试](#1. 基本反射型XSS测试)
[2. 存储型XSS测试](#2. 存储型XSS测试)
[3. DOM型XSS测试](#3. DOM型XSS测试)
[4. 绕过过滤的XSS测试](#4. 绕过过滤的XSS测试)
一、测试流程
1. 寻找输入点
目标:在目标网站上寻找可能接收用户输入的地方,如查询接口、搜索框、表单提交、URL参数等。
方法:浏览网站的不同页面,特别关注那些允许用户输入数据的地方。
2. 构造测试输入
内容:构造一组包含"特殊字符+唯一识别字符"的测试输入。特殊字符用于尝试绕过可能的输入过滤机制,唯一识别字符用于后续在返回的数据中定位测试输入。
示例 :使用如
<script>alert('XSS')</script>
结合唯一标识符(如时间戳、用户ID等)作为测试输入。3. 提交测试输入并观察响应
提交:将构造的测试输入提交给目标网站。
观察:查看服务器返回的响应内容,特别是检查响应中是否包含了未经适当转义的测试输入。
4. 验证漏洞存在
搜索定位:在返回的源码中搜索唯一识别字符,以定位测试输入的位置。
构造闭合:检查唯一识别字符前后的语法,尝试构造闭合的HTML/JavaScript标签或属性,以验证是否可以执行恶意脚本。
执行脚本:如果成功构造了闭合条件,尝试执行恶意脚本(如通过点击链接、提交表单等方式触发)。如果脚本被执行,则说明存在反射型XSS漏洞。
5. 记录和分析结果
记录:详细记录测试过程、输入数据、响应内容以及漏洞验证结果。
分析:分析漏洞产生的原因、影响范围以及可能的攻击场景,为后续的漏洞修复提供建议。
6.补充(实操):
在我们找到得功能点进行恶意代码输入,查看浏览器是否对我们输入得恶意代码进行过滤、验证、转义
a. 输入正常字符串,然后查看字符串出现的位置
b.输入标签然后查看源代码是否被过滤(右键查看源代码),如果没有被过滤,那么存在xss的可能性很大
检查语句:
<u>a</u> <h1>a</h1> <span>1</span> <script>console.log(1)</script>
观察什么是闭合:右键查看源代是什么闭合,再来考虑闭合。
c.如果发现<> 没有被过滤,进行下一步构造,尝试输入script等恶意代码查看是否被过滤。
d.尝试绕过,准备标签字典(能进行弹窗的标签)进行一步一步的绕过,最终选择没有过滤的标签进行插入。
注意事项
绕过过滤机制:由于后台可能存在过滤措施,构造的恶意脚本可能会被过滤掉而无法生效。因此,需要尝试不同的脚本和绕过技巧来绕过过滤机制。
浏览器限制:某些浏览器可能对跨站脚本执行有限制,因此在测试过程中需要考虑浏览器的安全设置和策略。
合法性:在进行XSS漏洞测试时,必须确保测试活动符合相关法律法规和道德规范,避免对目标网站造成不必要的损害或侵犯用户隐私。
通过以上步骤,可以有效地测试和验证反射型XSS漏洞的存在,并为后续的漏洞修复提供有力的支持
二、常见的可以用于XSS攻击的HTML标签
<script>
:这是最直接也是最常见的用于XSS攻击的标签。攻击者可以在其中嵌入任意JavaScript代码。
<img>
:通过设置src
属性为一个不存在的图片路径,然后在onerror
事件中嵌入JavaScript代码,攻击者可以在图片加载失败时执行恶意脚本。
<a>
:通过设置href
属性为一个JavaScript代码片段,攻击者可以在用户点击链接时执行恶意脚本。
<input>
:通过设置type
属性为image
,然后在src
属性中嵌入JavaScript代码,攻击者可以在用户点击图片时执行恶意脚本。
<video>
和<audio>
:通过设置src
属性为一个JavaScript代码片段,攻击者可以在媒体文件加载时执行恶意脚本。
<iframe>
:通过设置src
属性为一个包含恶意JavaScript代码的页面URL,攻击者可以在页面中嵌入一个恶意页面。
<embed>
和<object>
:这两个标签可以用于嵌入各种类型的媒体文件,包括包含恶意JavaScript代码的文件。
三、常用的XSS测试脚本
以下是一些常用的XSS测试脚本,可以用于检测不同类型的XSS漏洞:
1. 基本反射型XSS测试
html<script>alert('XSS')</script>
这个脚本会弹出一个警告框,如果弹出框显示,说明存在反射型XSS漏洞。
2. 存储型XSS测试
html<img src="x" onerror="alert('XSS')">
这个脚本会在图片加载失败时弹出警告框,适用于检测存储型XSS漏洞。
3. DOM型XSS测试
html<script>document.write('<img src="x" onerror="alert(\'XSS\')">');</script>
这个脚本会动态生成一个图片标签,并在加载失败时弹出警告框,适用于检测DOM型XSS漏洞。
4. 绕过过滤的XSS测试
html<svg/onload=alert('XSS')>
这个脚本使用了SVG标签和
onload
事件,可以绕过一些简单的过滤器。6.编写自动化XSS测试脚本
可以使用Python等编程语言编写自动化XSS测试脚本,以下是一个简单的示例:
pythonimport requests def test_xss(url, payload): response = requests.get(url, params={'input': payload}) if payload in response.text: print(f"XSS vulnerability detected at {url} with payload: {payload}") else: print(f"No XSS vulnerability detected at {url} with payload: {payload}") # 测试URL和payload url = "http://example.com/search" payloads = [ "<script>alert('XSS')</script>", "<img src='x' onerror='alert(\"XSS\")'>", "<svg/onload=alert('XSS')>" ] for payload in payloads: test_xss(url, payload)
四、靶场演练
PikaChu
靶场初始化:
第一种方法:
演示反射型xss
输入aaa
右键查看源码,并定位aaa所在位置。
使用 HTML下划线标签 进行测试
使用<u>aaa</u> 而不使用<script>aaa</script>,主要是看有没有实体化(有没有进行编码或转义),所有看看用这种没有威胁的标签,先检测<>有没有被转义。
没有转义,可进行下一步尝试。<script>aaa</script>
直接输入<script>alert('aaa')</script>,长度被限制
修改输入框的长度值
修改后:
成功弹窗
第二种方法:
html
<a href="javascript:%0a%61l\u0065rt(1)">click me</a>
<a href='javascript:%0a%61l\u0065rt(1)'>click me</a>
代码解释
javascript:: 这是一个伪协议,用于在HTML中直接执行JavaScript代码。
%0a: 这是URL编码中的换行符(\n),但在JavaScript中会被忽略。
%61l\u0065rt(1): 这部分代码实际上是JavaScript代码的混淆形式。解码后为:
%61 解码为 a
l 保持不变
\u0065 解码为 e
rt(1) 保持不变
组合起来就是 alert(1)。
代码执行
当用户点击链接时,浏览器会执行JavaScript代码 alert(1),弹出一个警告框,显示数字 1
再次点击
成功弹窗: