DVWA 靶场实验报告 (Medium Level)
难度等级: Medium (中级) 报告说明: 本报告基于 DVWA 靶场中等级别安全设置。相比于低等级,中等级别加入了基础的防御机制(如后缀检查、简单的字符串过滤及 CSRF Token 验证),本报告详细记录了 17 项漏洞的绕过技巧与复现过程。
📑 目录
- Brute Force --- 暴力破解
- Command Injection --- 命令注入
- CSRF --- 跨站请求伪造
- File Inclusion --- 文件包含
- File Upload --- 文件上传
- Insecure CAPTCHA --- 不安全的验证码
- SQL Injection --- SQL 注入
- SQL Injection (Blind) --- SQL 盲注
- Weak Session IDs --- 弱会话 ID
- XSS (DOM) --- DOM 型跨站脚本
- XSS (Reflected) --- 反射型跨站脚本
- XSS (Stored) --- 存储型跨站脚本
- CSP Bypass --- CSP 策略绕过
- JavaScript Attacks --- JavaScript 攻击
- Authorisation Bypass --- 越权访问
- Open HTTP Redirect --- 开放重定向
- Cryptography --- 密码学
01. Brute Force --- 暴力破解
中级防御
后端加入了 sleep(2) 函数,旨在减缓暴力破解的速度。
绕过技巧
- 多线程与并发:虽然有延迟,但攻击者仍可使用 Burp Suite 的多线程模式。
- 逻辑绕过:如果登录失败次数未被锁定,单纯的延迟只能增加攻击时间,无法阻断攻击。
02. Command Injection --- 命令注入
中级防御
后端设置了黑名单,过滤了 && 和 ; 等常用连接符。
绕过技巧
- 替换符号:使用
|或&代替&&。 - Payload:
127.0.0.1 | whoami
03. CSRF --- 跨站请求伪造
中级防御
增加了 HTTP_REFERER 检测,验证请求是否来自本站。
观察url的参数
?password_new=admin&password_conf=admin&Change=%B8%C4%B1%E4#
直接访问此url提示不正确
源码可以看到有请求的来源检测
绕过技巧
- Referer 伪造/绕过:如果后端只判断域名是否包含关键字,可构造文件名包含关键字的恶意页面。
- 利用跨站漏洞:结合 XSS 漏洞在同源环境下发起请求,此时 Referer 验证将失效。
04. File Inclusion --- 文件包含
中级防御
过滤了 ../ 等相对路径跳转符。
绕过技巧
- 双写绕过:使用
....//。当后端删除一组../后,剩下的字符会自动组成新的../。 - Payload:
?page=..././..././..././etc/passwd访问url vulnerabilities/fi/?page=....//....//....//....//....//1.php也可以进行远程地址访问 vulnerabilities/fi/?page=htthttp://p://baidu.com
05. File Upload --- 文件上传
中级防御
检查了上传文件的 Content-Type(MIME 类型)。
直接上传webshell提示失败
绕过技巧
- 抓包修改 MIME:将
application/octet-stream改为image/jpeg。成功绕过 后续就是连接webshell了
- 截断绕过:在某些老旧环境中,可使用
%00截断。
06. Insecure CAPTCHA --- 不安全的验证码
中级防御
加入了 passed_captcha 参数检测。
绕过技巧
- 参数篡改:在抓包时手动添加或修改
step=2及验证通过的标识参数,直接跳过图形验证逻辑。
07. SQL Injection --- SQL 注入
中级防御
简单的sql注入,不过是要在post请求包里修改
绕过技巧
可以保存数据包用sqlmap跑也可以自己手注入,因为比较简单就用手注入
order by检测为2 联合注入显示其他信息 后续注入数据库 表 列 值即可
08. SQL Injection (Blind) --- SQL 盲注
绕过技巧
同上,利用数字型注入点进行布尔或时间盲注。
盲注,直接用sqlmap吧,
sqlmap -r D:\Backup\桌面\1.txt --dbs --batch
直接跑出来了,不过用的是布尔盲注和时间盲注
09. Weak Session IDs --- 弱会话 ID
中级防御
Session ID 基于当前时间戳生成。
破解思路
- 时间同步攻击:通过预测服务器时间,计算可能的 Session ID 进行碰撞劫持。
10. XSS (DOM) --- DOM 型跨站脚本
绕过技巧
中级通常会对 <script> 标签做基础过滤,可以尝试使用图片标签的 onerror 事件:
- Payload:
<img src=x onerror=alert(1)>访问?default=<img src=x onerror="alert(1)">
11. XSS (Reflected) --- 反射型跨站脚本
中级防御
过滤了 <script> 标签。
绕过技巧
- 大小写绕过:
<sCript>alert(1)</sCript> - 双写绕过:
<scr<script>ipt>alert(1)</script><img src=x onerror="alert(‘xss’)">
12. XSS (Stored) --- 存储型跨站脚本
绕过技巧
除了上述标签绕过,中级往往只限制了 message 字段。
message过滤比较严格,无法攻击
但是name参数过滤简单
- 多点测试:尝试在
Name字段进行注入(可能需要通过 F12 修改输入框长度限制)。<Script>alert(1)</Script>但遇到一个问题,前端做了简单的输入框长度检测简单,在源代码里面修改长度即可
成功
13. CSP Bypass --- CSP 策略绕过
绕过技巧
寻找 CSP 白名单中的 CDN 资源,利用这些资源中的 JSONP 接口来执行恶意代码。 查看源代码,有多个csp参数过滤
<?php
$headerCSP = "Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";
header($headerCSP);
// Disable XSS protections so that inline alert boxes will work
header ("X-XSS-Protection: 0");
# <script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script>
?>
本来过滤很严格的,但是多了一个unsafe-inline这个
导致其他只允许部分内联函数的限制失效了,允许所有的内联函数了
所有我们直接自己构造就好了,无限制
14. JavaScript Attacks --- JavaScript 攻击
实验过程
提交原本参数用hackbar查看发包的数据
然后用success提交再次查看发包数据 提示无效的token
我们发现token没变 token是changeme的倒叙然后前后加xx 我们更具此规律构造success的token XXsseccusXX 提交正确
15. Authorisation Bypass --- 越权访问
逻辑分析
admin用户可以正常查看修改
修改到普通用户我们看不那那个界面的选项卡了
直接访问目录会提示无权限
但是我们通过翻admin的网络数据包时发现,他把数据写到一个php文件之后才加载的
而此php文件没有做权限鉴权
可以通过直接访问这个php文件来查看数据,信息泄露
16. Open HTTP Redirect --- 开放重定向
绕过技巧
如果后端过滤了 http://,可以尝试使用 // 协议相对路径或者进行 URL 编码绕过。
查看网页代码,看到重定向的文件的参数
尝试直接构造
vulnerabilities/open_redirect/source/medium.php?redirect=http://baidu.com
提示不允许绝对url,显然对参数进行了过滤
我们将http删除,直接用//来实现远程地址访问
vulnerabilities/open_redirect/source/medium.php?redirect=//baidu.com
查看源代码发现确实对http的https进行了检测过滤
17. Cryptography --- 密码学
进阶内容
查看源代码
对密码有个简单的硬加密,可以直接破解
2.要同时满足三个条件:
user 等于 sweep
ex 大于当前时间戳(未过期)
level 等于 admin
篡改token密钥实现admin登录