一次SQL注入到代码审计之路
字数 1139 2025-08-15 21:30:49

SQL注入到代码审计实战教学文档

一、SQL注入漏洞发现

1. 寻找注入点

  • 目标:信息查询框(通常与数据库交互)
  • 测试方法:
    1. 输入数字1:正常返回"未查询到相关信息"
    2. 输入1':无任何输出,初步判断存在SQL注入
    3. 构造闭合语句确认:1' #(成功执行)

2. 推测SQL语句

select * from A where id ='$_POST['id']';
  • 漏洞原因:未对用户输入进行任何过滤

二、使用sqlmap自动化测试

1. 基本使用

  • 保存数据包到文件后执行:
sqlmap -r request.txt
  • 发现51个数据库

2. 获取敏感信息

  • 查询到后台账号密码

三、后台寻找技巧

1. 常规方法

  • 检查robots.txt文件
  • 发现是PHPCMS系统
  • 尝试通用后台地址:
    • admin.php
    • m=admin&c=index&a=login

2. 遇到问题

  • 访问被重定向到首页
  • 说明开发者做了安全修改

四、漏洞利用进阶

1. 尝试已知漏洞

  • 测试已公开的PHPCMS漏洞均失败

2. 使用sqlmap高级功能

sqlmap --os-shell
  • 前提条件:需要知道网站绝对路径

3. 获取网站路径

  1. 确定中间件为Nginx
  2. 尝试读取配置文件:
    • /usr/local/nginx/conf/nginx.conf
    • /usr/local/nginx/conf/vhost/网站域名.conf
  3. 使用sqlmap读取:
sqlmap --file-read=/path/to/config

五、源码审计技巧

1. 关键文件读取

  1. 路由文件:
    • caches\configs\route.php
  2. 系统配置文件:
    • caches\configs\system.php
  3. 控制器文件:
    • phpcms\modules\admin\index.php

2. 发现二次开发

  • 存在MY_index.php控制器
  • 检查发现构造函数中有权限验证:
if(empty($_SESSION['right_enter'])) {
    header("Location: /");
}

六、旁路渗透方法

1. 多站点分析

  • 51个网站使用相同数据库结构
  • 发现8080端口运行DedeCMS
  • 利用已知DedeCMS后台密码上传文件

七、代码审计深入

1. PHPCMS二次开发机制

  • MVC结构
  • 二次开发需创建MY_*.php文件
  • 程序会优先执行MY_*.php中的代码

2. 绕过登录限制

  • 找到可设置$_SESSION['right_enter']=1的文件
  • 执行后跳转到登录界面

八、防御建议

  1. 输入过滤:

    • 对所有用户输入进行转义和过滤
    • 使用预处理语句
  2. 权限控制:

    • 最小权限原则
    • 数据库用户仅需必要权限
  3. 错误处理:

    • 自定义错误页面
    • 不显示详细错误信息
  4. 会话安全:

    • 关键操作使用多重验证
    • 会话变量不可预测
  5. 文件权限:

    • 配置文件不可通过web访问
    • 限制写入权限
  6. 定期审计:

    • 代码安全审计
    • 渗透测试
  7. 系统更新:

    • 及时修补已知漏洞
    • 禁用不必要功能

本教学文档详细记录了从SQL注入发现到代码审计的完整过程,涵盖了渗透测试中的关键技术和思路,同时提供了相应的防御措施。

SQL注入到代码审计实战教学文档 一、SQL注入漏洞发现 1. 寻找注入点 目标:信息查询框(通常与数据库交互) 测试方法: 输入数字 1 :正常返回"未查询到相关信息" 输入 1' :无任何输出,初步判断存在SQL注入 构造闭合语句确认: 1' # (成功执行) 2. 推测SQL语句 漏洞原因:未对用户输入进行任何过滤 二、使用sqlmap自动化测试 1. 基本使用 保存数据包到文件后执行: 发现51个数据库 2. 获取敏感信息 查询到后台账号密码 三、后台寻找技巧 1. 常规方法 检查robots.txt文件 发现是PHPCMS系统 尝试通用后台地址: admin.php m=admin&c=index&a=login 2. 遇到问题 访问被重定向到首页 说明开发者做了安全修改 四、漏洞利用进阶 1. 尝试已知漏洞 测试已公开的PHPCMS漏洞均失败 2. 使用sqlmap高级功能 前提条件:需要知道网站绝对路径 3. 获取网站路径 确定中间件为Nginx 尝试读取配置文件: /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/vhost/网站域名.conf 使用sqlmap读取: 五、源码审计技巧 1. 关键文件读取 路由文件: caches\configs\route.php 系统配置文件: caches\configs\system.php 控制器文件: phpcms\modules\admin\index.php 2. 发现二次开发 存在 MY_index.php 控制器 检查发现构造函数中有权限验证: 六、旁路渗透方法 1. 多站点分析 51个网站使用相同数据库结构 发现8080端口运行DedeCMS 利用已知DedeCMS后台密码上传文件 七、代码审计深入 1. PHPCMS二次开发机制 MVC结构 二次开发需创建 MY_*.php 文件 程序会优先执行 MY_*.php 中的代码 2. 绕过登录限制 找到可设置 $_SESSION['right_enter']=1 的文件 执行后跳转到登录界面 八、防御建议 输入过滤: 对所有用户输入进行转义和过滤 使用预处理语句 权限控制: 最小权限原则 数据库用户仅需必要权限 错误处理: 自定义错误页面 不显示详细错误信息 会话安全: 关键操作使用多重验证 会话变量不可预测 文件权限: 配置文件不可通过web访问 限制写入权限 定期审计: 代码安全审计 渗透测试 系统更新: 及时修补已知漏洞 禁用不必要功能 本教学文档详细记录了从SQL注入发现到代码审计的完整过程,涵盖了渗透测试中的关键技术和思路,同时提供了相应的防御措施。