记实战下一些不一样的漏洞挖掘经历
字数 5887 2025-11-05 23:45:18

实战漏洞挖掘高级技巧教学文档

文档说明

本教学文档基于一篇真实的渗透测试经验总结,旨在深入剖析在复杂场景下(如存在签名校验、前端加密、严格WAF等)如何利用系统性的思维和方法挖掘高危漏洞。文档将按照漏洞类型分类,每个案例都包含漏洞背景、分析思路、技术细节、突破方法总结反思,力求还原分析者的思考路径。


第一章:越权漏洞的深入利用

越权漏洞的核心在于绕过系统对用户权限的验证机制。本章重点讲解三种非典型的越权场景。

案例一:签名校验绕过导致的水平越权

  • 漏洞背景: 测试一个小程序时,发现请求接口(如查询用户信息)需要携带memberid参数。初步尝试修改memberid进行遍历时,请求被拒绝。分析请求包,发现存在一套自定义的安全校验机制,包括时间戳(timestamp)、随机数(nonce)、签名(mac)等字段。
  • 分析思路
    1. 判断校验点: 重放请求失败,说明服务端有防重放机制。修改nonce后报时间戳错误,修改时间戳后报签名错误,由此确定校验逻辑为:验证时间戳新鲜度 -> 验证nonce唯一性 -> 验证mac签名正确性。
    2. 定位加密逻辑: 对小程序进行反编译,在得到的源码中,重点查看app-service.js文件(通常包含核心业务逻辑和接口调用)。
    3. 逆向签名算法: 在app-service.js中全局搜索关键词mac,定位到生成签名的JavaScript函数。
  • 技术细节
    1. 破解时间戳与Nonce: 使用Python脚本动态生成当前时间戳和随机nonce,解决前两个校验。
    2. 逆向签名函数: 分析定位到的签名函数,发现其使用特定算法(如HMAC-SHA256)将请求参数(包括memberid、时间戳、nonce等)和一个静态密钥(Key) 进行加密生成mac
    3. 关键突破: 该静态密钥(Key)硬编码在前端代码中,可被直接获取。这是因为开发错误地认为前端代码是安全的。
  • 利用过程
    1. 编写Python脚本,完全模拟前端的签名生成逻辑。
    2. 脚本自动生成有效的时间戳、nonce和正确的mac签名。
    3. 通过遍历memberid参数,成功越权获取所有用户的敏感信息。
  • 核心要点
    • 签名 ≠ 鉴权: 签名校验旨在保证请求的完整性和不可否认性,但若签名密钥可被攻击者获取,则签名机制形同虚设,无法替代真正的身份鉴权。
    • 前端加密不可信: 任何置于前端的加密逻辑和密钥都只能起到“防君子”的作用,在逆向工程面前是透明的。

案例二:签名绕过导致的敏感接口泄露与越权

  • 漏洞背景: 在一个带有Token认证的系统中,发现一个接口getUserByPhone,但以低权限身份请求时无信息返回,难以判断是否存在越权。
  • 分析思路
    1. 扩大攻击面: 首先尽可能多地收集系统接口。
    2. 寻找差异点: 在测试其他接口时,发现请求失败,原因是请求头中的digest字段(签名)校验不通过。这表明该系统对接口访问有统一的签名校验。
    3. 逆向签名: 同样通过反编译前端代码,全局搜索digest,定位签名生成函数。
  • 技术细节
    1. 分析签名算法: 逆向发现,digest的生成规则相对简单:将接口URL路径特定固定参数按特定格式拼接后,进行MD5哈希并转换为大写。
    2. 绕过鉴权: 由于签名算法不依赖动态或不可获取的密钥,攻击者可以为自己构造的任何请求(包括之前发现的敏感接口getUserByPhone)生成合法的digest
  • 利用过程
    1. 编写脚本,自动化生成任意接口请求的合法digest签名。
    2. 利用此能力,直接访问getUserByPhone等敏感接口,通过穷举手机号实现用户信息的越权查询。
  • 核心要点
    • 接口鉴权模型: 系统的鉴权模型应为:身份认证(Token/Session)→ 接口权限校验 → 数据权限校验。本案例中,系统只做了第一步,并在第二步使用了脆弱的签名机制,导致越权。
    • Token不是万能的: 即使请求携带了合法的Token,如果服务端没有在业务逻辑层严格校验“当前Token身份是否有权访问该接口/该数据”,越权依然会发生。

