Loading... 我们的目的是审计/调试/学习 DVWA 项目。 # 1、安装phpStudy DVWA 依赖 php+MySQL,因此 WNMP 框架就能满足我们的要求。但空手配置比较麻烦,我们可以直接使用 phpStudy。 首先下载 phpStudy v8.1:https://www.xp.cn/download.html。 系统为 Win7 sp1 x64,安装十分简单,上面小皮面板里面也有一个安装配置教程:https://www.xp.cn/wenda/375.html。 启动后启动 WNMP,具体应用版本信息: * MySQL 5.7.26 * Nginx 1.15.11 * php 7.3.4 ![图片.png](http://47.117.131.13/usr/uploads/2022/03/400602854.png) 网站目录是 c:\phpstudy_pro\WWW: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/2213905691.png) ![图片.png](http://47.117.131.13/usr/uploads/2022/03/2491593128.png) ![图片.png](http://47.117.131.13/usr/uploads/2022/03/2478410233.png) # 2、安装 DVWA 从 DVWA 仓库下载得到网站文件:https://github.com/digininja/DVWA,这里面也有详细的配置说明。 解压缩并将所有文件复制到上述网站目录: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/4032619383.png) ## 问题一、config/config.ini.php 文件缺失 此时直接访问 DVWA 网站,报错如下: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/4009136453.png) 网站目录下的 config/config.inc.php.dist 是 DVWA 给出的一份示例配置文件,我们直接复制一份为config/config.inc.php: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/2585455080.png) --- 重新加载页面,有两项红色的提示需要我们纠正,才能体验所有的内容: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3998210118.png) ## 问题二、PHP function allow_url_include: Disabled 这是 php 自 v5.2 后增加的一项防御文件包含漏洞的配置,默认是关闭的。相关信息:https://www.freebuf.com/articles/network/324039.html。 查看 DVWA 本身的 php 配置文件 php.ini,可见这个选项已经 On 了: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/2557018428.png) 同时有提示指明这个配置文件不一定能覆盖原始的 php 配置文件,是因为这份配置文件是 DVWA 这个站点额外添加的,不是 php 本身依赖的那份 php.ini。经确认果然另一份配置文件里面是 Off 的,更改为 On: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/474884833.png) 因为更改的是 php 的配置,需要在 phpStudy 中重启 Nginx 服务: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3538409293.png) ## 问题三、reCAPTCHA key: Missing 意思是谷歌的验证码公私钥缺失,可以从 [https://www.google.com/recaptcha/admin/create](https://www.google.com/recaptcha/admin/create) 这里申请,也可以直接网上搜得别人的来使用。 填到 config.inc.php 这两处即可: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/4073425898.png) ## 问题四、Create / Reset Database failed 上述问题解决后点击页面底部 Create/Reset Database,但提示失败,意思是当前 dvwa 用户无访问权限: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/1734066770.png) dvwa 用户是 DVWA 的 config.inc.php 中默认配置的用户,而我们 phpStudy 中自动配置的 MySQL 用户是 root/root: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3920049537.png) 于是更改如下: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3277380326.png) --- 终于一切正常,页面自动跳转到登录界面,DVWA 网站的默认用户是 admin/password: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3493427743.png) 然后就可以开始学习了: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/243182662.png) # 3、安装 PhpStorm 要调试 php 代码,我们需要一个 IDE,比如 PhpStorm。下载得到 PHPStorm:https://www.jetbrains.com/phpstorm/download/#section=windows,我获取的是版本 2021.3.2,30 天试用版。安装过程没有需要注意的,但即使是试用版,也需要登录 JetBrains 账号才能使用。 在 PhpStorm 中将 DVWA 项目作为已存在项目打开: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3428830391.png) 然后设置 php 解析: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3590303975.png) 此时打开任一 php 页面,比如 DVWA 的首页 index.php,代码侧边会显示如下几个浏览器按钮: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/62009623.png) 选择任一浏览器打开,错误提示如下: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3234525117.png) 意思是调用未定义函数 mysqli_connect() 失败,分析了一番并未解决。后续继续补充…… # 4、xdebug 调试 要实现网页在 browser 跑,在 PhpStorm 调试这个目标,得依次完成如下几件事: 1. PhpStorm 告知 browser 打开网页 2. browser 和 PhpStorm 通信,告知 PhpStorm 当前页面的执行信息 3. PhpStorm 接收到执行信息后,和断点等调试数据比对以执行调试 ## 4.1、PhpStorm 告知 browser 打开网页 PhpStorm 要告知 browser 要打开什么网页,首先它自己得知道,即怎么描述一个网页。我们用 url 组成来讲解: > url = 协议 + 主机 + 端口 + 虚拟目录 + 文件名+ 锚 + 参数 首先在 PHP->Servers 中创建一个 Server,我们起名叫 localhost,它指示了 url 中的主机+端口部分,在后面我们会用到: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/1674398970.png) 进行具体页面的配置: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/1922787625.png) ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3039522883.png) * 协议:DVWA 网站不是 https 协议的,所以不用勾选 * 主机+端口:在Server 处选上面配置的 localhost * 虚拟目录+文件名+锚+参数:在 Start URL 指定为 DVWA 的首页 ![图片.png](http://47.117.131.13/usr/uploads/2022/03/306345423.png) 至此 PhpStorm 已经可以明确要调试的是哪个页面了。同时配置调试时由 Firefox 浏览器来渲染页面。问题解决。 ## 4.2、browser 和 PhpStorm 通信,告知 PhpStorm 当前页面的执行信息 页面在 Firefox 中执行后,假设我们在 PhpStorm 中设置了断点,PhpStorm 怎么知道当前 Firefox 中页面的执行是否触发了断点,又怎么控制 Firefox 中的页面执行呢? PhpStorm 自身没有提供完整的调试 php 的能力,我们要借助 xdebug 这个扩展。在 https://xdebug.org/wizard 可以确认我们需要什么版本的 xdebug,以及配置教程。但 phpstudy 已经自带了,我们无需额外下载配置。 ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3612653963.png) 具体版本是 xdebug 2.7.2: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/1838310122.png) 要注意,xdebug 是 php 的扩展,而不是 PhpStorm 的扩展,更不是 Firefox 的扩展。所以 xdebug 工作的进程上下文是在 php 进程,这里说的是 browser 和 PhpStorm 的通信其实是不正确的。只是 php 工作在后台,调试时我们更直观地感受到的就是 browser 和 PhpStorm 的通信。 要实现调试,在执行 php 代码时,xdebug 需要把每一次执行数据都发送给 PhpStorm。这个过程是通过端口监听实现的,即: * xdebug 把执行数据发送至指定端口 * PhpStorm 在指定端口监听数据 在 php.ini 中添加以下配置,指明 xdebug 要把信息发送到 localhost:2333 端口,数据协议是 dbgp: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/2121085614.png) 同样 PhpStorm 也要相应配置: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3092454281.png) ![图片.png](http://47.117.131.13/usr/uploads/2022/03/1973424180.png) --- 至此,整个调试过程都已经明确,具体的调试交给 PhpStorm 即可。观察某一次调试过程,可见 phpstorm64 进程正在监听 2333 端口,接收调试信息: ![图片.png](http://47.117.131.13/usr/uploads/2022/03/3332747069.png) 最后修改:2022 年 03 月 14 日 07 : 50 PM © 允许规范转载