代码审计入门实战
字数 1565 2025-08-18 11:37:11

代码审计入门实战教学文档

一、审计技巧与准备

1.1 基础要求

  • 熟悉常见漏洞类型及其特征
  • 掌握自动化审计工具的使用方法
  • 熟练使用安全验证工具:BurpSuite、sqlmap、Python脚本等

1.2 审计心态与策略

  • 状态不佳时应暂停审计工作,保持高效
  • 初期建议选择小型CMS系统进行审计练习
  • 通过动手实践而非单纯阅读来积累经验
  • 重点关注漏洞发生的位置和上下文环境

二、审计流程与方法

2.1 工具辅助审计

  1. 使用Seay源代码审计系统

    • 导入项目源码
    • 执行自动审计
    • 分析扫描报告,重点验证可疑点
  2. 全局搜索定位

    • 使用软件内置的全局搜索功能
    • 或使用Linux grep命令:
      grep -Rni "function upload(" /path/to/project
      
      参数说明:
      • -R:递归搜索
      • -n:显示行号
      • -i:忽略大小写
  3. 数据库监控

    • 使用插件监控程序数据库操作
    • 测试构造恶意SQL语句

2.2 人工审计重点

  • 逻辑漏洞:自动化工具难以发现,需人工分析
  • 越权漏洞:需熟悉功能逻辑,特别是用户相关操作
  • 黑盒测试结合:使用BurpSuite分析请求参数,寻找可伪造的关键参数

三、典型漏洞案例分析

3.1 PHPCMS v9逻辑漏洞(备份文件名可猜测)

漏洞原理

  • 利用Windows API FindFirstFile特性
  • 使用<>符号进行文件路径模糊匹配
  • 可爆破备份文件路径

漏洞代码

$fontfile = isset($_GET['font']) && !empty($_GET['font']) ? $fontpath.trim($_GET['font']) : $fontpath.'georgia.ttf';
if(file_exists($fontfile)){
    // 漏洞触发点
}

利用脚本(Python示例):

import requests
import itertools

characters = "abcdefghjklmnopqrstuvwxyz0123456789_!#"
backup_sql = ""
payload = "/api.php?op=creatimg&txt=mochazz&font=caches/bakup/default/{location}<<"
url = "http://target.com"

# 爆破逻辑实现...

3.2 蝉知CMS缓存文件代码注入

漏洞原理

  • 未过滤$_SERVER['SCRIPT_NAME']输入
  • 恶意代码被写入缓存文件

利用方式

http://target.com/index.php/product/c7.html/'>"><script language='php'>phpinfo();</script><!--

定位技巧

  • 使用WebShellKill等工具监控文件写入操作

3.3 织梦CMS后台任意文件名修改

漏洞文件dede/file_manage_control.php

漏洞代码

$fmdo = $_GET['fmdo'];
if($fmdo == 'rename') {
    $fileManagement->RenameFile($oldfilename, $newfilename);
}

利用方式

/dede/file_manage_control.php?fmdo=rename&oldfilename=path/to/file&newfilename=path/to/shell.php

组合攻击

  1. 利用前台上传点获取文件路径
  2. 构造恶意URL并缩短
  3. 社工管理员点击

四、安全开发规范

4.1 全局配置

  • 关闭register_globals
  • 明确使用超全局数组:$_GET$_POST$_COOKIE

4.2 错误处理

  • 关闭display_errors
  • 开启log_errors
  • 指定error_log路径

4.3 输入过滤

三步骤

  1. 变量识别:明确来源、用途和去向
  2. 变量过滤:根据用途选择适当过滤方式
  3. 变量处理:区分合法与非法数据处理

4.4 数据限制

  • 限制数据长度
  • 限制提交频率
  • 防止DOS/溢出攻击

4.5 后台验证

  • 强制验证关键操作
  • 使用强验证码机制
  • 防止接口滥用

4.6 特定漏洞防护

漏洞类型 防护措施
SQL注入 magic_quotes_gpc、预编译、mysql_real_escape_string()
XSS strip_tags()htmlspecialchars()
命令执行 escapeshellarg()escapeshellcmd()
文件操作 过滤..\/等路径字符

