前言
对于调试 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
配置完成,我们修改一个文件进行验证一下
文笔粗糙、内容浅显,不足之处欢迎师傅们指正,感激不尽。
猜你还喜欢
- 06-09深入理解JAVA反序列化漏洞
- 08-12cmseasy前台无需登录直接获取敏感数据的SQL注入(有POC证明)
- 11-28CVE-2017-11882漏洞复现和利用
- 11-10利用Thinkphp 5缓存漏洞实现前台Getshell
- 08-04php安全代码审计小结
- 01-02PHPCMS后台”空降”管理员CSRF漏洞分析
- 01-02某CMS注入分析及注入点总结
- 11-30PHP 函数漏洞总结
- 11-30PHP渗透中的奇淫技巧--检查相等时的漏洞
- 11-15某开源框架从注入到Getshell
- 最新文章
- 随机文章
-
- 再也不怕丢三落四了,教你复制门禁卡
- 安全研究 | Nginx反向代理钓鱼
- O.G. AUTO-RECON:一款功能强大的基于Nmap结果的目标枚举工具
- Hackingtool:一款针对渗透测试人员的多合一测试套件
- 【渗透测试笔记】之【渗透测试介绍】
- 【渗透测试笔记】之【配置KALI】
- 渗透测试面试问题合集
- 对一次韭菜返佣平台的渗透-无限刷钱
- 黑客工具Nmap7.80常用命令详解
- Google Chrome浏览器漏洞使数十亿用户遭受数据被盗风险
- 【渗透测试笔记】之【熟悉KALI环境】
- 关于Cobalt Strike检测方法与去特征的思考
- 一次对电视盒子的漏洞分析
- 宝塔面板phpmyadmin未授权访问漏洞
- 信息收集和漏洞扫描的阶段性总结
- Java安全编码之SQL注入
- 从Webshell的视角谈攻防对抗
- 宝塔面板phpMyAdmin未授权访问漏洞是个低级错误吗?
- 宝塔面板phpMyAdmin未授权访问漏洞是个低级错误吗?
- 记一次对某非法站点从SQL注入到整站打包与本地搭建全过程
- 热门文章
-
- 八年专业安全团队承接渗透入侵维护服务
- Emlog黑客站模板“Milw0rm”发布
- Stuxnet纪录片-零日 Zero.Days (2016)【中文字幕】
- SQLMAP的注入命令以及使用方法
- 白帽故事汇:网络安全战士从来不是「男生」的专利
- 编辑器漏洞手册
- web安全之如何全面发现系统后台
- 常见Web源码泄露总结
- 深入理解JAVA反序列化漏洞
- cmseasy前台无需登录直接获取敏感数据的SQL注入(有POC证明)
- 网站后台登陆万能密码
- 黑麒麟2016渗透培训系列教程
- 破解emlog收费模板“Begin”
- 那些强悍的PHP一句话后门
- Android平台渗透测试套件zANTI v2.5发布(含详细说明)
- 渗透工具BackTrack与KaliLinux全套视频教程
- Python列为黑客应该学的四种编程语言之一 初学者该怎么学
- CVE-2017-11882漏洞复现和利用
- 恶意程序报告在线查询工具
- 利用Thinkphp 5缓存漏洞实现前台Getshell
- 文章标签
-