集成开发环境phpStudy安装与配置指南(包含DVWA)_phpstudy安装教程-CSDN博客https://blog.csdn.net/2503_91800161/article/details/160226759?ops_request_misc=elastic_search_misc&request_id=c3cc6ac75774b778a4426a5d038733f7&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-3-160226759-null-null.541^v3^pc_search_result_blog2&utm_term=DVWA&spm=1018.2226.3001.4450DVWA--CSRF漏洞原理分析及利用,解题步骤与代码分析_dvwa csrf实例教程-CSDN博客
https://blog.csdn.net/2503_91800161/article/details/160253325?ops_request_misc=elastic_search_misc&request_id=c3cc6ac75774b778a4426a5d038733f7&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-2-160253325-null-null.541^v3^pc_search_result_blog2&utm_term=DVWA&spm=1018.2226.3001.4450DVWA--SQL注入漏洞分析(解题步骤)_dvwa sql注入漏洞-CSDN博客
https://blog.csdn.net/2503_91800161/article/details/159964715?ops_request_misc=elastic_search_misc&request_id=c3cc6ac75774b778a4426a5d038733f7&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-1-159964715-null-null.541^v3^pc_search_result_blog2&utm_term=DVWA&spm=1018.2226.3001.4450DVWA--SQL注入漏洞分析(原理及知识拓展)_dcvw sql low级别是字符型还是数字型注入-CSDN博客
https://blog.csdn.net/2503_91800161/article/details/159964722?ops_request_misc=elastic_search_misc&request_id=c3cc6ac75774b778a4426a5d038733f7&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-5-159964722-null-null.541^v3^pc_search_result_blog2&utm_term=DVWA&spm=1018.2226.3001.4450DVWA--Brute Force (暴力破解)通关指南-CSDN博客
https://blog.csdn.net/2503_91800161/article/details/160927774?ops_request_misc=elastic_search_misc&request_id=c3cc6ac75774b778a4426a5d038733f7&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~ElasticSearch~search_v2-4-160927774-null-null.541^v3^pc_search_result_blog2&utm_term=DVWA&spm=1018.2226.3001.4450
目录导航
- 注意点
- 学习方法
- 总结
注意点
打 DVWA 靶场本身没风险,关键是别让它变成别人打你的入口。核心几条:
必做
- 环境隔离:装在虚拟机 / Docker / 云主机独立实例里,网络模式选NAT 或 host-only,绝不绑定到公网或办公内网。DVWA 是"设计上就是漏洞机器",谁扫到都能拿 shell。
- 用完即毁:打完
docker rm -f或直接删虚拟机快照,别长期挂着。 - 只打自己的靶场:未经授权的真实站点一律不碰,这是法律红线(《网络安全法》/刑法 285/286 条)。
部署常见坑
4. Docker 最省事(docker run --rm -it -p 127.0.0.1:80:80 vulnerables/web-dvwa),注意端口映射写成127.0.0.1:80而不是0.0.0.0:80,否则同网段直接可访问。
| 对比维度 | Docker 部署 | 手动部署(phpstudy / XAMPP) |
|---|---|---|
| 安装难度 | 一条命令即可拉起,无需手动配置 PHP/MySQL,适合快速上手 | 需手动安装并配置 PHP、MySQL、Apache,步骤较多,容易踩坑 |
| 环境隔离性 | 容器隔离,与宿主机互不影响,用完即毁,安全性更高 | 直接跑在本机环境,与系统其他服务共享资源,隔离性较弱 |
| PHP 版本兼容 | 镜像自带匹配的 PHP 版本,不存在mysql_扩展缺失问题 | DVWA 1.9 及更早依赖 PHP5 的mysql_扩展,PHP7+ 会报错,需用 1.10+ |
| 清理便捷度 | 一条docker rm -f即可彻底删除,不留残留 | 需手动卸载组件、清理数据库和文件,残留较多 |
| 适合人群 | 追求快速部署、注重环境隔离、不想折腾本机环境的读者 | 想深入理解 Web 环境搭建、需要在本机调试源码的读者 |
5. 手动装(phpstudy / XAMPP):DVWA 1.9 及更早依赖 PHP5 的mysql_扩展,PHP7+ 会报错,建议直接用 1.10+(mysqli)。
6.php.ini要开allow_url_include=On、allow_url_fopen=On、display_errors=On,否则 File Inclusion 那关做不了。
7. 装完先跑/setup.php点Create / Reset Database,默认账号admin/password。
8. 右上角DVWA Security切换 Low/Medium/High/Impossible,新手从 Low 开始,逐级对比源码理解过滤逻辑。
练习建议
9. 全程挂 Burp Suite 抓包,别只用浏览器。
10. 每关做完看对应vulnerabilities/<漏洞>/source/low.php对比 high.php,理解防护差异,比自己瞎试高效。
11. 关掉 reCAPTCHA(配置项留空即可,别去申请 key)。
补充:常见报错与排查
| 报错信息 | 可能原因 | 解决方案 |
|---|---|---|
Fatal error: Call to undefined function mysql_connect() | PHP 版本过高,DVWA 1.9 及更早版本需要 PHP5 +mysql_扩展 | 换用 DVWA 1.10+(mysqli)或改用 Docker 镜像 |
| 数据库初始化失败 | MySQL 服务未启动,或config/config.inc.php里的数据库账号密码与本地不一致 | 确认 MySQL 服务已启动,并核对配置文件中的账号密码(默认root/ 空密码) |
| File Inclusion 关卡打不通 | php.ini未开启allow_url_include=On,RFI 必须依赖该配置 | 检查并开启allow_url_include=On |
| 页面空白或 500 | display_errors=On未开启,或 Apache/Nginx 存在错误 | 开启display_errors=On,再查 Apache/Nginx 错误日志 |
| 端口被占用 | Docker 方式下80端口已被其他服务占用 | 改成127.0.0.1:8080:80,访问http://127.0.0.1:8080 |
| DVWA Security 切换后页面无变化 | 切换后未刷新页面,或浏览器缓存了旧页面;部分关卡需要重新提交请求才会生效 | 切换后强制刷新(Ctrl+F5)或重启浏览器;确认右上角显示的安全级别已更新,再重新访问目标关卡 |
补充:练习节奏建议
- 每天固定 1–2 小时,别贪多,每关吃透再进下一关。
- 每关至少打两遍:第一遍按直觉试,第二遍对照源码重打,理解为什么能过。
- 把每关的 payload 和防护代码整理成自己的笔记,方便回头复习。
- 遇到卡关先看官方源码和社区 writeup,再自己复现,别直接抄答案。
学习方法
用 phpstudy 跑就用四步法打每一关:Low 手打 → Medium 找绕过差异 → High 读源码想为什么这么防 → Impossible 理解根本防护。下面给学习顺序。
先补基础(半天)
- 搞懂 HTTP 请求/响应、GET vs POST、Cookie/Session 的传递。
- Burp Suite 会抓包、改包、放包、Repeater 重放,这是后面所有关卡的工具。
- 浏览器 F12 会看源码、改 DOM、看 Console。
这三块是 Web 安全最基础、也最实用的能力:HTTP 协议理解 → Burp Suite 操作 → 浏览器 F12 观察与修改。后面做 CTF Web 题、渗透测试练习、漏洞验证,基本都绕不开它们。
1. HTTP 请求 / 响应
浏览器访问网站时,会向服务器发送一个HTTP 请求;服务器处理完后返回一个HTTP 响应。
一个典型请求长这样:
GET /user?id=1 HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 Cookie: session=abc123响应长这样:
HTTP/1.1 200 OK Content-Type: text/html Set-Cookie: session=abc123 <html>...</html>请求里主要看:方法、URL、请求头、请求体。
响应里主要看:状态码、响应头、响应体。常见状态码:
状态码 含义 安全意义 200 成功 正常返回 302 跳转 可能涉及登录、重定向 403 禁止访问 权限不足 404 资源不存在 路径探测依据 500 服务器错误 可能泄露报错信息 HTTP 本身是无状态的,也就是说服务器默认不会记住“你是谁”。所以才会用 Cookie / Session 来维持会话。
2. GET vs POST
GET 和 POST 不只是“参数放哪里”的区别,更关键的是语义不同。
对比点 GET POST 数据位置 URL 查询参数 请求体 Body 用途 获取资源 提交数据 是否幂等 通常幂等 通常非幂等 缓存 容易被缓存 一般不缓存 安全性 参数暴露在 URL 相对更隐蔽 典型场景 搜索、分页、查询 登录、注册、上传 例如:
GET /search?q=burp HTTP/1.1POST /login HTTP/1.1 Content-Type: application/x-www-form-urlencoded username=admin&password=123456做安全测试时,GET 参数常出现在 URL 里,容易被篡改;POST 参数虽然不在 URL 里,但同样可以通过 Burp 抓包修改,不能认为 POST 就一定安全。
3. Cookie / Session 传递
Cookie 是浏览器端保存的小数据;Session 是服务器端保存的会话数据。
典型流程:
- 用户登录成功;
- 服务器返回响应头:
Set-Cookie: JSESSIONID=xxx;- 浏览器保存这个 Cookie;
- 下次请求自动带上:
Cookie: JSESSIONID=xxx;- 服务器根据 Session ID 找到对应会话,判断用户身份。
所以常见关系是:
Session 存在服务器,Cookie 存在浏览器;Session ID 通常通过 Cookie 传递。
安全上要特别注意:
- Cookie 被劫持,可能导致会话被盗;
HttpOnly可降低 JS 读取 Cookie 的风险;Secure要求 HTTPS 传输;- Session ID 泄露等于身份泄露;
- Cookie 禁用后,Session ID 也可能通过 URL 重写传递。
4. Burp Suite:抓包、改包、放包、重放
Burp Suite 是 Web 安全测试里最常用的工具之一。基础流程可以按这个练:
配置代理
Burp 默认监听127.0.0.1:8080,浏览器代理也要指向这个地址。抓包
打开Proxy → Intercept,点击Intercept is on,浏览器访问目标站点后请求会被拦截。改包
在 Intercept 面板直接修改 URL 参数、Cookie、Header、Body,例如把id=1改成id=2。放包
点击Forward发送修改后的请求;点击Drop丢弃当前请求。Repeater 重放
在 Intercept 或 HTTP History 中右键请求,选择Send to Repeater,然后在 Repeater 里反复修改并点击Send,观察响应差异。Repeater 很适合做漏洞验证,比如测试参数篡改、越权、SQL 注入、XSS、敏感接口访问等。
5. 浏览器 F12:源码、DOM、Console
F12 开发者工具主要看这几个面板:
面板 用途 安全相关 Elements 查看和修改 DOM 观察前端逻辑、隐藏字段 Console 执行 JS 查看 Cookie、调试交互 Network 查看请求响应 分析接口、参数、Header Application 查看存储 检查 Cookie/SessionStorage Sources 查看源码、断点 分析前端校验逻辑 常用操作:
- 按
F12打开开发者工具;- 在Elements里右键元素,可以
Edit as HTML修改 DOM;- 在Console里执行 JS,例如:
document.cookie document.querySelector("input[name=role]").value = "admin"
- 在Network里查看接口请求、状态码、请求头和响应体;
- 在Application里查看 Cookie、LocalStorage、SessionStorage。
F12 的修改只影响本地页面渲染,不会直接修改服务器数据;但它可以帮你理解前端校验、隐藏字段、接口参数和会话状态,这对后续用 Burp 做服务端测试很有帮助。
建议练习路径
可以按这个顺序练:
- 用 F12 Network 看一个登录请求,分清 GET/POST、Header、Body、Cookie;
- 用 Burp 拦截同一个登录请求,观察原始报文;
- 在 Burp Intercept 里改参数、改 Cookie,再 Forward;
- 把请求发送到 Repeater,反复改
id、role、token等字段;- 用 F12 Console 查看
document.cookie,对比 Burp 里的 Cookie 字段;- 在靶场环境里验证越权、会话伪造、参数篡改等基础问题。
所有操作只建议在授权靶场、CTF 题目或自己搭建的环境里练习,不要对真实网站做未授权测试。
阶段一:无过滤类(先建立"输入即攻击点"意识)
- Brute Force — 理解无防护爆破,练 Burp Intruder 字典攻击,对比 High 的 sleep/锁定。
- Command Injection — 学
|&&;拼接系统命令,练命令分隔符绕过。 - Weak Session IDs — 看 cookie 生成规律,理解会话可预测的危害。
阶段二:注入类(重点)
- SQL Injection — 手注为主:判断列数、
union select、读库表字段、拖数据。别一上来就 sqlmap,先手打。 - SQL Injection (Blind) — 布尔盲注 + 时间盲注,理解无回显时怎么判断,再上 sqlmap 对照。
- 每关 High 看过滤函数(
mysql_real_escape_string/ 预处理),理解参数化查询为什么能根治。
阶段三:文件类(拿 shell 的关键)
- File Inclusion — LFI 读
/etc/passwd、日志包含 getshell;再试 RFI(这关需要allow_url_include=On)。 - File Upload — 从直接传 php 到查 MIME、改 Content-Type、改扩展名(
.php5/.phtml)、图片马 + 包含。 - 这两关建议放一起练,实战里经常组合用。
阶段四:客户端类
- XSS (Reflected) — 反射型,先弹窗,再偷 cookie,理解输出编码防护。
- XSS (Stored) — 存储型,危害最大,练打 cookie / 打后台。
- XSS (DOM) — 前端 JS 漏洞,看
location.hash之类 sink,跟后端没关系。 - CSRF — 理解"浏览器自动带 cookie"的本质,写一个伪造表单页面去改密码。
- CSP Bypass / JavaScript Attacks — 进阶,理解 CSP 策略和前端校验绕过。
练习习惯
- 每关在
vulnerabilities/<关卡>/source/下把 low/medium/high/impossible 四份源码都读一遍,这是 DVWA 最大价值。 - 每关写一条笔记:漏洞原理 / 利用 payload / 防护手段。回头能复述才算过关。
- 全程 Low→High 不要在低难度停留太久,Medium/High 的绕过才是涨功力的地方。
打完 DVWA 想进阶,下一步可以接Pikachu(更全的分类)→SQLi-Labs(专攻注入)→VulnHub / HTB(完整靶机提权)。
总结
回顾全文,DVWA 练习的关键可以浓缩为以下几点:
- 环境隔离是红线:靶场必须装在虚拟机 / Docker / 云主机独立实例里,网络模式选 NAT 或 host-only,绝不绑定公网或办公内网;打完即毁,只打自己的靶场。
- 部署选型看需求:追求快速上手、环境隔离选 Docker(一条命令拉起);想深入理解环境搭建、在本机调试源码选 phpstudy / XAMPP(注意 PHP 版本与
mysql_扩展兼容)。 - 练习节奏要稳:每天固定 1–2 小时,每关至少打两遍,把 payload 和防护代码整理成笔记,卡关先看源码和 writeup 再自己复现。
- 四阶段学习路径:先补 HTTP / Burp / F12 基础,再按「无过滤类 → 注入类 → 文件类 → 客户端类」逐层推进,建立完整的漏洞认知体系。
- 源码对比法最涨功力:每关把 low / medium / high / impossible 四份源码都读一遍,理解防护差异和绕过思路,比瞎试高效得多。
- 常见报错先排查配置:PHP 版本过高、数据库初始化失败、
allow_url_include未开启、端口被占用等问题,按表格里的方案逐一核对即可。 - 进阶路线清晰:打完 DVWA 接Pikachu(更全分类)→SQLi-Labs(专攻注入)→VulnHub / HTB(完整靶机提权),一步一个台阶。
靶场练习贵在坚持,每过一关就离真正的 Web 安全能力更近一步。保持好奇、多读源码、勤做笔记,你会发现自己对漏洞的理解越来越深。加油,下一关见!