案例三:JS逆向破解参数加密实现的越权

  • 漏洞背景: 在测试一个教育证书站时,发现查询用户订单的接口user/getOrderList的请求体中的data参数被加密。
  • 分析思路
    1. 定位加密位置: 使用浏览器开发者工具的“全局搜索”功能,搜索接口URL或关键词,定位到发起请求的JavaScript代码段。
    2. 动态调试: 在疑似加密代码处设置断点,发起请求,使代码执行暂停在断点处。
    3. 调用栈分析: 使用开发者工具的“Call Stack”(调用堆栈)面板,从发起请求的代码向上回溯,找到加密发生的确切函数。
  • 技术细节
    1. 步进分析: 通过单步调试(Step Into)深入加密函数内部。
    2. 识别加密算法: 在代码中发现使用了public key,从而判断出是RSA非对称加密。
    3. 获取密钥: 密钥(公钥)直接硬编码在前端JS中,可被直接提取。
  • 利用过程
    1. 从代码中提取RSA公钥。
    2. 分析出加密前的明文格式(例如是userId=123&phone=456的拼接)。
    3. 使用该公钥和相同的加密库(如Python的cryptography),编写脚本加密任意userId等参数,构造恶意请求,实现越权查询他人订单。
  • 核心要点
    • 熟练使用开发者工具: “全局搜索”、“断点调试”、“调用堆栈”是前端逆向分析的三大神器。
    • 理解加密类型: 识别是对称加密(AES、DES)还是非对称加密(RSA),对后续的利用脚本编写至关重要。

第二章:未授权访问漏洞

未授权访问是一种特殊的垂直越权,即从无权限用户直接提升为有权限用户。

案例一:HTTP方法滥用导致的未授权操作

  • 漏洞背景: 在某学校资产系统中,发现一个查看资源状态的接口(如/api/resource/status),返回资源详情。
  • 分析思路
    1. 信息收集: 这是漏洞挖掘的基础。通过目录扫描、JS文件分析、爬虫等方式尽可能多地收集接口。
    2. 测试不同HTTP方法: 对于发现的接口,不仅测试GET/POST,还要测试PUTDELETEPATCH等方法。
  • 技术细节
    1. 方法滥用: 对/api/resource/status接口使用GET方法时,只是查看信息。但尝试使用DELETE方法时,服务端返回了操作成功的提示,实现了资源的未授权下架。同理,PUTPOST方法可能用于未授权上线资源。
  • 利用过程: 直接使用Burp Suite等工具,重放请求并修改HTTP方法,观察响应结果,从而实现对系统资源的未授权管控。
  • 核心要点
    • RESTful API风险: 遵循RESTful规范的API会根据HTTP方法来区分操作(GET查,POST增,PUT改,DELETE删)。如果服务端仅根据URL进行权限校验,而忽略了方法,就会导致此类漏洞。
    • 自动化测试: 可将此测试过程集成到自动化扫描工具中。

