首先在php.ini添加debug参数,默认监听本地9000端口,记得修改其中的so路径,windows需要在https://xdebug.org/download.php上面下载dll
[xdebug] zend_extension=/usr/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so xdebug.remote_autostart=on xdebug.remote_enable=on xdebug.remote_enable=1 xdebug.remote_mode="req" xdebug.remote_log="/var/log/xdebug.log" xdebug.remote_host="127.0.0.1" xdebug.remote_port=9000 xdebug.remote_handler="dbgp" xdebug.idekey="PHPSTORM"
安装Phpstorm并且配置debug环境
这里的ide key和上面的配置文件里面写的要一样
新增php web page
chrome/firefox都行安装debug扩展,记得安装完以后扩展里面的key要和上面的一致
开启debug
这里我以dvwa为例
先断点
在我们进行文件上传时停在了断点处
很清晰看到文件上传到哪了
PS:
接下来我们再看个有趣的点,这里我们的文件在还没到uploads目录的时候先出现在了缓存目录
但是上传到uploads目录以后缓存文件就不存在了
也就是说我们可以在上传的时候进行条件竞争,包含缓存文件达到getshell的目的。
首先我们来看怎么获取到缓存目录的路径,我们只要进行文件上传操作时,都会生成缓存文件,然后路径实际上会在phpinfo上显示出来
也就是说我们可以想到一个场景,一个phpinfo泄漏+文件包含=getshell