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