#渗透测试#SRC漏洞挖掘#深入挖掘XSS漏洞02之测试流程

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅读。

目录

一、测试流程

[1. 寻找输入点](#1. 寻找输入点)

[2. 构造测试输入](#2. 构造测试输入)

[3. 提交测试输入并观察响应](#3. 提交测试输入并观察响应)

[4. 验证漏洞存在](#4. 验证漏洞存在)

[5. 记录和分析结果](#5. 记录和分析结果)

6.补充(实操):

二、常见的可以用于XSS攻击的HTML标签

三、常用的XSS测试脚本

[1. 基本反射型XSS测试](#1. 基本反射型XSS测试)

[2. 存储型XSS测试](#2. 存储型XSS测试)

[3. DOM型XSS测试](#3. DOM型XSS测试)

[4. 绕过过滤的XSS测试](#4. 绕过过滤的XSS测试)

6.编写自动化XSS测试脚本

四、靶场演练

PikaChu

第一种方法:

第二种方法:


一、测试流程

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标签

  1. <script>:这是最直接也是最常见的用于XSS攻击的标签。攻击者可以在其中嵌入任意JavaScript代码。

  2. <img>:通过设置src属性为一个不存在的图片路径,然后在onerror事件中嵌入JavaScript代码,攻击者可以在图片加载失败时执行恶意脚本。

  3. <a>:通过设置href属性为一个JavaScript代码片段,攻击者可以在用户点击链接时执行恶意脚本。

  4. <input>:通过设置type属性为image,然后在src属性中嵌入JavaScript代码,攻击者可以在用户点击图片时执行恶意脚本。

  5. <video><audio>:通过设置src属性为一个JavaScript代码片段,攻击者可以在媒体文件加载时执行恶意脚本。

  6. <iframe>:通过设置src属性为一个包含恶意JavaScript代码的页面URL,攻击者可以在页面中嵌入一个恶意页面。

  7. <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测试脚本,以下是一个简单的示例:

python 复制代码
import 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

再次点击

成功弹窗:

相关推荐
马剑威(威哥爱编程)37 分钟前
MongoDB面试专题33道解析
数据库·mongodb·面试
Spring_java_gg2 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
理想不理想v3 小时前
‌Vue 3相比Vue 2的主要改进‌?
前端·javascript·vue.js·面试
newxtc3 小时前
【国内中间件厂商排名及四大中间件对比分析】
安全·web安全·网络安全·中间件·行为验证·国产中间件
sszmvb12344 小时前
测试开发 | 电商业务性能测试: Jmeter 参数化功能实现注册登录的数据驱动
jmeter·面试·职场和发展
测试杂货铺4 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
王佑辉4 小时前
【redis】redis缓存和数据库保证一致性的方案
redis·面试
真忒修斯之船4 小时前
大模型分布式训练并行技术(三)流水线并行
面试·llm·aigc
ZL不懂前端5 小时前
Content Security Policy (CSP)
前端·javascript·面试