MENU

PHPStorm Xdebug 动态调试

April 17, 2021 • Read: 166 • 代码审计阅读设置

0x00 前言

通过PHPStorm和Xdebug动态调试,方便审计时随时断点跟踪,是个好用的审计方法。

0x01 操作

环境:

PHP 7.3.4

MySQL 5.7.26

apache 2.4.39

配置:

首先通过PHPStorm的Settings选择PHP环境的路径,根据需求使用不同的PHP版本,这里我直接选了phpstudy中的环境。

image-20210416141824167.png

在PHP环境下的php.ini文件中,可以配置Xdebug,可以把以下配置加到php.ini中。

在Xdebug官网下载Windows下支持的dll,,放入到配置环境路径中,如下所示,默认设置监听127.0.0.1的9001端口。

Xdebug 下载地址: https://xdebug.org/download

[xdebug]
zend_extension=D:\phpstudy_pro\Extensions\php\php7.3.4nts\php_xdebug-3.0.4-8.0-vs16-x86_64.dll
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_enable=1
xdebug.remote_mode="req"
xdebug.remote_log="D:\phpstudy_pro\Extensions\php\php7.3.4nts\log\xdebug.log"
xdebug.remote_host="127.0.0.1"
xdebug.remote_port=9001
xdebug.remote_handler="dbgp"
xdebug.idekey="PHPSTORM"

如果是用phpstudy调试的话,不用那么麻烦,直接在PHP设置里开启xdebug调试组件,设置端口就可以了。

image-20210417101210678.png

之后在PHPStorm中设置debug 端口,这里就为9001.

image-20210416145227744.png

然后就是验证服务器是否可用,这里踩了一个坑,过程中遇到报错拒绝连接。在查询解决方案后,发现是Windows优先解析列表,当ipv6的优先级高于ipv4时,就会出现这种情况。

我在ping localhost得到的回应解析为::1,需要处理一下这个问题。

image-20210416150651559.png

image-20210416150725218.png

image-20210416150933997.png

具体解决方案参考:

https://blog.csdn.net/AmberTian/article/details/70238020

解决了这个问题之后再次验证,已经没有失败了。

image-20210417101419295.png

尝试增加一个运行调试配置。

image-20210417101651923.png

红圈处为绿色,说明debug监听开启,如果是红色, 可以单击开启监听。

image-20210417101737015.png

在之后我们就可以开始断点调试了。

操作:

尝试在需要打断点的位置测试,如图所示,在admin.php中打一个断点。

image-20210417102222644.png

点击小绿图标,或者shift+F9。启动后可以观察到在url中多了一个参数,cookie中也多了一个XDEBUG_SESSION,我们携带xdebug参数去访问amdin.php。

image-20210417102317055.png

image-20210417102435848.png

最后我们可以在debug控制台看到程序运行的动态变化,方便分析代码。

image-20210417102740507.png

0x02 总结

在代码审计过程中,观察程序运行过程的动态变化,比如一些缓存,临时文件写入等,观察是否有可能利用,比如像之前在CTF经常见到的竞争条件临时文件落地,就可能可以造成getshell,回炉重造了,继续学习。

原文作者:Keefe

原文链接:PHPStorm Xdebug 动态调试

版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可