欢迎光临
我们一直在努力

【八个月网安课程】第十二周·周一:代码审计环境搭建与 Seay 源码审计系统初探

从今天起,学习模式将从“利用已知漏洞”升级为“自主挖掘漏洞”。代码审计是渗透测试工程师向安全研究员进阶的核心技能,从代码层面理解漏洞的本质,而非仅仅依赖现成的 payload。今天的目标是搭建一套完整的 PHP 代码审计环境,并学会自动化审计工具的基本使用。


第十二周·周一:代码审计环境搭建与 Seay 源码审计系统初探

🎯 今日学习目标(达成效果)

  • 能独立搭建一个集 Web 服务、数据库、PHP 环境、调试器及代码审计工具于一体的本地审计环境;
  • 能理解代码审计在 SDL(安全开发生命周期)和渗透测试中的核心地位:白盒测试比黑盒测试更高效,能发现隐藏更深的后台漏洞与逻辑缺陷;
  • 能熟练使用 Seay 源代码审计系统的核心功能:自动审计、函数定位、代码高亮、批量检测;
  • 能运行第一个自动化审计任务,扫描一个简单的 PHP 项目(如 bWAPP 或 DVWA 源码),并查看 Seay 报告中的潜在漏洞,理解“漏洞特征匹配”的原理;
  • 能区分自动审计工具的误报与真实漏洞,知道自动工具只是半自动辅助,绝不能替代人工逐行分析;
  • 能说出 PHP 代码审计中常见的危险函数分类:命令执行类(system、exec)、文件操作类(file_get_contents、move_uploaded_file)、数据库查询类(mysql_query)、代码包含类(include、require)。

在这里插入图片描述

📘 一、PHP 代码审计环境的核心组件

一套完整的 PHP 代码审计环境需要三个层次:

层次组件作用
运行环境 PHP + Apache/Nginx + MySQL/MariaDB 提供动态调试环境,支撑源码运行
集成平台 phpStudy (Windows) / XAMPP / Docker 一键部署,统一管理服务与数据库
审计工具 Seay 源码审计系统 / RIPS (旧版) / 其他 IDE 辅助 自动化扫描、敏感函数追踪、代码导航

对于初学者,推荐在 Windows 下使用 phpStudy(或 小皮面板) + Seay 源代码审计系统,或者用 Linux + 手动搭建 + Seay。今天以 Windows 下的 phpStudy 为例,因为 Seay 工具原生支持 Windows。如果你只有 Linux,可以使用 Wine 运行或使用替代工具(如 grep + awk 半自动审计)。


📘 二、Seay 源码审计系统简介

Seay 是一款免费的国产 PHP 代码审计工具,由安全研究者 Seay 开发。它的优势在于:

  • 自动匹配敏感函数(如 eval、system、mysql_query)并定位相关代码行;
  • 支持自定义规则库,可扩展检测能力;
  • 集成代码编辑器,点击可疑点可直接跳转源码;
  • 提供批量扫描、全文检索、函数列表等功能。

工作原理:基于正则表达式和预定义的“漏洞特征”匹配源代码,属于静态分析(不运行代码)。它会列出所有可能产生漏洞的函数调用,需要审计人员进一步人工研判上下文,过滤掉大量误报。


✍️ 三、动手实践一:搭建集成环境并配置审计系统

1. 安装 phpStudy(以 Windows 11 为例)

  • 搜索“小皮面板 phpStudy”下载最新版(For Windows)。
  • 安装时选择自定义目录(如 D:\\phpstudy_pro)。
  • 启动面板,一键启动 Apache 2.4 + PHP 5.6(或 PHP 7.x,根据靶场源码要求,建议先使用 PHP 5.6 兼容老旧靶场),MySQL 5.7。
  • 点击“网站” → “创建网站”,域名设为 localhost,根目录指向一个空文件夹(如 D:\\phpstudy_pro\\WWW\\audit)。

2. 部署一个测试项目(DVWA 或 bWAPP)

  • 下载 DVWA 源码,解压到网站根目录(如 D:\\phpstudy_pro\\WWW\\dvwa)。
  • 复制 config/config.inc.php.dist 为 config.inc.php,修改数据库密码为 phpStudy 默认的 root / root。
  • 浏览器访问 http://localhost/dvwa/setup.php,点击创建数据库,即可完成部署。

3. 安装 Seay 源码审计系统

  • 下载 Seay 源码审计系统(原版为 .exe,可能需从安全社区或 GitHub 获取)。
  • 解压后运行 Seay代码审计系统.exe。
  • 界面分为:菜单栏、项目目录树、代码编辑区、审计结果列表、敏感函数列表等。

4. 首次审计:加载 DVWA 源码并扫描

  • 在 Seay 中,点击“新建审计”或“浏览” → 选择 DVWA 的根目录(如 D:\\phpstudy_pro\\WWW\\dvwa)。
  • 软件会自动解析文件列表,并在右侧“敏感函数”栏列出所有匹配的函数。
  • 点击“自动审计”按钮,开始扫描。扫描完成后,在下方的“审计结果”区域会显示可疑漏洞列表,每条信息包含:文件路径、行号、漏洞类型、代码片段。

