记一次新手入门级别的代码审计
字数 1201 2025-08-18 11:35:59
金微手机商城V0.3.7代码审计教学文档
0x00 环境准备
目标系统: 金微手机商城 V0.3.7版本
下载地址: http://www.igoldway.com/
审计工具:
- Phpstudy (本地PHP环境)
- Burp Suite (抓包分析)
- PhpStorm + Xdebug (代码调试)
0x01 安装文件漏洞分析
1.1 SQL注入漏洞
文件: install.php
漏洞点:
$n[5] // 表名前缀变量未经过滤直接使用
漏洞分析:
- 安装过程中,
$n[5]作为表名前缀直接拼接进SQL语句执行 - 该变量未进行任何过滤处理
- 可尝试构造恶意表名前缀进行SQL注入
调试技巧:
- 注释掉
rename("install.php","install.bak");以便重复调试 - 使用Xdebug+Burp组合进行调试
1.2 配置文件写入漏洞
漏洞代码:
file_put_contents('config.php','<?php'.PHP_EOL.'$cfg=\'{"DB":{"host":"'.$n[1].'","user":"'.$n[2].'","pass":"'.$n[3].'","name":"'.$n[4].'","pre":"'.$n[5].'"},"An":"金微手机商城","Aw":"'.str_replace(n[9])
漏洞利用:
$n[5]变量未过滤直接写入配置文件- 可构造Payload闭合前文并注入PHP代码:
phpinfo();//" - 成功写入后访问
config.php可执行任意PHP代码
绕过技巧:
- 需要绕过
json_decode函数处理 - 最终有效Payload:
phpinfo();//"
0x02 后台登录分析
2.1 加密函数分析
文件: common.php
函数分析:
Dec函数用于解密配置Rpl函数提供安全过滤:- 对危险字符进行实体编码转换
- 起到防注入作用
2.2 登录SQL语句分析
文件: admin.php
SQL结构:
Select ID,Nr From Jms_admin where Nm='admin' And Np='123'
Np参数会经过MD5加密- 由于
Rpl函数过滤,常规SQL注入难以成功
0x03 文件上传漏洞
3.1 直接上传绕过
分析:
- 系统对上传文件类型有严格限制
- 无法直接上传PHP文件getshell
3.2 文件重命名漏洞
利用步骤:
- 先上传一个合法文件(如图片)
- 通过修改POST请求中的文件名参数
- 将文件名改为
.php后缀 - 成功获取webshell
0x04 任意文件删除漏洞
漏洞位置: 文件删除功能
利用方法:
- 构造删除请求,修改
dir参数 - 使用路径穿越删除任意文件:
dir=./../ - 可删除网站根目录下任意文件
漏洞原因:
- 删除操作未做任何路径检查和过滤
- 可直接指定绝对路径或使用路径穿越符
0x05 审计总结
发现漏洞列表
- 安装过程SQL注入(未完全验证)
- 配置文件写入导致代码执行
- 文件上传+重命名getshell
- 任意文件删除
审计建议
- 对所有用户输入进行严格过滤
- 文件操作应限制在指定目录内
- 上传文件应校验内容和后缀
- 敏感操作(如安装)完成后应彻底禁用
学习要点
- 代码审计应先功能测试再代码分析
- 重点关注用户输入点和敏感函数
- 善用调试工具(Xdebug+Burp)
- 注意二次漏洞的利用(如文件上传后重命名)
本审计案例展示了从安装到后台的完整漏洞链,适合新手学习基础代码审计方法和漏洞挖掘思路。