案例二:前端响应拦截修改实现认证绕过

  • 漏洞背景: 一个需要登录的系统,在未登录状态下访问后台,页面会短暂加载后跳转或消失。
  • 分析思路
    1. 推测机制: 这种现象通常是前端JavaScript在页面加载后,通过异步请求验证身份,验证失败则执行跳转。
    2. 拦截响应: 使用Burp Suite等代理工具的“拦截响应”(Intercept response)功能,在身份验证的JS代码返回时将其截获。
  • 技术细节
    1. 分析响应包: 在拦截到的HTML或JS响应体中,查找负责认证和跳转的代码段。例如,可能有一个setTimeout函数在5秒后执行跳转检查。
    2. 修改逻辑: 修改响应体,可以有两种方式:
      • 删除跳转代码: 直接删除或注释掉负责跳转的JavaScript代码。
      • 延长定时器: 将setTimeout的时间从5000(5秒)改为一个极大的值(如5000000),为操作争取足够时间。
  • 利用过程: 拦截并修改响应包后,放行。浏览器将加载被“阉割”或“延迟”了认证逻辑的页面,从而允许未授权用户进入后台进行操作。
  • 核心要点
    • 前端校验不可信: 与前端加密一样,前端进行的身份认证和权限控制可以被绕过。一切校验必须在服务端完成。
    • 善用代理工具: “拦截响应”是一个常被忽略但极其强大的功能,可用于绕过客户端限制。

第三章:SQL注入漏洞

案例一:SQL Server注入与命令执行(RCE)

  • 漏洞背景: 在某政府系统的人员信息添加功能中,对JSON参数尝试闭合时产生数据库报错。
  • 分析思路
    1. 识别数据库: 根据报错信息特征(如Microsoft OLE DB Provider for SQL Server)确认数据库为SQL Server。
    2. 判断注入类型: 测试分号,发现支持堆叠查询,这意味着可以执行任意SQL语句。
  • 技术细节
    1. 利用存储过程: SQL Server提供了强大的系统存储过程,如xp_cmdshell用于执行操作系统命令。
    2. 开启xp_cmdshell: 默认情况下该功能可能关闭,需通过堆叠查询执行EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;来开启。
    3. 执行命令: 使用EXEC xp_cmdshell 'whoami'执行系统命令。由于是Windows主机且权限较低,可能无法执行某些命令,但curlping等网络命令通常可用,可用于数据外带。
  • 核心要点
    • SQL Server的特性: 堆叠查询+xp_cmdshell是SQL Server注入通往RCE的经典路径。
    • 权限意识: 注入点所处的数据库用户权限决定了利用的上限。

案例二:基于响应差异的布尔盲注

  • 漏洞背景: 对某接口参数进行SQL注入测试时,添加单引号后,页面回显发生变化(非报错),但无明确错误信息。
  • 分析思路
    1. 确认注入点: 输入1''(两个单引号)和1'(一个单引号)时,页面返回内容(如状态码、长度、HTML内容)存在可复现的差异。这表明参数被带入数据库查询,且语法错误导致了不同的返回结果。
    2. 判断注入类型: 由于没有显式报错信息,但存在布尔状态(真/假)的回显差异,故确定为布尔盲注
  • 技术细节
    1. 构造Payload: 利用and 1=1(真)、and 1=2(假)与注入点拼接,观察回显差异,确认“真/假”状态。
    2. 逐位提取数据: 使用substringlen等函数和if/case when条件语句,结合and,通过判断单个字符的真假来逐步推测出数据库名、表名、数据内容。例如:id=1' and ascii(substring(database(),1,1))>100 --+,如果回显为“真”,则说明数据库名第一个字符的ASCII码大于100。
  • 核心要点
    • 关注细微差异: 盲注的成功依赖于对HTTP响应包任何细微差异的敏锐观察。
    • 自动化工具: 布尔盲注过程繁琐,应使用sqlmap等自动化工具或编写自定义脚本进行。

第四章:XSS漏洞的绕过技巧

案例一:通用型XSS Payload绕过WAF

  • 绕过策略由简到繁
    1. 基础探测: 首先尝试最温和的<h1>test</h1>,观察是否被渲染。
    2. 标准Payload: 尝试<script>alert(1)</script>
    3. 编码绕过: 如果script标签被过滤,尝试HTML实体编码、JavaScript Unicode编码等。如:<script>alert(1)</script>
    4. 利用黑名单缺陷: 尝试变体,如<ScRiPt>alert(1)</sCrIpT>、``、<svg onload=alert(1)>
    5. 利用标签属性: 案例中成功的Payload:<a % herf="javascript:alert('a')">aa</a>。这里利用了标签内部属性的特殊解析规则,%和空格可能被WAF错误解析,从而绕过了对href属性中javascript:协议的检测。

