Web安全实战攻防演练教程:零基础搭建测试环境与常见攻击手法
为什么你需要自己的攻防演练环境
Web安全实战攻防演练教程的第一步,就是搞清楚“练手场”长什么样。
很多新人直接拿生产机器测试注入或跨站,轻则被封IP,重则触犯法律。
正确做法是在隔离环境里跑一套专门的漏洞靶场,比如 DVWA(Damn Vulnerable Web Application)。
它自带常见的SQL注入、XSS、文件包含等漏洞开关,你可以放心地一边打一边观察效果。
搭建实验环境的三种方式
方式一:本地虚拟机(最推荐)
- 下载 Metasploitable 2 或 DVWA 的 Docker 镜像。
- 安装 VirtualBox 并导入虚拟机文件,网络模式设为“仅主机(Host-Only)”,保证宿主机能访问即可。
- 启动后记录IP(例如
192.168.56.101),直接在浏览器打开http://192.168.56.101/dvwa/。
方式二:使用 LAMP 手动部署(适合想了解配置细节的同学)
在 Ubuntu 服务器上执行:
sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysqli -y
sudo systemctl start apache2 mysql
cd /var/www/html
sudo git clone https://github.com/digininja/DVWA.git
sudo chown -R www-data:www-data DVWA/
cd DVWA/config
sudo cp config.inc.php.dist config.inc.php
完成后修改 config.inc.php 里的数据库密码,然后访问 http://你的IP/DVWA/setup.php 点“Create/Reset Database”。
方式三:Docker 一键部署(最快)
docker run -d -p 80:80 vulnerables/web-dvwa
启动后直接打开 http://localhost/setup.php。
如果遇到端口冲突,把 80 改成其他端口即可。
实战演练:SQL注入与跨站脚本攻击(XSS)
SQL注入测试
登录DVWA后把安全等级调成“Low”,进入“SQL Injection”页面。
在输入框输入:
' OR '1'='1' --
点击提交,会看到所有用户数据全部返回。
这是因为你闭合了前面的单引号,后面的条件永远为真。
把这个结果截图保存,作为攻防日志的一部分。
XSS(反射型)测试
进入“XSS reflected”页面,输入:
提交后浏览器会弹出一个警告框。
这就是最简单的跨站脚本攻击:用户输入没被过滤,直接嵌入页面执行。
以上两条命令你都可以在真实练习中反复使用,直到清楚底层原理。注意:不要对着别人的网站这么做,只在自己的靶机上玩。
常见翻车现场与破解方法
问题1:DVWA 登录时报“CSRF token mismatch”
原因:浏览器缓存或 Cookie 冲突。
清空浏览器缓存,或者用无痕模式重新打开登录页即可。
问题2:SQL注入时页面只返回空白
检查是否不小心用了转义字符(比如反斜杠)。
建议重置数据库(/DVWA/setup.php)后重新测试。
同时确认 config.inc.php 里的 $_DVWA[ 'recaptcha' ] 配置没开。
问题3:XSS 弹框不出现
原因:DVWA 当前级别为“Impossible”(完全过滤)。
切回“Low”再试。
另外有些现代浏览器(Chrome)会拦截反射型 XSS,建议用 Firefox 或 Safari 测试。
验证你的防守能力:日志分析与修复加固
攻击完一定要查看日志,这是 Web安全实战攻防演练教程里最容易被忽略的一步。
查看 Apache 访问日志:
sudo tail -f /var/log/apache2/access.log
你会看到类似 GET /dvwa/vulnerabilities/sqli/? 的记录。
id=1'+OR+'1'%3D'1...
仔细看就能发现攻击参数。
如果想防护,可以在 config.inc.php 里把安全级别设为“High”或“Impossible”,这时 DVWA 会对输入做转义和过滤。
总结建议:练完一轮后,把靶机重置,重新用“High”级别再做一次,看同样的攻击是否还能成功。
然后尝试自己写一条简单的 WAF 规则(比如过滤单引号),加深对攻击与防守的理解。
如果中途卡壳,优先检查配置文件和网络连通性。
多练几次,你的安全意识和对日志的敏感度都能明显提升。