浅谈代码审计
字数 1551 2025-08-03 16:50:47
代码审计全面指南
一、代码审计基础概念
1.1 代码审计定义
代码审计是通过分析应用程序源代码,寻找安全漏洞的过程。主要针对原生PHP和MVC框架进行审计。
1.2 学习前提
- 需要掌握PHP基础,至少到面向对象水平
- 推荐学习资源:
- 云之梦PHP项目教程
- 李小双代码审计课程(B站:BV1QJ411z714)
二、代码审计方法论
2.1 审计方法分类
-
逆向追踪/回溯变量:
- 检查参数是否可控
- 分析过滤机制(是否全局过滤)
- 搜索敏感关键词定向挖掘
-
正向追踪/跟踪变量:
- 查找接收外部参数的文件
- 跟踪变量传递过程
-
功能点漏洞挖掘:
- 基于黑盒测试经验判断
- 结合功能点分析
-
通读全文:
- 了解程序架构
- 分析函数集文件、配置文件(config)、安全过滤文件(filter/check)
2.2 审计工具推荐
- Xdebug:用于代码调试和分析
- 安装参考:https://www.cnblogs.com/linqingvoe/p/10907672.html
- Seay源代码审计系统:定位危险函数
- RIPS:PHP代码审计工具
三、常见漏洞审计技巧
3.1 SQL注入漏洞
关键点:
- 检查SQL语句拼接处
- 追踪变量来源(GET/POST/COOKIE等)
- 分析过滤函数是否完备
典型案例:
- 二次编码注入:
$id = mysql_real_escape_string($_GET['id']);
$id = urldecode($id); // 可绕过,使用%2527(%27的二次编码)
- 过滤函数分析:
htmlspecialchars需注意第二个参数:ENT_COMPAT:只转换双引号ENT_QUOTES:转换双引号和单引号ENT_NOQUOTES:不转换任何引号
- 字符串替换绕过:
$string = str_replace('{','',$string);
// 可输入%2{7,替换后变为%27(单引号)
3.2 文件包含漏洞
危险函数:
require()require_once()include()include_once()
截断方法(PHP5.3前有效):
%00截断(受GPC限制)- 多个点截断(Windows需240个点)
- 远程包含时使用
?伪截断
3.3 XSS漏洞
类型:
- 反射型:
echo $_GET['name'];
echo $_SERVER['HTTP_REFERER'];
- 存储型:
- 关注留言板、评论功能
- 检查入库和出库时的过滤
3.4 文件上传漏洞
关键函数:
move_upload_file
绕过技巧:
-
黑名单不完整:
- 尝试php3/php4/php5/phtml等后缀
- 利用解析漏洞(IIS/Nginx)
-
Content-Type验证绕过:
- 修改上传包的Content-Type
-
程序逻辑缺陷:
<script>alert("文件不合法")</script>
// 仅弹窗未终止程序,文件仍上传
- pathinfo绕过:
$basename = pathinfo('1.php/.', PATHINFO_EXTENSION); // 返回空
3.5 命令执行漏洞
危险函数:
system()exec()shell_exec()passthru()popen()proc_popen()
审计要点:
- 检查参数是否可控
- 分析调用链和包含关系
3.6 文件删除漏洞
关键函数:
unlink()
审计要点:
- 检查路径控制
- 注意
../等目录遍历 - 关注
.lock文件删除可能导致重装漏洞
四、MVC框架审计要点
4.1 MVC架构理解
- Model(模型)
- View(视图)
- Controller(控制器)
4.2 审计重点
-
路由分析:
- 理解URL路由机制
- 参数传递方式差异
-
参数接收方式:
- 可能是
$_GET或框架特有方法(如input)
- 可能是
-
数据库内核分析:
- 使用Xdebug跟踪SQL构建过程
- 检查过滤机制是否完备
4.3 数据库内核审计示例
$result = model('sort')->find("id=$id");
// 跟踪find方法,检查where条件是否过滤
五、实用建议
- 不要害怕代码审计:耐心分析每个功能点
- 使用Xdebug:有效跟踪变量和调用链
- 关注过滤函数:分析其实现和限制
- 理解业务逻辑:结合功能点分析潜在风险
- 保持学习:跟进新的漏洞类型和绕过技术
六、资源推荐
-
学习资源:
- 云之梦PHP项目教程
- 李小双代码审计课程(B站)
-
工具:
- Xdebug
- Seay源代码审计系统
- RIPS
-
实践平台:
- 漏洞靶场
- 开源项目审计