五、实用命令速查

  1. 快速定位函数/类

    grep -Rni "function func_name" /path
    grep -Rni "class ClassName" /path
    
  2. 数据库监控

    • 使用MySQL查询日志
    • 或专用数据库监控插件
  3. 文件监控

    • Linux: inotifywait
    • Windows: 专用文件监控工具

六、学习建议

  1. 循序渐进:从简单CMS开始,逐步挑战复杂系统
  2. 实践为主:复现已知漏洞,理解原理
  3. 工具辅助:合理使用自动化工具提高效率
  4. 关注上下文:漏洞往往存在于特定环境组合中
  5. 保持更新:跟踪最新漏洞报告和审计技术

通过系统性地掌握这些知识要点和实践方法,您将能够有效地开展代码审计工作,发现潜在的安全风险。

代码审计入门实战教学文档 一、审计技巧与准备 1.1 基础要求 熟悉常见漏洞类型及其特征 掌握自动化审计工具的使用方法 熟练使用安全验证工具:BurpSuite、sqlmap、Python脚本等 1.2 审计心态与策略 状态不佳时应暂停审计工作,保持高效 初期建议选择小型CMS系统进行审计练习 通过动手实践而非单纯阅读来积累经验 重点关注漏洞发生的位置和上下文环境 二、审计流程与方法 2.1 工具辅助审计 使用Seay源代码审计系统 : 导入项目源码 执行自动审计 分析扫描报告,重点验证可疑点 全局搜索定位 : 使用软件内置的全局搜索功能 或使用Linux grep命令: 参数说明: -R :递归搜索 -n :显示行号 -i :忽略大小写 数据库监控 : 使用插件监控程序数据库操作 测试构造恶意SQL语句 2.2 人工审计重点 逻辑漏洞 :自动化工具难以发现,需人工分析 越权漏洞 :需熟悉功能逻辑,特别是用户相关操作 黑盒测试结合 :使用BurpSuite分析请求参数,寻找可伪造的关键参数 三、典型漏洞案例分析 3.1 PHPCMS v9逻辑漏洞(备份文件名可猜测) 漏洞原理 : 利用Windows API FindFirstFile 特性 使用 < 或 > 符号进行文件路径模糊匹配 可爆破备份文件路径 漏洞代码 : 利用脚本 (Python示例): 3.2 蝉知CMS缓存文件代码注入 漏洞原理 : 未过滤 $_SERVER['SCRIPT_NAME'] 输入 恶意代码被写入缓存文件 利用方式 : 定位技巧 : 使用WebShellKill等工具监控文件写入操作 3.3 织梦CMS后台任意文件名修改 漏洞文件 : dede/file_manage_control.php 漏洞代码 : 利用方式 : 组合攻击 : 利用前台上传点获取文件路径 构造恶意URL并缩短 社工管理员点击 四、安全开发规范 4.1 全局配置 关闭 register_globals 明确使用超全局数组: $_GET 、 $_POST 、 $_COOKIE 4.2 错误处理 关闭 display_errors 开启 log_errors 指定 error_log 路径 4.3 输入过滤 三步骤 : 变量识别 :明确来源、用途和去向 变量过滤 :根据用途选择适当过滤方式 变量处理 :区分合法与非法数据处理 4.4 数据限制 限制数据长度 限制提交频率 防止DOS/溢出攻击 4.5 后台验证 强制验证关键操作 使用强验证码机制 防止接口滥用 4.6 特定漏洞防护 | 漏洞类型 | 防护措施 | |---------|---------| | SQL注入 | magic_quotes_gpc 、预编译、 mysql_real_escape_string() | | XSS | strip_tags() 、 htmlspecialchars() | | 命令执行 | escapeshellarg() 、 escapeshellcmd() | | 文件操作 | 过滤 .. 、 \ 、 / 等路径字符 | 五、实用命令速查 快速定位函数/类 : 数据库监控 : 使用MySQL查询日志 或专用数据库监控插件 文件监控 : Linux: inotifywait Windows: 专用文件监控工具 六、学习建议 循序渐进 :从简单CMS开始,逐步挑战复杂系统 实践为主 :复现已知漏洞,理解原理 工具辅助 :合理使用自动化工具提高效率 关注上下文 :漏洞往往存在于特定环境组合中 保持更新 :跟踪最新漏洞报告和审计技术 通过系统性地掌握这些知识要点和实践方法,您将能够有效地开展代码审计工作,发现潜在的安全风险。