手把手教你配置一个 PHP 审计调试环境(保姆向)

  • A+
所属分类:代码审计

前言

上次写了篇 macOS 下优雅地配置 PHP 代码审计环境 里面主要讲解了使用 MAMP PRO 配合 PHPStorm 来进行代码审计,但是这个环境有点臃肿了,而且并不是很多人都用 macOS,所以本节主要介绍一下轻量级的代码审计环境的配置,而且可以在 Windows 下也有不错的体验。

宝塔

宝塔官网介绍宝塔支持 Linux 以及 Windows 版本,而且 Linux 版本也支持了 CentOS、Ubuntu、Deepin、Debian、Fedora,基本上覆盖了主流的操作系统了,Linux 下系统兼容性顺序:Centos8.x > Centos7.x > Ubuntu18.04 > Debian10 > Ubuntu 20.04 > 其它系统。

关于怎么安装宝塔国光这里就不再过多的赘述了,国光的宝塔搭(这两个字好像啊 这么巧)建在公司的内网中,访问对应的网站受到修改 HOST 文件即可,很是方便,哪怕 IP 更换了也不影响网站的正常访问,因为有些网站的 URL 是固定写死的,所以国光这里也建议大家使用修改 HOST 的方法来搭建本地测试网站:

安装 Xdebug

宝塔封装了 Xdebug,这让我们安装的过程就变得很简单,因为工作特性国光这里几乎安装了所以可以安装的 PHP 版本:

其中只有非常古老的 PHP 5.2 版本没有 Xdebug 扩展,其他版本安装起来就很简单。

首先找到「软件商店」-「对应的 PHP 版本」-「设置」-「安装扩展」-「xdebug」-「安装」只需要简单这基本,鼠标点击一下即可安装:

配置 Xdebug

安装完成之后必须受到修改配置文件,才可以让 Xdebug 生效 「软件商店」-「对应的 PHP 版本」-「设置」-「配置文件」然后末尾添加如下内容即可,下面是国光使用 PHP 7.3 的配置情况:

```ini
[XDebug]
; 如果大家要配置这个的话,可以模仿一下下面的规则,去对应的版本目录下找到对应的 xdebug.so 文件即可
zend_extension=/www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/xdebug.so

; 开启远程调试功能
xdebug.remote_enable=1

; 远程调试地址
xdebug.remote_host=localhost

; 远程调试端口
xdebug.remote_port=9000

; 每次执行脚本都会启动 xdebug 调试
xdebug.remote_autostart = 1

; 每次请求都会生成一个性能报告文件
xdebug.profiler_enable = 1

; 在 IDE 上等待确认传入调试连接以的时间(毫秒)
xdebug.remote_timeout=2000

; debug 调试的日志位置
xdebug.remote_log = /tmp/xdebug.log
```

修改完配置文件之后,得重载一下配置文件:

然后写一个 phpinfo() 访问一下,搜索一下看看 xdebug 字样是否出现:

设置请求时间

默认配置的话,如果我们编辑器一直处于 Debug 状态,这个时候浏览器访问的网站就会超时出现 502 的错误,这是因为我们 PHP Debug 的时间太长了,浏览器因为服务器挂掉了,所以我们需要配置一下,增加 PHP Debug 的等待时间,下面以宝塔面板自带的 PHP 7.3 版本为例,只需要编辑如下文件:

bash
vim /www/server/php/73/etc/php-fpm.conf

修改 request_terminate_timeout时间为 0 即可:

ini
request_terminate_timeout = 0

那么就可以愉快的 Debug 审计了。

PHPStudy

PHPStudy 是 Windows 平台上面经典的 PHP 集成开发环境,国内用户量也巨大,所以 PHPStudy 每次爆出后门的时候,都会搞一个大新闻出来。国光比较喜欢用老版本的PHPStudy 2018 版本 (没错就是历史上爆出后门的那边版本)

安装 Xdebug

PHPStudy 官方也是封装好了 Xdebug 的,下面是存在 Xdebug 版本对应扩展文件的默认位置情况:

apl
C:\PhpStudy\PHPTutorial\php\php-5.3.29-nts\ext\php_xdebug.dll
C:\PhpStudy\PHPTutorial\php\php-5.4.45\ext\php_xdebug.dll
C:\PhpStudy\PHPTutorial\php\php-5.4.45-nts\ext\php_xdebug.dll
C:\PhpStudy\PHPTutorial\php\php-5.5.38\ext\php_xdebug.dll
C:\PhpStudy\PHPTutorial\php\php-5.6.27-nts\ext\php_xdebug.dll
C:\PhpStudy\PHPTutorial\php\php-7.0.12-nts\ext\php_xdebug.dll

配置 Xdebug

安装完成之后必须受到修改配置文件,才可以让 Xdebug 生效,下面以 PHP 5.6 版本为例,首先找到 php.ini 配置文件的位置:

apl
C:\PhpStudy\PHPTutorial\php\php-5.6.27-nts\php.ini

搜索找到Xdebug 栏,然后在下面添加如下内容即可:

ini
zend_extension="C:\PhpStudy\PHPTutorial\php\php-5.6.27-nts\ext\php_xdebug.dll"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart = 1
xdebug.profiler_enable = 1
xdebug.remote_timeout=2000

关于每个选项对应的解释,可以直接参考上面 宝塔章节 里面的注释情况

配置文件修改完成后记得重启一下服务。 重启后写一个 phpinfo() 文件访问一下,搜索一下看看 xdebug 字样是否出现:

VSCode

首先准备一段简单代码,待会用来检验是否可以成功 Debug:

```php
<?php
error_reporting(0);

function add($x,$y)
{
$total=$x+$y;
return $total;
}

$a = $_REQUEST['a'];
$b = $_REQUEST['b'];

if(isset($a) && isset($b)){
echo "$a + $b = " . add($a,$b);
}else{
echo "www.sqlsec.com";
}

?>
```

本地调试

如果你是 Windows 系统,并且参考上面了 PHPStudy 章节的话,那么 VSCoide 只需要安装一个 「PHPDebug 」扩展即可:

VSCode 打开本地的 PHPStudy 根目录,编辑器打开想要调试的 PHP 文件,然后点击左侧的 Debug 图标:

接着继续点击 「创建 lanunch.json 文件」:

选择环境为 PHP:

因为我们上面配置的 Xdebug 的远程端口也是 9000 端口,所以这里的默认配置文件不需要修改就可以直接使用了:

保存一下配置文件,然后点击左上角的「Listen for XDebug」接着下一个断点,然后浏览器访问一下这个文件,就可以愉快地进行调试了:

远程调试

远程调试的话,除了像上面章节那样安装「PHPDebug 」扩展以外:

如果配置使用 PHP Debug 参考上面的 本地调试 小节

还需要安装「Remote - SSH」扩展:

这两个扩展配置安装完成以后,那么下面开始准备来远程调试宝塔里面的 PHP 程序吧。

首先点击左下角的远程图标,然后选择第一个 连接远程服务器的选项:

输入远程服务器的 IP 地址,然后输入密码即可连接成功,连接成功的效果如下:

点击左上角的「Listen for XDebug」接着下一个断点,然后浏览器访问一下这个文件,就可以愉快地进行远程调试宝塔了:

参考资料