一次edu的渗透测试记录
字数 1203 2025-08-20 18:18:23

教育系统渗透测试实战教学文档

信息收集阶段

默认凭证获取

  1. 官网操作手册分析:通过查阅目标教育系统的官方操作手册,发现系统存在默认密码设置
  2. 谷歌语法利用:使用Google搜索语法查找包含姓名和学号的公开信息
    • 技巧:使用较为稀有的姓名进行搜索,减少结果干扰
  3. 凭证组合:将获取的身份证信息与默认密码组合尝试登录系统

漏洞挖掘

XSS漏洞测试

  1. 测试方法:对所有输入点进行测试,插入XSS payload
  2. 发现结果:多个输入点存在跨站脚本漏洞

SQL注入漏洞深入分析

初步探测

  1. 测试点:statusCode字段
  2. 报错测试
    • 单引号'触发报错
    • 两个单引号''恢复正常
  3. 函数测试
    • exp(709)正常返回
    • exp(710)触发异常
    • 初步判断为Oracle数据库

防御机制分析

  1. 拦截规则观察
    • decode函数显示特殊字符被拦截
    • case when结构触发异常但未被直接拦截
    • 推测WAF规则:在检测到逗号、等号等特殊字符后添加干扰字符

绕过技术

  1. 字符串连接绕过
    • 使用||连接符替代逗号
    • 测试payload:'||case 1 when 1 then 1 else 1 end||'成功执行
  2. 条件盲注构造
    • 修改payload为:'||case user when 1 then 1 else exp(710) end||'
    • 原理:只有当user条件满足时才返回正常结果

数据库类型识别

  1. 函数兼容性测试
    • user函数可用,返回长度为8
    • substring函数异常
    • 重新判断可能为PostgreSQL数据库
  2. PostgreSQL特性利用
    • position函数可用且不受限制
    • 语法:position('substr' in 'string')
    • 示例:
      • position('sql' in 'postgresql') → 8
      • position('p' in 'postgresql') → 1

数据提取技术

  1. 逐字符爆破
    • 构造条件判断特定字符位置
    • 示例payload:判断第一位字符
      '||case position('a' in user) when 1 then 1 else exp(710) end||'
      
    • 结果分析:
      • 返回异常表示字符不在第一位
      • 返回正常表示字符匹配
  2. 自动化爆破流程
    • 依次测试a-z字符
    • 发现第一位为'c'
    • 重复流程获取完整字段值

关键知识点总结

  1. 信息收集技巧

    • 官方文档是重要信息来源
    • Google语法精确定位敏感信息
  2. SQL注入高级技巧

    • WAF规则分析与绕过
    • 无逗号注入技术
    • 数据库指纹识别方法
  3. PostgreSQL特定注入

    • position函数的优势利用
    • 布尔盲注与条件响应结合
  4. 自动化测试思路

    • 系统化字符爆破流程
    • 响应差异分析技术

防御建议

  1. 输入验证

    • 实施严格的输入过滤
    • 使用参数化查询
  2. 错误处理

    • 统一错误页面
    • 避免详细错误信息泄露
  3. 认证安全

    • 禁用默认凭证
    • 实施强密码策略
  4. WAF优化

    • 更新规则库
    • 防御无逗号注入技术
教育系统渗透测试实战教学文档 信息收集阶段 默认凭证获取 官网操作手册分析 :通过查阅目标教育系统的官方操作手册,发现系统存在默认密码设置 谷歌语法利用 :使用Google搜索语法查找包含姓名和学号的公开信息 技巧:使用较为稀有的姓名进行搜索,减少结果干扰 凭证组合 :将获取的身份证信息与默认密码组合尝试登录系统 漏洞挖掘 XSS漏洞测试 测试方法 :对所有输入点进行测试,插入XSS payload 发现结果 :多个输入点存在跨站脚本漏洞 SQL注入漏洞深入分析 初步探测 测试点 :statusCode字段 报错测试 : 单引号 ' 触发报错 两个单引号 '' 恢复正常 函数测试 : exp(709) 正常返回 exp(710) 触发异常 初步判断为Oracle数据库 防御机制分析 拦截规则观察 : decode 函数显示特殊字符被拦截 case when 结构触发异常但未被直接拦截 推测WAF规则:在检测到逗号、等号等特殊字符后添加干扰字符 绕过技术 字符串连接绕过 : 使用 || 连接符替代逗号 测试payload: '||case 1 when 1 then 1 else 1 end||' 成功执行 条件盲注构造 : 修改payload为: '||case user when 1 then 1 else exp(710) end||' 原理:只有当user条件满足时才返回正常结果 数据库类型识别 函数兼容性测试 : user 函数可用,返回长度为8 substring 函数异常 重新判断可能为PostgreSQL数据库 PostgreSQL特性利用 : position 函数可用且不受限制 语法: position('substr' in 'string') 示例: position('sql' in 'postgresql') → 8 position('p' in 'postgresql') → 1 数据提取技术 逐字符爆破 : 构造条件判断特定字符位置 示例payload:判断第一位字符 结果分析: 返回异常表示字符不在第一位 返回正常表示字符匹配 自动化爆破流程 : 依次测试a-z字符 发现第一位为'c' 重复流程获取完整字段值 关键知识点总结 信息收集技巧 : 官方文档是重要信息来源 Google语法精确定位敏感信息 SQL注入高级技巧 : WAF规则分析与绕过 无逗号注入技术 数据库指纹识别方法 PostgreSQL特定注入 : position 函数的优势利用 布尔盲注与条件响应结合 自动化测试思路 : 系统化字符爆破流程 响应差异分析技术 防御建议 输入验证 : 实施严格的输入过滤 使用参数化查询 错误处理 : 统一错误页面 避免详细错误信息泄露 认证安全 : 禁用默认凭证 实施强密码策略 WAF优化 : 更新规则库 防御无逗号注入技术