案例二:文件上传导致的XSS

  • 漏洞背景: 文件上传功能对文件后缀有严格校验,无法上传.php.jsp等后缀进行getshell。
  • 分析思路
    1. 寻找允许上传的文本类格式: 检查是否允许上传.html.svg.xml.txt等文件。
    2. 测试解析位置: 上传后,文件是被存储到web目录下可通过URL直接访问,还是仅作为附件下载?前者才能构成XSS。
  • 技术细节
    1. 构造恶意文件: 上传一个包含XSS Payload的SVG文件(SVG本质是XML)。
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
      <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="100" height="100">
          <script type="text/javascript">alert('XSS');</script>
      </svg>
      
    2. 利用: 获得此SVG文件的URL后,诱使受害者访问,浏览器会将其作为图像/XML文档解析并执行其中的JavaScript代码。
  • 核心要点
    • 拓宽思路: 文件上传点不仅是命令执行的突破口,也是存储型XSS的常见来源。
    • Content-Type校验: 即使绕过后缀校验,服务端可能还会检查文件的Content-Type,需要对应修改。

总结与反思

  1. 系统性思维: 漏洞挖掘不是孤立的点,而是一个系统性的过程。从信息收集、攻击面分析、到逆向调试、漏洞利用,每一步都至关重要。
  2. 深入理解技术原理: 理解签名、加密、鉴权、数据库、HTTP协议等底层原理,是突破各种防御机制的前提。
  3. 工具只是延伸: 熟练使用工具是必要的,但更重要的是背后的思考。为什么这里会有签名?这个参数可能代表什么?如果我是开发者,我会怎么实现这个功能?
  4. 耐心与积累: 正如原文所言,“漏洞挖掘不是一个一蹴而就的过程”。每一次尝试,无论成功与否,都是宝贵的经验积累。保持好奇心,多角度思考,方能成为破局的关键。

希望这份详尽的教学文档能对您有所帮助,祝您在漏洞挖掘的道路上不断精进!

