#渗透测试#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

再次点击

成功弹窗:

相关推荐
liang_jy4 小时前
Android UID
android·面试
C雨后彩虹4 小时前
任务总执行时长
java·数据结构·算法·华为·面试
Fnetlink14 小时前
中小企业网络环境优化与安全建设
网络·安全·web安全
小鸡吃米…4 小时前
Python编程语言面试问题二
开发语言·python·面试
LYFlied5 小时前
【每日算法】LeetCode 84. 柱状图中最大的矩形
前端·算法·leetcode·面试·职场和发展
Neolnfra5 小时前
任意文件下载漏洞
计算机网络·安全·web安全·网络安全·系统安全·安全威胁分析·安全架构
zwjapple6 小时前
全栈开发面试高频算法题
算法·面试·职场和发展
程序员爱钓鱼6 小时前
Node.js 编程实战:Redis缓存与消息队列实践
后端·面试·node.js
用户47949283569158 小时前
0.1加0.2为什么不等于0.3-答不上来的都挂了
前端·javascript·面试