代码审计入门实战
字数 1565 2025-08-18 11:37:11
代码审计入门实战教学文档
一、审计技巧与准备
1.1 基础要求
- 熟悉常见漏洞类型及其特征
- 掌握自动化审计工具的使用方法
- 熟练使用安全验证工具:BurpSuite、sqlmap、Python脚本等
1.2 审计心态与策略
- 状态不佳时应暂停审计工作,保持高效
- 初期建议选择小型CMS系统进行审计练习
- 通过动手实践而非单纯阅读来积累经验
- 重点关注漏洞发生的位置和上下文环境
二、审计流程与方法
2.1 工具辅助审计
-
使用Seay源代码审计系统:
- 导入项目源码
- 执行自动审计
- 分析扫描报告,重点验证可疑点
-
全局搜索定位:
- 使用软件内置的全局搜索功能
- 或使用Linux grep命令:
参数说明:grep -Rni "function upload(" /path/to/project-R:递归搜索-n:显示行号-i:忽略大小写
-
数据库监控:
- 使用插件监控程序数据库操作
- 测试构造恶意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
组合攻击:
- 利用前台上传点获取文件路径
- 构造恶意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() |
| 文件操作 | 过滤..、\、/等路径字符 |
五、实用命令速查
-
快速定位函数/类:
grep -Rni "function func_name" /path grep -Rni "class ClassName" /path -
数据库监控:
- 使用MySQL查询日志
- 或专用数据库监控插件
-
文件监控:
- Linux:
inotifywait - Windows: 专用文件监控工具
- Linux:
六、学习建议
- 循序渐进:从简单CMS开始,逐步挑战复杂系统
- 实践为主:复现已知漏洞,理解原理
- 工具辅助:合理使用自动化工具提高效率
- 关注上下文:漏洞往往存在于特定环境组合中
- 保持更新:跟踪最新漏洞报告和审计技术
通过系统性地掌握这些知识要点和实践方法,您将能够有效地开展代码审计工作,发现潜在的安全风险。