渗透测试 | 黑白盒某门诊挂号漏洞挖掘经验分享
字数 1139 2025-08-19 12:40:36

SQL注入与XSS漏洞挖掘实战教学文档

1. SQL注入漏洞挖掘

1.1 基础SQL注入检测

原理:通过构造特殊输入改变SQL查询逻辑,获取未授权数据访问

检测方法

  1. 在POST请求体中寻找ID或User等参数
  2. 使用真/假条件测试:
    • patient_id=5'and'1'='1 (始终为真条件)
    • patient_id=5'and'1'='2 (始终为假条件)

判断依据

  • 真条件返回正常结果 → 可能存在注入漏洞
  • 假条件返回错误信息 → 确认存在注入漏洞

1.2 时间盲注技术

适用场景:当应用不直接返回错误信息时

测试方法

  1. 使用延迟函数:
    • patient_id=5' or sleep(5)--+
    • patient_id=5' and sleep(5)--+

注意事项

  • OR和AND优先级不同会影响结果
  • 延迟可能不精确为5秒,但应有明显延迟
  • 其他可用函数:BENCHMARK(), WAITFOR DELAY

技术要点

  • --+是注释符,确保后续查询部分被忽略
  • 优先测试常用函数,再尝试其他函数

2. 代码层面分析

2.1 漏洞代码示例

//获取患者档案
function getUserInfo() {
    var patient_id=$("#patient_id").val();
    if(patient_id>0){
        $.post('/Doctor/getUserInfo',{patient_id:patient_id},function (res) {
            if(res.status==0){
                if(res.data.file_id>0){
                    var d=res.data;
                    var txt='<dt class="whiteBg">体重:'+d.weight+'kg<span class="r">身高:'+d.height+'cm</span><br>\n'
                    + '血型:'+d.blood_a+'<span class="r">RH'+d.blood_b+'</span><br>\n'
                    + '左耳听力:'+d.left_ear_hearing+'<span class="r">右耳听力:'+d.right_ear_hearing+'</span><br>\n'
                    + '左眼视力:'+d.left_vision+'<span class="r">右眼视力:'+d.right_vision+'</span></dt>\n'
                    + '<dd>个人史:'+d.personal_info+'</dd>\n'
                    + '<dd>家族史:'+d.family_info+'</dd>\n'
                    + '<dd>身*证:'+d.id_card+'</dd>\n'
                    + '<dd>紧急联系人:'+d.emergency_contact_name+'<span class="r">关系:'+ d.emergency_contact_relation_label+'</span></dd>\n'
                    + '<dd>电话:'+d.emergency_contact_mobile+'</dd>';
                    $("#user_file_box").html(txt);
                }else{

问题点

  1. 直接拼接用户输入的patient_id到SQL查询
  2. 未对返回数据进行过滤直接输出到HTML

3. XSS漏洞挖掘

3.1 反射型XSS测试

测试方法

  1. 寻找输出用户输入的参数
  2. 测试基本XSS payload:
    • <script>alert(1)</script>
    • ``

现代浏览器防护

  • 内置XSS过滤器可能阻止简单payload
  • 需要测试绕过技术

3.2 输出上下文分析

关键点

  1. 数据输出在HTML标签属性中
  2. 数据输出在JavaScript代码中
  3. 数据输出在HTML注释中

测试技巧

  • 闭合当前上下文
  • 测试各种编码方式
  • 利用DOM-based XSS技术

4. 防护措施

4.1 SQL注入防护

  1. 使用参数化查询/预处理语句
  2. 实施最小权限原则
  3. 输入验证和过滤
  4. 使用ORM框架

4.2 XSS防护

  1. 输出编码:
    • HTML实体编码
    • JavaScript编码
    • URL编码
  2. 使用CSP策略
  3. 设置HttpOnly标志
  4. 输入验证和过滤

5. 漏洞挖掘工具与技巧

5.1 工具使用

  1. Seay审计工具(注意规则更新)
  2. Burp Suite
  3. SQLMap
  4. XSS Hunter

5.2 手工测试技巧

  1. Fuzz测试技术
  2. 边界条件测试
  3. 异常输入测试
  4. 逻辑漏洞挖掘

6. 实战总结

  1. 工具扫描+手工验证结合
  2. 关注ID/User等关键参数
  3. 多种注入技术组合测试
  4. 代码审计与黑盒测试互补
  5. 持续更新测试payload库

通过掌握这些技术和方法,安全测试人员可以更有效地发现和验证SQL注入与XSS漏洞,提升应用安全性。

SQL注入与XSS漏洞挖掘实战教学文档 1. SQL注入漏洞挖掘 1.1 基础SQL注入检测 原理 :通过构造特殊输入改变SQL查询逻辑,获取未授权数据访问 检测方法 : 在POST请求体中寻找ID或User等参数 使用真/假条件测试: patient_id=5'and'1'='1 (始终为真条件) patient_id=5'and'1'='2 (始终为假条件) 判断依据 : 真条件返回正常结果 → 可能存在注入漏洞 假条件返回错误信息 → 确认存在注入漏洞 1.2 时间盲注技术 适用场景 :当应用不直接返回错误信息时 测试方法 : 使用延迟函数: patient_id=5' or sleep(5)--+ patient_id=5' and sleep(5)--+ 注意事项 : OR和AND优先级不同会影响结果 延迟可能不精确为5秒,但应有明显延迟 其他可用函数: BENCHMARK() , WAITFOR DELAY 技术要点 : --+ 是注释符,确保后续查询部分被忽略 优先测试常用函数,再尝试其他函数 2. 代码层面分析 2.1 漏洞代码示例 问题点 : 直接拼接用户输入的patient_ id到SQL查询 未对返回数据进行过滤直接输出到HTML 3. XSS漏洞挖掘 3.1 反射型XSS测试 测试方法 : 寻找输出用户输入的参数 测试基本XSS payload: <script>alert(1)</script> `` 现代浏览器防护 : 内置XSS过滤器可能阻止简单payload 需要测试绕过技术 3.2 输出上下文分析 关键点 : 数据输出在HTML标签属性中 数据输出在JavaScript代码中 数据输出在HTML注释中 测试技巧 : 闭合当前上下文 测试各种编码方式 利用DOM-based XSS技术 4. 防护措施 4.1 SQL注入防护 使用参数化查询/预处理语句 实施最小权限原则 输入验证和过滤 使用ORM框架 4.2 XSS防护 输出编码: HTML实体编码 JavaScript编码 URL编码 使用CSP策略 设置HttpOnly标志 输入验证和过滤 5. 漏洞挖掘工具与技巧 5.1 工具使用 Seay审计工具(注意规则更新) Burp Suite SQLMap XSS Hunter 5.2 手工测试技巧 Fuzz测试技术 边界条件测试 异常输入测试 逻辑漏洞挖掘 6. 实战总结 工具扫描+手工验证结合 关注ID/User等关键参数 多种注入技术组合测试 代码审计与黑盒测试互补 持续更新测试payload库 通过掌握这些技术和方法,安全测试人员可以更有效地发现和验证SQL注入与XSS漏洞,提升应用安全性。