暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Phpstorm+Xdebug断点调试

Master学安全 2021-09-02
572

以下内容仅供技术研究学习使用!

严禁用于非法操作!

切实维护国家网络安全,普及相关网络安全知识是信安从业者的义务!


对于PHP开发,初来咋到,开发环境的搭建和理解感觉是最烦人的一件事了。不像JAVA,打开一个Eclipse就可以开搞,Php的Debug都要几个插件来配合工作。这些都是死的,好说。但是对于Xdebug的工作原理我一直是耿耿于怀,后来看了一篇神文Xdebug断点调试的工作原理详解。


0x01:xdebug原理介绍

Xdebug的工作原理可以总结为下面几个步骤

1:IDE(比如PhpStorm,下文所述的客户端)中已经集成了一个遵循BGDp协议(一个专门用来调试的协议)的Xdebug插件。当要debug的时候,点击一些IDE的某个按钮,启动这个插件。该插件会启动一个9000的端口监听远程服务器发过来的debug信息。

2:浏览器向Httpd服务器发送一个带有XDEBUG_SESSION_START参数的请求,Httpd收到这个请求之后交给后端的PHP进行处理(下面就忽略Httpd,直接把Php叫做Server)。

3:Php看到这个请求是带了XDEBUG_SESSION_START 参数,就告诉Xdebug,“嘿,我要debug喔,你准备一下”。这时,Xdebug这时会向来源ip客户端的9000端口(即客户端,也即是IDE)发送一个debug请求,然后客户端的9000端口响应这个请求,那么debug就开始了。

4:Php知道Xdebug已经准备好了,那么就开始开始一行一行的执行代码,但是每执行一行都会让Xdebug过滤一下。

5:Xdebug开始过滤代码,Xdebug在过滤每一行代码的时候,都会暂停代码的执行,然后向客户端的9000端口发送该行代码的执行情况,等待客户端的决策(是一句代码还是下一个断点待)。

6:相应,客户端(IDE)收到Xdebug发送过来的执行情况,就可以把这些信息展示给开发者看了,包括一些变量的值等。同时向Xdebug发送下一步应该什么。


0x02:下载xdebug

官网下载地址:

https://xdebug.org/download/historical

 提示: 这里暂时不推荐使用Xdebug3.x版本原因如下:

 1. 3.0跟2.0的配置参数写法有些不一样,并且并彻底修改了设置参数

 2. 如果你phpStorm版本比较低,那么 PhpStorm的检查脚本可能还没有完全更新 使用Xdebug3.x版本集成还有一定的兼容性问题


自动分析系统对应的xdebug版本

地址:https://xdebug.org/wizard

将phpinfo()全部信息ctrl+a全部复制粘贴过去系统会自动分析对应的xdebug版本


0x03:安装xdebug

将下载的xdebug配置文件移动到对应php版本的ext目录下

加载xdebug

接着找到php.ini进行编辑

D:\phpstudy_pro\Extensions\php\php7.1.9nts\php.ini加载xdebug文件

zend_extension = "D:\phpstudy_pro\Extensions\php\php7.1.9nts\ext\php_xdebug-2.9.8-7.1-vc14-nts-x86_64.dll"

接着重启apache服务刷新phpinfo()页面出现xdebug则文件加载成功


0x04:xdebug 参数配置

    [xdebug]
    ;加载xdebug库文件
    zend_extension = "D:\phpstudy_pro\Extensions\php\php7.1.9nts\ext\php_xdebug-2.9.8-7.1-vc14-nts-x86_64.dll"
    xdebug.remote_handler=dbgp
    xdebug.idekey=PHPSTORM
    ;开启远程调试
    xdebug.remote_enable = On
    ;远程主机
    xdebug.remote_host=localhost
    ;主机端口
    xdebug.remote_port=9000
    ;开启自动跟踪
    xdebug.auto_trace = On
    ;开启异常跟踪
    xdebug.show_exception_trace = On
    ;开启远程调试自动启动
    xdebug.remote_autostart = On
    ;收集变量
    xdebug.collect_vars = On
    ;收集返回值
    xdebug.collect_return = On
    ;收集参数
    xdebug.collect_params = On
    ;临时跟踪信息输出
    ;xdebug.trace_output_dir="D:\phpstudy_pro\Extensions\tmp\xdebug_tmp\"
    ;显示局部变量
    xdebug.show_local_vars = On
    xdebug.profiler_enable = On
    ;xdebug.profiler_output_dir="D:\phpstudy_pro\Extensions\tmp\xdebug_tmp\"
    xdebug.trace_enable_trigger =On
    xdebug.remote_autostart = On
    复制


    0x05:phpstorm配置xdebug

    设置-》语言&框架-》PHP-》Debug

    如果有别的程序占用了9000端口则再修改

    接着配置DBGp Proxy

    设置-》语言&框架-》PHP-》Debug-》DBGp Proxy

    IDE key,host,port都设置php.ini配置中一样的

    Servers设置

    设置-》语言&框架-》PHP-》Servers

    右上角+号配置server中的访问路径(域名,或自己配置的站点名)

    设置完成之后找一段php代码下个断点,开启debug

    代表开启debug

    代表关闭debug

    浏览器访问http://localhost/1.php?test=whoami时phpstorm就可以程序断点分析

    如果没调试成功可能是需要安装一个xdebug helper插件再来调试


     Xdebug helper插件概述
    每个人都必须拥有使用Xdebug调试,分析和跟踪PHP代码的功能。此扩展将帮助您轻松地启用/禁用调试,性能分析和跟踪,而不必费力地处理POST GET变量或cookie。对于使用带有Xdebug支持的PHP工具(例如PHPStorm),带PDT的Eclipse,Netbeans和MacGDBp或任何其他Xdebug兼容分析工具(例如KCacheGrind,WinCacheGrind或Webgrind)的PHP开发人员,此扩展非常有用。默认情况下,扩展程序图标将显示在所有页面上,但是为了保持浏览器的整洁,可以将扩展程序配置为仅在设置面板中所需的页面上可见


    0x06:安装xdebug helper插件

    浏览器搜索 xdebug helper插件安装

    安装完插件接着打开插件选项IDE key设置为phpstorm就ok了

    参考:

    https://blog.csdn.net/cangqiong_xiamen/article/details/103034458


    =================================

    精彩推荐

    DSTIKE WiFi Deauther

    【干货】一篇学会php序列化与反序列化漏洞总结

    第一届海南省网络与信息安全管理员技能大赛MISC部分-Writeup

    近源渗透|aircrack-ng 破解wifi密码

    近源渗透|RouterSploit 路由器漏洞检测及利用框架

    记一次对苦菊OA+天生创想OA协同办公系统的审计分析

    IOT&无线电|SDR嗅探GSM网络

    IOT&无线电|BadUSB HID攻击

    IOT&无线电|制作esp8266 wifi killer

    =================================

    看到这了就点个关注支持以下吧!你的关注是我创作的动力。


    文章转载自Master学安全,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论