观察结果:

  • 你会看到大量类似于 mysql_query($sql) 的记录,标注为“SQL 注入”。
  • 也会看到 eval()、exec() 等标注为“代码执行”或“命令执行”。
  • 这是因为这些函数的出现位置被自动标记,但其中很多可能是安全的(比如参数已经经过严格过滤)。你需要手工确认:变量是否用户可控?是否进入危险函数前经过了转义或参数化?

示例研判:
审计结果中某条记录指向 dvwa/includes/db.php 中的 mysql_query,但追踪上下文发现该函数内部仅为数据库连接操作,且不直接处理用户输入,属于误报。而另一条记录指向 dvwa/vulnerabilities/sqli/source/low.php 中的拼接查询,并直接使用了 $_GET['id'],这就是真实漏洞。


📘 四、补充技巧:使用 IDE(VSCode/PHPStorm)辅助人工审计

Seay 擅长快速定位,但真正的人工审计更依赖于强大的代码阅读工具。

  • 在 VSCode 中安装 PHP Intelephense,提供函数跳转、变量追踪。
  • 使用全局搜索(Ctrl+Shift+F)快速查找 $_GET、$_POST、$_REQUEST 等外部输入点。
  • 使用正则搜索:(eval|exec|system|shell_exec|preg_replace.*\\/e) 等。

工作流建议:

  • 用 Seay 进行全量自动扫描,导出可疑列表。
  • 在 VSCode 中逐条打开对应文件,追溯输入参数的来源与过滤。
  • 标记出真实漏洞,并编写 POC 验证。

  • 📝 五、课后测试题与解析

    测试题 1:请描述 Seay 源码审计系统在自动审计时一般会关注哪些 PHP 函数?列举至少 5 类函数并说明为什么它们是危险的。

    参考答案:
    Seay 会重点标记以下危险函数:

    • 命令执行类:system()、exec()、shell_exec()、passthru()、 ``(反引号),因为它们可能直接执行操作系统命令。
    • 代码执行类:eval()、assert()、preg_replace() 配合 /e 修饰符,可执行任意 PHP 代码。
    • 文件包含类:include()、require()、include_once()、require_once(),若参数可控可导致本地/远程文件包含。
    • 数据库操作类:mysql_query()、mysqli_query()、mssql_query(),若拼接 SQL 语句且未使用参数化查询,可导致 SQL 注入。
    • 文件操作类:file_get_contents()、file_put_contents()、move_uploaded_file()、unlink(),可能导致任意文件读写、删除或上传漏洞。

    测试题 2:自动审计工具报告了大量“漏洞”,是否意味着 Web 应用一定存在这些漏洞?为什么?

    参考答案:
    不一定。自动审计工具是基于特征匹配的静态分析,它只知道某处使用了危险函数,但无法理解程序的上下文和控制流。许多危险函数在实际代码中已经经过了充分的输入验证或转义,因此是安全的误报。自动工具的作用是帮助审计人员快速定位潜在风险点,最终还是需要人工逐一研判:变量的来源是否外部可控、是否经过有效过滤、函数的使用方式是否存在绕过等。只有经过确认的才是真实漏洞。


    ✅ 今日学习效果自检清单

    • 我成功搭建了 phpStudy 环境,并部署了 DVWA 或 bWAPP 靶场
    • 我安装了 Seay 源码审计系统,并成功加载了一个 PHP 项目进行自动审计
    • 我能理解 Seay 审计结果列表中“SQL注入”、“代码执行”等标签的含义
    • 我能够手动追踪一个可疑函数调用,判断其是否为真实漏洞
    • 我至少能默写 5 类 PHP 危险函数,并说明它们的威胁
    • 我意识到自动审计工具只是辅助,最终必须依赖人工代码分析

    ⚠️ 阶段避坑重点

    • 不要同时运行多个 Web 环境:如果你已安装 IIS 或 Nginx,确保 80 端口不冲突。phpStudy 自带端口管理,可以随时更换。
    • PHP 版本要与靶场兼容:老版 DVWA 可能在 PHP 7.4+ 上运行出错,建议先使用 PHP 5.6 或 7.0。如有兼容性问题,查阅错误日志调整配置。
    • Seay 可能被杀软误报:因为是安全审计工具,部分杀毒软件会将其视为“风险工具”。如遇拦截,需在杀软中添加信任区或暂时关闭。
    • 审计时不要在生产环境直接扫描:始终将源代码复制到本地隔离环境分析,避免误操作影响线上服务。
    • 不要盲信工具结果:即使是知名商业 SAST 产品,误报率也极高。将自动扫描结果视为线索,而非结论。

    今天你迈出了白盒测试的第一步。明天我们将正式开始 PHP 代码审计的核心——变量覆盖与参数追踪,学会从 $_GET、$_POST 一路追到危险函数,手工确认漏洞的存在,并掌握动态调试技术。请保留今天的审计环境和 DVWA 源码,明天将在其中进行深度人工分析。

    赞(0)
    未经允许不得转载:171主机测评 » 【八个月网安课程】第十二周·周一:代码审计环境搭建与 Seay 源码审计系统初探
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址