PHP-XDebug配置
0x01 XDebug介绍
- XDebug是一个开放源代码的PHP程序调试器,可以用来跟踪,调试和分析PHP的运行状况,功能强大,对审计有很大的帮助
- XDebug其实是一个.dll文件,通常放在PHP安装目录的ext/php_xdebug.dll。通过配置对应版本的php.ini文件使用
- 当配置XDebug完成后,每次访问一个页面,都会在指定的目录下生成一个文档,文档详细的记录了相关变量和函数的运行时间、源文件等等,可通过此文档,得知PHP的运行状况、某个函数的效率高低等等
0x02 安装配置Debug
- 安装
- 如果在PHP的安装目录下没有php_xdebug.dll文件,需到官网下载与自己本机PHP版本对应的XDebug,下载完成之后,放在对应版本/ext/下
- 配置(修改配置文件后需重启Apache服务才可生效)
- 修改对应的PHP版本配置(.ini)文件,配置如下
- 参数解读
- 1937:将分析器输出写入到的目录中,请确保将运行PHP的用户对该目录具有写权限
- 1938:当这个设置被设置为!= 0时,Xdebug在错误情况下生成的堆栈转储也会显示最顶层范围内的所有变量。注意,这可能会生成大量信息,因此在默认情况下关闭
- 1939:日志的输出文件夹,请确保将运行PHP的用户对该目录具有写权限
- 1940:XDebug的文件位置
- 1941:在概要文件输出目录中创建文件
- 1942:当这个设置设置为1时,您可以通过使用XDEBUG_PROFILE GET/POST参数来触发概要文件的生成,或者设置一个名为XDEBUG_PROFILE的cookie。这将把分析器数据写入定义的目录。为了防止分析器为每个请求生成概要文件,您需要设置xdebug。profiler_enable为0
- 1943:打开自动追踪。自动追踪一般情况下为打开,可以更方便的寻找函数
- 1944:当这个设置被设置为1时,Xdebug将在任何异常或错误被引发时显示一个堆栈跟踪,即使这个异常或错误被实际捕获
- 1945:当这个设置被设置为1时,Xdebug将总是尝试启动一个远程调试会话并尝试连接到一个客户端
- 1946:这个开关控制Xdebug是否应该尝试联系一个调试客户端,这个客户端在主机上监听Xdebug设置的端口。如果无法建立连接,脚本将继续,就像该设置为0一样
- 1947:只能是“dbgp”来表示调试器协议。DBGp协议是唯一受支持的协议
- 1948:远程调试客户机的主机IP。若尚未确定可使用
xdebug.remote_connect_back = 1替换这一项
- 1949:远程主机上Xdebug试图连接到的端口
- 1950:连接IDE的Key,可自定义
- 其他参数 xdebug.trace_format=0:日志追踪输出目录,0代表人可读,1代表机器可读,2代表html格式,用浏览器打开阅读。一般使用0
- xdebug.trace_options=0:记录添加到文件中方式,0代表覆盖,1代表追加,一般选择覆盖,因为随着时间,文件越来越大,不方便审计
- xdebug.collect_params=4:显示内容详细程度,这里选择4,显示所有变量内容和变量名
- xdebug.collect_return=1:显示函数返回值,0为不显示
- xdebug.collect_vars=1:显示当前作用域使用了哪些变量,显示变量名
- xdebug.collect_assignments=1:添加一行显示变量赋值
0x03 XDebug的解密功能
- XDbug还有一个很强大的功能,它可以自动跟随函数和变量的‘脚步’,解密出加密过的内容
- 通过网页访问加密过的文件,使XDebug生成日志记录文件,从而间接达到解密的目的
- 使用记事本打开日志记录文件即可获取解密后的内容