cyrus-and/fracker

GitHub: cyrus-and/fracker

Fracker 是一套用于在 PHP 应用程序手动安全评估期间追踪和分析函数调用链的工具,由 PHP 扩展和本地监听器应用组成。

Stars: 243 | Forks: 20

# Fracker [![CI 状态](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b122ea31e7152355.svg)](https://github.com/cyrus-and/fracker/actions?query=workflow:CI) Fracker 是一套工具,允许轻松地追踪和分析 PHP 函数调用,其目标是在对 PHP 应用程序进行手动安全评估期间为研究人员提供协助。 它包括: - 一个 [PHP 扩展](#php-extension),需要安装在目标 Web 应用程序的环境中,用于将追踪信息发送到监听器应用程序; - 一个 [监听器应用程序](#listener-application),在本地运行,负责接收来自 PHP 扩展的追踪信息并进行一些分析,以便向用户展示有意义的数据。 ![屏幕截图](https://gist.githubusercontent.com/cyrus-and/20e1fe4ae91fcd3c823262e7e8344a75/raw/3955b75bd5f177ec096409750714e6d5e98cdd3e/screenshot.png) ## 设置 通过使用[部署脚本](#deploy-script)或[手动](#manual-setup)来安装 PHP 扩展,然后在[本地](#installation)安装监听器应用程序。 如果仅想进行快速测试,请直接跳转到[演示](#demo)。 ## 演示 1. 安装[监听器应用程序](#installation)。 2. 启动一个提供 PHP 演示应用程序的 Docker 容器: docker run -d -p 80:80 -v "$PWD/demo/:/var/www/html/" --name hello-fracker php:8.2-apache 3. 检查演示 PHP 应用程序是否按预期工作: curl http://localhost/?expression=7*7 结果是:49 4. 使用[部署脚本](#deploy-script)将 Fracker 部署到容器中: ./scripts/deploy.sh hello-fracker 5. 在另一个终端中启动 Fracker,然后重复上述 `curl` 命令: fracker +++ │ Listening on 0.0.0.0:6666 +++ │ 001 │ GET localhost/?expression=7*7 001 │ {main}() /var/www/html/index.php +0 001 │ » is_safe(expression="7*7") /var/www/html/index.php +16 001 │ » » preg_match(pattern="/^[0-9+.\\-*\\/() ]+/", subject="7*7") /var/www/html/index.php +12 001 │ » calculate(expression="7*7") /var/www/html/index.php +17 001 │ » » eval("return 7*7;") /var/www/html/index.php +5 +++ │ +++ │ Shutting down... 6. 按 Ctrl-C 退出 Fracker,然后再次使用 `--help` 运行它,也可以尝试其他选项,例如,传递 `-v` 选项以显示返回值! 7. 最后停止并移除容器: docker rm -f hello-fracker ## 架构 每个 PHP 请求或命令行调用都会触发与监听器的 TCP 连接。该协议仅仅是一个从 PHP 扩展到监听器的以换行符结尾的 JSON 对象流,这些对象包含有关当前请求、执行的调用以及返回值的信息。 这种解耦允许用户实现自己的工具。例如,可以通过将流内容转储到标准输出(假设使用默认的[设置](#settings))来检查原始 JSON 对象: ``` socat tcp-listen:6666,fork,reuseaddr - | jq ``` ## PHP 扩展 PHP 扩展是对 [Xdebug](https://github.com/xdebug/xdebug) 的修改,因此安装过程基本相同,故障排除也是如此。 使用 Fracker 最方便的方法可能是使用提供的[部署脚本](#deploy-script)将其部署到 Web 服务器所在的 Docker 容器中,如果需要更通用的解决方案,请使用[手动设置](#manual-setup)。 ### 部署脚本 该脚本应该在运行 Apache 的类 Debian 发行版上开箱即用: ``` ./scripts/deploy.sh [ []] ``` 它配置 PHP 模块连接到指定主机的指定端口(默认为运行 Docker 的主机和[默认](#settings)端口)。 ### 手动设置 安装 PHP 开发文件和其他依赖项。例如,在类 Debian 发行版上: ``` apt-get install php8.2-dev libjson-c-dev pkg-config ``` 然后进入 `./ext/` 目录,只需运行 `make` 即可获取 Xdebug、应用补丁并构建 Fracker。 要检查一切是否正常,启动[监听器应用程序](#listener-application)然后像这样运行 PHP: ``` php -d "zend_extension=$PWD/xdebug/modules/xdebug.so" -r 'var_dump("Hello Fracker!");' ``` 最后,以通常的方式安装 PHP 扩展。简要步骤如下: 1. 将 `./ext/xdebug/modules/xdebug.so` 复制到 PHP 扩展目录(例如 `php-config --extension-dir`); 2. 将 `zend_extension=xdebug` 以及任何其他可选的自定义[设置](#settings)放在应用程序使用的目标环境(SAPI)中由 PHP 解析的某个 INI 文件中; 3. 如有需要,重新加载 Web 服务器。 至此,不再需要源码仓库了。 ### 设置 默认的 INI 设置在大多数情况下应该都能正常工作,以下方面可以配置。 #### 监听器应用程序的地址 默认情况下,PHP 扩展将尝试连接到端口 `6666` 上的 `127.0.0.1`。这可以通过以下方式更改: ``` xdebug.trace_fracker_host = 10.10.10.10 xdebug.trace_fracker_port = 1234 ``` #### 仅追踪特定请求 默认情况下,每个请求都会被追踪。可以通过以下方式切换到按需行为: ``` xdebug.start_with_request = trigger xdebug.trigger_value = FRACKER ``` 这样,Fracker 将仅追踪在其 GET、POST 或 cookie 参数中包含 `XDEBUG_TRACE=FRACKER` 的请求。 ## 监听器应用程序 提供的监听器应用程序是一个 [Node.js](https://nodejs.org/en) 包,通常安装在本地,但只要 PHP 扩展可以访问到它,它就可以驻留在任何地方。 ### 安装 使用以下命令安装依赖项: ``` npm install -C ./app/ ``` 然后使用 `./app/bin/fracker.js` 在本地运行 Fracker。 或者,通过创建指向此文件夹的符号链接来全局安装可执行文件: ``` npm install -g ./app/ ``` 之后,`fracker` 命令将全局可用。 卸载请使用: ``` rm -fr ./app/node_modules/ npm uninstall -g fracker ``` ### 使用和配置 运行 `fracker --help` 获取完整的用法。 为方便起见,随此仓库提供了一些[配置文件](app/configs/),其中列出了几类*有趣的* PHP 函数。像这样使用它们: ``` fracker ./app/configs/file-* # ... ``` ## 许可证 本产品依赖于 [Xdebug](https://xdebug.org/),除非另有明确说明,对于 PHP 扩展本身,版权由原作者保留。 相反,监听器应用程序在[不同](app/LICENSE)的许可证下发布。
标签:MITM代理, OpenVAS, PHP, 函数追踪, 自定义脚本, 请求拦截