## 前言
对于调试 php 项目可以说是很熟悉了,网络上的文章也有很多。前段时间朋友询问我,是否清楚 php 远程调试。远程调试只在 java 项目上操作过,也是按照网上的文章照猫画虎,对于 php 的远程调试自然不是很清楚。前段时间又很忙,没有时间去操作,后来朋友跟我说他弄好了。我想,在学习方面,我岂能落于人后。对于 linux 的相关操作也不是很熟悉,所以我决定在 ubuntu 虚拟机上安装一个 DVWA 的 php 项目环境,同时在本地对此进行调试。
## 安装 DVWA 项目
系统环境
``` whippet@ubuntu:~/Desktop$ cat /etc/issue Ubuntu 20.04.2 LTS \n \l whippet@ubuntu:~/Desktop$ uname -a Linux ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux ```
查看 PHP 环境是否已经安装
``` whippet@ubuntu:~/Desktop$ dpkg -l | grep php ```
添加 PPA 源
``` whippet@ubuntu:~/Desktop$ sudo add-apt-repository ppa:ondrej/php ```
更新系统
``` whippet@ubuntu:~/Desktop$ sudo apt-get update whippet@ubuntu:~/Desktop$ sudo apt-get upgrade ```
安装 php 5.6
``` whippet@ubuntu:~/Desktop$ sudo apt-get install php5.6 whippet@ubuntu:~/Desktop$ php -v PHP 5.6.40-47+ubuntu20.04.1+deb.sury.org+1 (cli) whippet@ubuntu:~/Desktop$ sudo apt-get install php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml php5.6-gd ```
安装 apache 并启动
``` whippet@ubuntu:~/Desktop$ sudo apt install apache2 whippet@ubuntu:~/Desktop$ sudo service apache2 start ```
安装 mysql 并启动
``` whippet@ubuntu:~/Desktop$ sudo apt-get install mysql-server whippet@ubuntu:~/Desktop$ sudo vim /etc/mysql/debian.cnf [client] host = localhost user = root password = root whippet@ubuntu:~/Desktop$ sudo mysql -u root -proot mysql> create database dvwa; Query OK, 1 row affected (0.01 sec) mysql> create user 'dvwa'@'localhost' identified by 'dvwa'; Query OK, 0 rows affected (0.02 sec) mysql> grant all on dvwa.* to 'dvwa'@'localhost'; Query OK, 0 rows affected (0.00 sec) mysql> use mysql; mysql> ALTER USER 'dvwa'@'localhost' IDENTIFIED WITH mysql_native_password BY 'dvwa'; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) ```
安装DVWA
``` whippet@ubuntu:~/Desktop$ cd /var/www/html/ 下载 https://github.com/digininja/DVWA/archive/2.0.1.zip whippet@ubuntu:/var/www/html$ sudo unzip DVWA-2.0.1.zip whippet@ubuntu:/var/www/html$ sudo mv DVWA-2.0.1/ dvwa whippet@ubuntu:/var/www/html$ sudo cp dvwa/config/config.inc.php.dist dvwa/config/config.inc.php whippet@ubuntu:/var/www/html$ sudo vim dvwa/config/config.inc.php $_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'dvwa'; $_DVWA[ 'db_password' ] = 'dvwa'; $_DVWA[ 'recaptcha_public_key' ] = 'Whippet'; $_DVWA[ 'recaptcha_private_key' ] = 'Whippet'; whippet@ubuntu:/var/www/html$ sudo vim /etc/php/5.6/apache2/php.ini #allow_url_include = Off allow_url_include = On whippet@ubuntu:/var/www/html$ sudo chgrp www-data dvwa/hackable/uploads/ whippet@ubuntu:/var/www/html$ sudo chgrp www-data dvwa/external/phpids/0.6/lib/IDS/tmp/phpids_log.txt whippet@ubuntu:/var/www/html$ sudo chgrp www-data dvwa/config/ whippet@ubuntu:/var/www/html$ sudo chmod g+w dvwa/hackable/uploads/ whippet@ubuntu:/var/www/html$ sudo chmod g+w dvwa/external/phpids/0.6/lib/IDS/tmp/phpids_log.txt whippet@ubuntu:/var/www/html$ sudo chmod g+w dvwa/config/ whippet@ubuntu:/var/www/html$ sudo service apache2 restart whippet@ubuntu:/var/www/html$ sudo service mysql restart ```
## 配置 PHPSTROM 调试
### 环境条件
机器名称| 操作系统 | ip 信息 | 实验环境
:-: | :-: | :-: | :-:
虚拟机 | Ubuntu 20.04.2| 192.168.176.171| PHP 5.6.40
本地机器| Windows10| 192.168.176.1| phpstrom
### xdebug 配置
我们直接在 xdebug 的官网上寻找[历史版本](https://xdebug.org/download/historical) 全局搜索 php 5.6
我们可以看到相较于 windows 上种类繁多的二进制文件,linux 只提供了源码文件,需要自己进行编译,下载源码之后我们复制到虚拟机内部
``` whippet@ubuntu:~$ tar -xcvf xdebug-2.5.5.tgz whippet@ubuntu:~$ sudo apt install php5.6-dev whippet@ubuntu:~$ cd xdebug-2.5.5/ whippet@ubuntu:~/xdebug-2.5.5$ sudo find / -name php-config /etc/alternatives/php-config /usr/bin/php-config /var/lib/dpkg/alternatives/php-config whippet@ubuntu:~/xdebug-2.5.5$ ./configure --enable-xdebug --with-php-config=/usr/bin/php-config whippet@ubuntu:~/xdebug-2.5.5$ sudo make && make install<可能需要提升至root权限> ```
xdebug 被安装在 /usr/lib/php/20131226/
修改php.ini配置文件,在文件中追加以下内容
``` [Xdebug] zend_extension=/usr/lib/php/20131226/xdebug.so ;指定Xdebug扩展文件的路径 xdebug.remote_enable=1 ;是否开启远程调试 xdebug.remote_handler=dbgp ;指定远程调试的处理协议 xdebug.remote_mode=req ;可以设为req或jit,req表示脚本一开始运行就连接远程客户端,jit表示脚本出错时才连接远程客户端。 xdebug.remote_host=192.168.176.1 ;指定远程调试的主机名(安装phpstorm的主机ip) xdebug.remote_port=9000 ;指定远程调试的端口号 xdebug.idekey="PHPSTORM" ;指定传递给DBGp调试器处理程序的IDE Key ```
保存之后重启 apache 服务 sudo service apache2 restart 之后访问 phpinfo 发现xdebug 的信息已经显示出来了
至此 xdebug 的相关配置就 ok 啦,接下来我们对本地的 phpstrom 进行配置
### PHPSTROM 配置
首先我们从虚拟机内,把已经安装好的项目代码打包再脱下来,这是因为,有一些项目在安装之后会对源代码进行一定的修改,为了不出现偏差我们就把安装好的代码给拖取下来。
利用 PHPSTROM 打开这个项目,并配置相关参数信息
File -> Settings -> Languages & Frameworks -> PHP -> Debug
配置 Servers
此处要注意,需要直接指定到网站的目录位置
配置PHP Web Application
然后我们打开登录的 login.php ,在其中添加断点,并设置 PHPSTROM 的监听模块
浏览网站页面,同时打开浏览器的调试插件
我们可以看到已经跳到我们断点的位置
至此调试的基本过程已经完成,以下的步骤属于可做可不做,本着学习的想法,我还是把添加上吧
### SSH 配置
先大致描写一下为什么要进行这个操作,就是为了方便对 php 文件的修改,有时候我们想对 php 文件进行修改,但是在本地修改之后,并不会影响远端服务器上的文件,经过这样的配置之后,本地文件修改之后,远端服务器上的文件也会同步修改。
首先,我们安装好的 Ubuntu 虚拟机上是并不存在 SSH 的,所以我们需要先将 Ubuntu 上的 SSH 进行配置。
``` # 安装 openssh 服务 whippet@ubuntu:~$ sudo apt-get install openssh-server # 启动 ssh 服务 whippet@ubuntu:~$ sudo /etc/init.d/ssh start # 配置 root 用户连接权限 whippet@ubuntu:~$ sudo vim /etc/ssh/sshd_config PermitRootLogin yes whippet@ubuntu:~$ sudo /etc/init.d/ssh restart ```
验证一下,发现可以登录成功
打开 PHPSTROM
添加一个 sftp 协议
选择 ubuntu 上 php 的路径位置
至此已经基本配置完成,我们来进行一下验证
File -> Settings -> Languages & Frameworks -> PHP -> Debug
配置完成,我们修改一个文件进行验证一下
文笔粗糙、内容浅显,不足之处欢迎师傅们指正,感激不尽。
本文作者:Whippet
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/155273.html