记一次新手入门级别的代码审计
字数 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] // 表名前缀变量未经过滤直接使用

漏洞分析:

  1. 安装过程中,$n[5]作为表名前缀直接拼接进SQL语句执行
  2. 该变量未进行任何过滤处理
  3. 可尝试构造恶意表名前缀进行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])

漏洞利用:

  1. $n[5]变量未过滤直接写入配置文件
  2. 可构造Payload闭合前文并注入PHP代码:
    phpinfo();//"
    
  3. 成功写入后访问config.php可执行任意PHP代码

绕过技巧:

  • 需要绕过json_decode函数处理
  • 最终有效Payload: phpinfo();//"

0x02 后台登录分析

2.1 加密函数分析

文件: common.php

函数分析:

  1. Dec函数用于解密配置
  2. 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 直接上传绕过

分析:

  1. 系统对上传文件类型有严格限制
  2. 无法直接上传PHP文件getshell

3.2 文件重命名漏洞

利用步骤:

  1. 先上传一个合法文件(如图片)
  2. 通过修改POST请求中的文件名参数
  3. 将文件名改为.php后缀
  4. 成功获取webshell

0x04 任意文件删除漏洞

漏洞位置: 文件删除功能

利用方法:

  1. 构造删除请求,修改dir参数
  2. 使用路径穿越删除任意文件:
    dir=./../ 
    
  3. 可删除网站根目录下任意文件

漏洞原因:

  • 删除操作未做任何路径检查和过滤
  • 可直接指定绝对路径或使用路径穿越符

0x05 审计总结

发现漏洞列表

  1. 安装过程SQL注入(未完全验证)
  2. 配置文件写入导致代码执行
  3. 文件上传+重命名getshell
  4. 任意文件删除

审计建议

  1. 对所有用户输入进行严格过滤
  2. 文件操作应限制在指定目录内
  3. 上传文件应校验内容和后缀
  4. 敏感操作(如安装)完成后应彻底禁用

学习要点

  1. 代码审计应先功能测试再代码分析
  2. 重点关注用户输入点和敏感函数
  3. 善用调试工具(Xdebug+Burp)
  4. 注意二次漏洞的利用(如文件上传后重命名)

本审计案例展示了从安装到后台的完整漏洞链,适合新手学习基础代码审计方法和漏洞挖掘思路。

金微手机商城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] 作为表名前缀直接拼接进SQL语句执行 该变量未进行任何过滤处理 可尝试构造恶意表名前缀进行SQL注入 调试技巧 : 注释掉 rename("install.php","install.bak"); 以便重复调试 使用Xdebug+Burp组合进行调试 1.2 配置文件写入漏洞 漏洞代码 : 漏洞利用 : $n[5] 变量未过滤直接写入配置文件 可构造Payload闭合前文并注入PHP代码: 成功写入后访问 config.php 可执行任意PHP代码 绕过技巧 : 需要绕过 json_decode 函数处理 最终有效Payload: phpinfo();//" 0x02 后台登录分析 2.1 加密函数分析 文件 : common.php 函数分析 : Dec 函数用于解密配置 Rpl 函数提供安全过滤: 对危险字符进行实体编码转换 起到防注入作用 2.2 登录SQL语句分析 文件 : admin.php SQL结构 : Np 参数会经过MD5加密 由于 Rpl 函数过滤,常规SQL注入难以成功 0x03 文件上传漏洞 3.1 直接上传绕过 分析 : 系统对上传文件类型有严格限制 无法直接上传PHP文件getshell 3.2 文件重命名漏洞 利用步骤 : 先上传一个合法文件(如图片) 通过修改POST请求中的文件名参数 将文件名改为 .php 后缀 成功获取webshell 0x04 任意文件删除漏洞 漏洞位置 : 文件删除功能 利用方法 : 构造删除请求,修改 dir 参数 使用路径穿越删除任意文件: 可删除网站根目录下任意文件 漏洞原因 : 删除操作未做任何路径检查和过滤 可直接指定绝对路径或使用路径穿越符 0x05 审计总结 发现漏洞列表 安装过程SQL注入(未完全验证) 配置文件写入导致代码执行 文件上传+重命名getshell 任意文件删除 审计建议 对所有用户输入进行严格过滤 文件操作应限制在指定目录内 上传文件应校验内容和后缀 敏感操作(如安装)完成后应彻底禁用 学习要点 代码审计应先功能测试再代码分析 重点关注用户输入点和敏感函数 善用调试工具(Xdebug+Burp) 注意二次漏洞的利用(如文件上传后重命名) 本审计案例展示了从安装到后台的完整漏洞链,适合新手学习基础代码审计方法和漏洞挖掘思路。