phpstorm+vulhub远程调试 – 作者:ywfndy

前言

在做代码审计或者复现漏洞的过程中,通常都需要搭建环境,代码调试来定位漏洞触发的地方。复现一些靶场漏洞的时候,尤其是PHP代码的漏洞,需要先在虚拟机中搭建漏洞环境,再通过本地搭建调试环境。靶场搭建方便了,但是调试起来异常麻烦。俗话说“搭建环境两小时,漏洞复现两分钟”。
因此本文就简单说明一下如何使用PHPSTORM远程调试vulhub靶场中的漏洞项目。
在开始之前,需要docker、docker-compose、vulhub的安装、使用,由于本文重点不在这里,因此希望有需要的朋友移步:使用Vulhub一键搭建漏洞测试靶场
关于使用过程中不明白的地方,建议大家查阅官方手册。

测试环境

宿主机:WIN10 192.168.18.4Phpstorm2021.1.2×64
虚拟机:VMWare+CentOSmin(192.168.109.100NAT模式 VMnet8 子网:192.168.109.0)
Docker:vulhub
本文中搭建的漏洞环境为:
Drupal Core8 PECL YAML 反序列化任意代码执行漏洞

一、启动Docker

[root@192 ~]# cd your_vulhub_path/drupal/CVE-2017-6920
[root@192 ~]# docker-compose up -d 
[root@192 ~]# docker exec it CONTAINER_ID /bin/bash

image

二、安装xdebug

由于docker为了简便、易移植的原因,所以很多linux系统命令是没有安装的,我们在登录之后,需要先将里面的安装源给更新一下,方便后面其它命令的安装:

root@2337778741cc:/# apt-get update
root@2337778741cc:/# apt-get upgrade

由于xdebug与php的版本有对应关系,我们需要知道自己的调试环境对应的xdebug版本是多少。因此输出搭建网站的phpinfo的信息,并将源码放入 xdebug版本测试,便可以测试出合适的xdebug版本信息。
然后下载合适的xdebug.tgz版本。
我的PHP版本是7.1的,对应的xdebug是2.9.8版,下载 xdebug-2.9.8.tgz
通过xftp将 xdebug-2.9.8.tgz放入虚拟机中。
image再通过docker cp命令将压缩文件移至docker容器中:

[root@192 ~]# docker cp xdebug-2.9.8.tgz 2337778741cc:/

在容器中安装xdebug扩展:

root@2337778741cc:/# apt-get groupinstall "Development tools" && apt-get install php-devel autoconf automake
root@2337778741cc:/# tar -xvzf xdebug-2.9.8.tgz
root@2337778741cc:/# cd xdebug-2.9.8
root@2337778741cc:/# phpize
root@2337778741cc:/# ./configure
root@2337778741cc:/# make
root@2337778741cc:/# cp modules/xdebug.so /usr/local/lib/php/extensions/no-debug-non-zts-20160303
root@2337778741cc:/# touch /usr/local/etc/php/php.ini
root@2337778741cc:/# echo 'zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so' >> /usr/local/etc/php/php.ini

然后退出容器,重启:

root@2337778741cc:/# exit
[root@192 ~]# docker restart CONTAINER_ID

再次通过宿主机访问phpinfo,可以看到xdebug添加成功:image由于docker没有安装vim,安装vim:

root@2337778741cc:/var/www/html# apt-get install vim

接下来,在容器中进行xdebug的调试配置,修改php.ini配置文件:

root@2337778741cc:/var/www/html# cd /usr/local/etc/php/
root@2337778741cc:/usr/local/etc/php# ls
conf.d    php.ini
root@2337778741cc:/usr/local/etc/php# vi php.ini

在php.ini中写入:

zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
;开启远程调试
xdebug.auto_trace=On
xdebug.remote_enable = 1
;宿主机IP
xdebug.remote_host="192.168.18.4"
xdebug.remote_port=9001
xdebug.remote_handler=dbgp
;idekey区分大小写
xdebug.idekey="PHPSTORM"
xdebug.remote_connect_back = 1
;xdebug.profiler_enable = off
;xdebug.profiler_enable_trigger = off
;xdebug.profiler_output_name = cachegrind.out.%t.%p
xdebug.profiler_output_dir = "/tmp/xdebug.log"

重启apache服务(如果docker内重启失败,就重启容器),再次查看phpinfo信息:
image可以看到,添加成功!
xdebug配置成功,接下来配置PHPSTORM。

三、PHPSTORM配置

首先,我们还是通过docker cp 命令,把容器中的网站源码拖到虚拟机中

[root@192 ~]# docker cp 2337778741cc:/var/www/html root:/

再通过xftp 将项目拖至宿主机,用PHPSTORM打开。
image打开File->Settings(快捷键(Ctrl + Alt + S)),
记得把勾给选上,然后路径填写一定要正确:
imageDebug配置,这里需要设置xdebug监听的端口和php配置中的一致:
image点击Run->Edit configurations,进行配置:
image进行configurations:配置,选择PHP Web Page,其余配置参考界面:
imageimage
image然后就可以愉快的进行调试啦!

后记

有什么不对的地方,恳请大家指出。或者有什么不明白的地方,欢迎大家分享交流!

来源:freebuf.com 2021-05-18 18:03:24 by: ywfndy

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论