实战漏洞挖掘高级技巧教学文档 文档说明 本教学文档基于一篇真实的渗透测试经验总结,旨在深入剖析在复杂场景下(如存在签名校验、前端加密、严格WAF等)如何利用系统性的思维和方法挖掘高危漏洞。文档将按照漏洞类型分类,每个案例都包含 漏洞背景、分析思路、技术细节、突破方法 和 总结反思 ,力求还原分析者的思考路径。 第一章:越权漏洞的深入利用 越权漏洞的核心在于 绕过系统对用户权限的验证机制 。本章重点讲解三种非典型的越权场景。 案例一:签名校验绕过导致的水平越权 漏洞背景 : 测试一个小程序时,发现请求接口(如查询用户信息)需要携带 memberid 参数。初步尝试修改 memberid 进行遍历时,请求被拒绝。分析请求包,发现存在一套自定义的安全校验机制,包括时间戳(timestamp)、随机数(nonce)、签名(mac)等字段。 分析思路 : 判断校验点 : 重放请求失败,说明服务端有防重放机制。修改 nonce 后报时间戳错误,修改时间戳后报签名错误,由此确定校验逻辑为:验证时间戳新鲜度 -> 验证 nonce 唯一性 -> 验证 mac 签名正确性。 定位加密逻辑 : 对小程序进行反编译,在得到的源码中,重点查看 app-service.js 文件(通常包含核心业务逻辑和接口调用)。 逆向签名算法 : 在 app-service.js 中全局搜索关键词 mac ,定位到生成签名的JavaScript函数。 技术细节 : 破解时间戳与Nonce : 使用Python脚本动态生成当前时间戳和随机 nonce ,解决前两个校验。 逆向签名函数 : 分析定位到的签名函数,发现其使用特定算法(如HMAC-SHA256)将请求参数(包括 memberid 、时间戳、 nonce 等)和一个 静态密钥(Key) 进行加密生成 mac 。 关键突破 : 该静态密钥(Key)硬编码在前端代码中,可被直接获取。这是因为开发错误地认为前端代码是安全的。 利用过程 : 编写Python脚本,完全模拟前端的签名生成逻辑。 脚本自动生成有效的时间戳、 nonce 和正确的 mac 签名。 通过遍历 memberid 参数,成功越权获取所有用户的敏感信息。 核心要点 : 签名 ≠ 鉴权 : 签名校验旨在保证请求的完整性和不可否认性,但若签名密钥可被攻击者获取,则签名机制形同虚设,无法替代真正的身份鉴权。 前端加密不可信 : 任何置于前端的加密逻辑和密钥都只能起到“防君子”的作用,在逆向工程面前是透明的。 案例二:签名绕过导致的敏感接口泄露与越权 漏洞背景 : 在一个带有Token认证的系统中,发现一个接口 getUserByPhone ,但以低权限身份请求时无信息返回,难以判断是否存在越权。 分析思路 : 扩大攻击面 : 首先尽可能多地收集系统接口。 寻找差异点 : 在测试其他接口时,发现请求失败,原因是请求头中的 digest 字段(签名)校验不通过。这表明该系统对接口访问有统一的签名校验。 逆向签名 : 同样通过反编译前端代码,全局搜索 digest ,定位签名生成函数。 技术细节 : 分析签名算法 : 逆向发现, digest 的生成规则相对简单:将 接口URL路径 和 特定固定参数 按特定格式拼接后,进行MD5哈希并转换为大写。 绕过鉴权 : 由于签名算法不依赖动态或不可获取的密钥,攻击者可以为自己构造的任何请求(包括之前发现的敏感接口 getUserByPhone )生成合法的 digest 。 利用过程 : 编写脚本,自动化生成任意接口请求的合法 digest 签名。 利用此能力,直接访问 getUserByPhone 等敏感接口,通过穷举手机号实现用户信息的越权查询。 核心要点 : 接口鉴权模型 : 系统的鉴权模型应为: 身份认证(Token/Session)→ 接口权限校验 → 数据权限校验 。本案例中,系统只做了第一步,并在第二步使用了脆弱的签名机制,导致越权。 Token不是万能的 : 即使请求携带了合法的Token,如果服务端没有在业务逻辑层严格校验“当前Token身份是否有权访问该接口/该数据”,越权依然会发生。 案例三:JS逆向破解参数加密实现的越权 漏洞背景 : 在测试一个教育证书站时,发现查询用户订单的接口 user/getOrderList 的请求体中的 data 参数被加密。 分析思路 : 定位加密位置 : 使用浏览器开发者工具的“全局搜索”功能,搜索接口URL或关键词,定位到发起请求的JavaScript代码段。 动态调试 : 在疑似加密代码处设置断点,发起请求,使代码执行暂停在断点处。 调用栈分析 : 使用开发者工具的“Call Stack”(调用堆栈)面板,从发起请求的代码 向上回溯 ,找到加密发生的确切函数。 技术细节 : 步进分析 : 通过单步调试(Step Into)深入加密函数内部。 识别加密算法 : 在代码中发现使用了 public key ,从而判断出是RSA非对称加密。 获取密钥 : 密钥(公钥)直接硬编码在前端JS中,可被直接提取。 利用过程 : 从代码中提取RSA公钥。 分析出加密前的明文格式(例如是 userId=123&phone=456 的拼接)。 使用该公钥和相同的加密库(如Python的 cryptography ),编写脚本加密任意 userId 等参数,构造恶意请求,实现越权查询他人订单。 核心要点 : 熟练使用开发者工具 : “全局搜索”、“断点调试”、“调用堆栈”是前端逆向分析的三大神器。 理解加密类型 : 识别是对称加密(AES、DES)还是非对称加密(RSA),对后续的利用脚本编写至关重要。 第二章:未授权访问漏洞 未授权访问是一种特殊的垂直越权,即从无权限用户直接提升为有权限用户。 案例一:HTTP方法滥用导致的未授权操作 漏洞背景 : 在某学校资产系统中,发现一个查看资源状态的接口(如 /api/resource/status ),返回资源详情。 分析思路 : 信息收集 : 这是漏洞挖掘的基础。通过目录扫描、JS文件分析、爬虫等方式尽可能多地收集接口。 测试不同HTTP方法 : 对于发现的接口,不仅测试 GET / POST ,还要测试 PUT 、 DELETE 、 PATCH 等方法。 技术细节 : 方法滥用 : 对 /api/resource/status 接口使用 GET 方法时,只是查看信息。但尝试使用 DELETE 方法时,服务端返回了操作成功的提示,实现了资源的未授权下架。同理, PUT 或 POST 方法可能用于未授权上线资源。 利用过程 : 直接使用Burp Suite等工具,重放请求并修改HTTP方法,观察响应结果,从而实现对系统资源的未授权管控。 核心要点 : RESTful API风险 : 遵循RESTful规范的API会根据HTTP方法来区分操作(GET查,POST增,PUT改,DELETE删)。如果服务端仅根据URL进行权限校验,而忽略了方法,就会导致此类漏洞。 自动化测试 : 可将此测试过程集成到自动化扫描工具中。 案例二:前端响应拦截修改实现认证绕过 漏洞背景 : 一个需要登录的系统,在未登录状态下访问后台,页面会短暂加载后跳转或消失。 分析思路 : 推测机制 : 这种现象通常是前端JavaScript在页面加载后,通过异步请求验证身份,验证失败则执行跳转。 拦截响应 : 使用Burp Suite等代理工具的“拦截响应”(Intercept response)功能,在身份验证的JS代码返回时将其截获。 技术细节 : 分析响应包 : 在拦截到的HTML或JS响应体中,查找负责认证和跳转的代码段。例如,可能有一个 setTimeout 函数在5秒后执行跳转检查。 修改逻辑 : 修改响应体,可以有两种方式: 删除跳转代码 : 直接删除或注释掉负责跳转的JavaScript代码。 延长定时器 : 将 setTimeout 的时间从 5000 (5秒)改为一个极大的值(如 5000000 ),为操作争取足够时间。 利用过程 : 拦截并修改响应包后,放行。浏览器将加载被“阉割”或“延迟”了认证逻辑的页面,从而允许未授权用户进入后台进行操作。 核心要点 : 前端校验不可信 : 与前端加密一样,前端进行的身份认证和权限控制可以被绕过。一切校验必须在服务端完成。 善用代理工具 : “拦截响应”是一个常被忽略但极其强大的功能,可用于绕过客户端限制。 第三章:SQL注入漏洞 案例一:SQL Server注入与命令执行(RCE) 漏洞背景 : 在某政府系统的人员信息添加功能中,对JSON参数尝试闭合时产生数据库报错。 分析思路 : 识别数据库 : 根据报错信息特征(如 Microsoft OLE DB Provider for SQL Server )确认数据库为SQL Server。 判断注入类型 : 测试分号 ; ,发现支持 堆叠查询 ,这意味着可以执行任意SQL语句。 技术细节 : 利用存储过程 : SQL Server提供了强大的系统存储过程,如 xp_cmdshell 用于执行操作系统命令。 开启 xp_cmdshell : 默认情况下该功能可能关闭,需通过堆叠查询执行 EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE; 来开启。 执行命令 : 使用 EXEC xp_cmdshell 'whoami' 执行系统命令。由于是Windows主机且权限较低,可能无法执行某些命令,但 curl 、 ping 等网络命令通常可用,可用于数据外带。 核心要点 : SQL Server的特性 : 堆叠查询+ xp_cmdshell 是SQL Server注入通往RCE的经典路径。 权限意识 : 注入点所处的数据库用户权限决定了利用的上限。 案例二:基于响应差异的布尔盲注 漏洞背景 : 对某接口参数进行SQL注入测试时,添加单引号后,页面回显发生变化(非报错),但无明确错误信息。 分析思路 : 确认注入点 : 输入 1'' (两个单引号)和 1' (一个单引号)时,页面返回内容(如状态码、长度、HTML内容)存在可复现的差异。这表明参数被带入数据库查询,且语法错误导致了不同的返回结果。 判断注入类型 : 由于没有显式报错信息,但存在布尔状态(真/假)的回显差异,故确定为 布尔盲注 。 技术细节 : 构造Payload : 利用 and 1=1 (真)、 and 1=2 (假)与注入点拼接,观察回显差异,确认“真/假”状态。 逐位提取数据 : 使用 substring 、 len 等函数和 if / case when 条件语句,结合 and ,通过判断单个字符的真假来逐步推测出数据库名、表名、数据内容。例如: id=1' and ascii(substring(database(),1,1))>100 --+ ,如果回显为“真”,则说明数据库名第一个字符的ASCII码大于100。 核心要点 : 关注细微差异 : 盲注的成功依赖于对HTTP响应包任何细微差异的敏锐观察。 自动化工具 : 布尔盲注过程繁琐,应使用 sqlmap 等自动化工具或编写自定义脚本进行。 第四章:XSS漏洞的绕过技巧 案例一:通用型XSS Payload绕过WAF 绕过策略由简到繁 : 基础探测 : 首先尝试最温和的 <h1>test</h1> ,观察是否被渲染。 标准Payload : 尝试 <script>alert(1)</script> 。 编码绕过 : 如果 script 标签被过滤,尝试HTML实体编码、JavaScript Unicode编码等。如: <script>alert(1)</script> 。 利用 黑名单缺陷 : 尝试变体,如 <ScRiPt>alert(1)</sCrIpT> 、 ``、 <svg onload=alert(1)> 。 利用标签属性 : 案例中成功的Payload: <a % herf="javascript:alert('a')">aa</a> 。这里利用了标签内部属性的特殊解析规则, % 和空格可能被WAF错误解析,从而绕过了对 href 属性中 javascript: 协议的检测。 案例二:文件上传导致的XSS 漏洞背景 : 文件上传功能对文件后缀有严格校验,无法上传 .php 、 .jsp 等后缀进行getshell。 分析思路 : 寻找允许上传的文本类格式 : 检查是否允许上传 .html 、 .svg 、 .xml 、 .txt 等文件。 测试解析位置 : 上传后,文件是被存储到web目录下可通过URL直接访问,还是仅作为附件下载?前者才能构成XSS。 技术细节 : 构造恶意文件 : 上传一个包含XSS Payload的SVG文件(SVG本质是XML)。 利用 : 获得此SVG文件的URL后,诱使受害者访问,浏览器会将其作为图像/XML文档解析并执行其中的JavaScript代码。 核心要点 : 拓宽思路 : 文件上传点不仅是命令执行的突破口,也是存储型XSS的常见来源。 Content-Type校验 : 即使绕过后缀校验,服务端可能还会检查文件的 Content-Type ,需要对应修改。 总结与反思 系统性思维 : 漏洞挖掘不是孤立的点,而是一个系统性的过程。从信息收集、攻击面分析、到逆向调试、漏洞利用,每一步都至关重要。 深入理解技术原理 : 理解签名、加密、鉴权、数据库、HTTP协议等底层原理,是突破各种防御机制的前提。 工具只是延伸 : 熟练使用工具是必要的,但更重要的是背后的思考。为什么这里会有签名?这个参数可能代表什么?如果我是开发者,我会怎么实现这个功能? 耐心与积累 : 正如原文所言,“漏洞挖掘不是一个一蹴而就的过程”。每一次尝试,无论成功与否,都是宝贵的经验积累。保持好奇心,多角度思考,方能成为破局的关键。 希望这份详尽的教学文档能对您有所帮助,祝您在漏洞挖掘的道路上不断精进!