此内容并非教学,而是一个实战笔记,所有操作均在虚拟机上进行
1:安装常用基础工具
打开终端:
执行:
sudo apt install -y vim curl wget git tree htop net-tools tmux unzip p7zip-full
这些是 Linux 和安全学习最常用的基础工具:
2:安装 Kali Top10 工具包
Kali 有一个官方精选工具集合:
执行:
sudo apt install kali-tools-top10 -y
会安装:
Nmap(端口扫描)
Metasploit Framework(漏洞利用框架)
Wireshark(抓包分析)
Burp Suite(Web安全)
SQLmap(SQL注入测试)
Hydra(密码审计)
John(密码破解)
这是最适合入门的一套
3:安装中文 man 手册(可选)
如果希望查看命令帮助时有中文:
sudo apt install manpages-zh -y
不过安全工具文档大部分还是英文,所以不是必须。
4:创建 Kali 快照(现在非常适合)
现在是一个干净状态。
关闭 Kali:
sudo poweroff
VirtualBox:
Kali
↓
快照
↓
拍摄
名称:
Kali-2026.3-base
以后:
安装工具失败
配置搞乱
实验破坏系统
直接恢复。
5.初始化 Metasploit
Metasploit 是 Kali 最核心的渗透测试框架之一。
先检查:
msfconsole
第一次启动可能需要几十秒。
如果看到:
msf6 >
说明成功。
然后退出:
exit
6.配置数据库(推荐)
打开另一个终端执行:
sudo systemctl enable postgresql
启动:
sudo systemctl start postgresql
初始化:
msfdb init
检查:
msfconsole
进入后:
db_statusdb_status
正常显示:
[*] Connected to msf. Connection type: postgresql
7.安装练习靶场
因为学习 Kali 最重要的是合法练习环境。
1. OWASP Juice Shop
练 Web:
SQL 注入
XSS
身份认证
文件上传
2. DVWA
经典 PHP 漏洞环境。
8.安装 OWASP Juice Shop
这是目前非常适合学习 Web 安全的靶场。
包含:
SQL注入
XSS
登录绕过
文件上传
JWT漏洞
安装 Docker:
sudo apt install docker.io docker-compose -y
启动:
sudo systemctl enable docker --now
运行:
sudo docker run -d \
--name juice-shop \
-p 3000:3000 \
bkimminich/juice-shop
说明:
-d:后台运行--name juice-shop:容器名称-p 3000:3000:把网站映射到 Kali 本机 3000 端口
第一次运行会下载镜像,可能需要几分钟。
完成后检查:
docker ps
正常应该看到类似:
CONTAINER ID IMAGE PORTS
xxxx bkimminich/juice-shop 0.0.0.0:3000->3000/tcp
然后打开 Kali 浏览器:
输入:http://127.0.0.1:3000
如果看到 Juice Shop 首页:
🎯 第一个 Web 安全靶场搭建完成。
9.安装代理脚本
虚拟机的内的网络如果没有走代理,将无法访问国外网站
因此需要虚拟机使用本机的代理
1.编辑 zsh 配置
执行:
nano ~/.zshrc
拉到最下面。
proxy-on() {
export http_proxy="http://10.0.2.2:7897"
export https_proxy="http://10.0.2.2:7897"
export HTTP_PROXY="http://10.0.2.2:7897"
export HTTPS_PROXY="http://10.0.2.2:7897"
echo "代理已开启"
}
proxy-off() {
unset http_proxy
unset https_proxy
unset HTTP_PROXY
unset HTTPS_PROXY
echo "代理已关闭"
}
保存:
Ctrl + O
Enter
Ctrl + X
2.重新加载 zsh 配置
执行:
source ~/.zshrc
开启:
proxy-on
应该显示:
代理已开启
查看:
env | grep -i proxy
应该看到:
http_proxy=http://10.0.2.2:7897
https_proxy=http://10.0.2.2:7897
测试:
proxy-on
curl https://www.google.com -I
关闭:
proxy-off
3.把 kali 用户加入 docker 组
执行:
sudo usermod -aG docker $USER
然后查看:
groups
应该会看到:
kali docker
10.Burp Suite + Firefox 浏览器代理 + Juice Shop 抓包
目标:
打开 Juice Shop → 浏览器访问 → Burp 截获 HTTP 请求 → 修改请求 → 理解 Web 渗透基础流程
这是安全学习中最重要的一步。
第1步:启动 Burp Suite
在 Kali 终端执行:
burpsuite
第一次启动可能会出现:
Burp 启动选项
选择:
Temporary project
然后:
Use Burp defaults
进入主界面。
第2步:确认 Burp 代理监听
进入:
Proxy
↓
Proxy settings
应该看到:
127.0.0.1:8080
状态:
Running
默认就是这个。
第3步:配置 Firefox 代理
Kali 自带 Firefox。
打开:
右上角菜单:☰
进入:设置
搜索:代理
找到:网络设置
点击:设置
选择:手动代理配置
填写:
HTTP代理:127.0.0.1
端口:8080
勾选:也将此代理用于 HTTPS
确定。
第4步:关闭 Burp 拦截(先)
Burp:
进入:Proxy
看到:Intercept is on
点击:Intercept is off
否则浏览网页会卡住。
第5步:测试代理
Firefox 输入:http://127.0.0.1:3000
打开 Juice Shop。
然后回 Burp:
进入:
Proxy
↓
HTTP history
你应该看到大量请求:
例如:
GET /
GET /main.js
GET /api/Products
如果看到:
🎉 成功!
说明:
Firefox
↓
Burp
↓
Juice Shop
链路建立。
第6步:开启第一个拦截实验
Burp:
打开:Proxy
点击:Intercept is on
Firefox 刷新:127.0.0.1:3000
这时候页面会卡住。
因为请求被 Burp 拦截。
你会看到:
例如:
GET / HTTP/1.1
Host: 127.0.0.1:3000
User-Agent: Firefox
点击:
Forward
请求继续。
第7步:认识 Burp 三个核心功能
以后主要用:
1. Proxy
抓包:浏览器 ↔ 网站
2. Repeater
修改请求:
例如:
原请求:id=1
改:id=2
重新发送。
3. Intruder
自动测试:
例如:
密码爆破
参数枚举
11.Burp CA 证书安装
Firefox 通过 Burp 访问 HTTPS 网站时,需要安装 Burp CA 证书。
第一步:关闭拦截(方便操作)
在 Burp:
Proxy → Intercept
点击:Intercept on
让它变成:Intercept off
第二步:访问 Burp 证书页面
Firefox 地址栏输入:http://burp
注意:
不是:https://burp
就是:http://burp
应该会出现:Welcome to Burp Suite
页面。
点击:CA Certificate
下载:cacert.der
第三步:导入 Firefox
Firefox:
右上角菜单 ☰
进入:设置
搜索:证书
进入:查看证书
选择:证书颁发机构
点击:导入
选择:cacert.der
弹窗:
勾选:信任此 CA 来识别网站
✅
然后确定。
第四步:测试
重新打开:https://www.google.com
如果没有证书错误,说明成功。
然后回到 Juice Shop:http://127.0.0.1:3000
Burp 已经拦截到了:GET http://10.0.2.15:3000/
请求内容:
GET / HTTP/1.1 Host: 10.0.2.15:3000 User-Agent: Firefox
说明整个链路已经打通:
Firefox ↓ Burp Proxy 127.0.0.1:8080 ↓ Juice Shop 10.0.2.15:3000
现在渗透测试环境已经搭建完成。
下一步:先关闭欢迎弹窗
点击 Firefox 里的:Dismiss
然后回到 Juice Shop 首页。
12.设置 Burp Target Scope(养成好习惯)
现在 Burp 会抓所有流量,包括:
Google
Firefox 更新
Kali 服务
我们只关注 Juice Shop。
操作:
Target ↓ Scope ↓ Add
Burp:
输入:http://10.0.2.15:3000
保存。
让 Burp 只显示目标流量
进入:
Proxy ↓ HTTP history
然后找到:
Filter
开启:Show only in-scope items
这样以后只看 Juice Shop。
熟悉第一个抓包
现在保持:
Proxy ↓ Intercept ↓ Intercept is ON
浏览器点击:Account
或者:登录
Burp 会停住请求。
会看到类似:POST /rest/user/login
里面有:{
"email":"xxx",
"password":"xxx"
}
这就是实际网站登录请求。
学习 Repeater(最重要)
抓到请求后:
右键:
Send to Repeater
然后:
Repeater
可以:
修改参数
重放请求
看服务器返回
这是以后分析漏洞最常用功能。
Juice Shop 登录抓包
步骤:
浏览器点击右上角头像
点击登录
随便输入:
邮箱:
test@test.com
密码:
123456
Burp 拦截
开始分析第一个 HTTP 登录请求。
请求:
POST http://10.0.2.15:3000/rest/user/login
这是 Juice Shop 的登录接口。
{
"email": "123",
"password": "231"
}
这说明:
✅ Firefox 代理成功
✅ Burp 拦截成功
✅ Juice Shop 登录接口被捕获
✅ 可以进入下一阶段学习
现在先做第一个操作:发送到 Repeater
这个是 Burp 最核心的功能。
在当前请求列表上:
鼠标右键:
Send to Repeater
或者快捷键:
Ctrl + R
然后点击顶部:
Repeater
会看到这个请求。
Repeater 是干什么的?
简单理解:
现在:
浏览器 → 网站
以后:
你 → Burp → 网站
你可以修改:
原来的:
{
"email":"123",
"password":"231"
}
改成:
{
"email":"test@test.com",
"password":"123456"
}
然后点击:
Send
观察服务器返回。
现在先不要研究漏洞
先熟悉三个地方:
1. Headers(请求头)
例如:
Host: 10.0.2.15:3000
告诉服务器访问哪个网站。
2. Body(请求数据)
这里:
{
"email":"123",
"password":"231"
}
这是登录提交的数据。
3. Response(响应)
服务器返回:
例如:
成功:
{
"authentication": "xxxxx"
}
失败:
{
"error": "Invalid email or password"
}
观察 Response
重点看三个东西:
1. HTTP 状态码
例如:
成功:
200 OK
失败:
401 Unauthorized
2. 返回数据
Juice Shop 登录成功会返回:
{
"authentication": {
"token": "xxxxx"
}
}
这个 token 很重要。
它相当于:
网站给你的身份证
以后访问用户功能都会带它。
3. 修改参数测试
发送一次以后。
回到左侧,把:
{
"email":"123",
"password":"231"
}
改成:
{
"email":"admin@juice-sh.op",
"password":"admin"
}
再点:
Send
观察区别。
顺便解释一下刚才的流程
刚才做的是:
浏览器:
输入账号密码
|
↓
生成 HTTP 请求
|
↓
Burp 拦截
|
↓
发送 Repeater
|
↓
人工修改
|
↓
发送服务器
这就是安全测试人员每天大量使用的流程。
现在分析第一个登录接口。之后会接触到:
HTTP 状态码
JWT Token
Cookie
API 测试
第一个 Juice Shop 漏洞思路
目前环境已经全部就绪。
13.观察正常登录请求
现在不要猜账号密码。
自己注册一个账号。
回浏览器 Juice Shop:
打开:
http://10.0.2.15:3000
点击:
Account
↓
Login
↓
Not yet a customer?
注册:
例如:
邮箱:
test123@test.com
密码:
Password123!
注册完成。
然后登录。
Burp 会再次拦截:
POST /rest/user/login
这一次应该返回:
200 OK
并且 Response 里面会有:
类似:
{
"authentication": {
"token": "eyJ..."
}
}
这个就是:
JWT Token
后面学习:
Cookie
JWT
权限控制
越权漏洞
Juice Shop 第一个漏洞
都会用到它。
拆解 Response。
1. 请求部分
发送:
POST /rest/user/login HTTP/1.1
Host: 10.0.2.15:3000
Body:
{
"email": "test123@test.com",
"password": "Password123"
}
这是你刚注册的测试账号。
2. 返回状态码
右侧第一行:
HTTP/1.1 200 OK
这表示:
✅ 登录成功
对比刚才:
失败:
401 Unauthorized
成功:
200 OK
3. 重点:JWT Token
Response 里面:
{
"authentication":{
"token":"eyJ0eXAiOiJKV1QiLCJhbGci..."
}
}
这个长字符串就是:
JWT Token
全称:
JSON Web Token
它相当于网站给你的“登录凭证”。
JWT 结构
你看到:
eyJ0eXAiOiJKV1QiLCJhbGci...
实际上由三部分组成:
Header.Payload.Signature
例如:
xxxxx.yyyyy.zzzzz
三个部分:
① Header
告诉服务器:
使用什么算法。
例如:
{
"alg":"HS256",
"typ":"JWT"
}
② Payload
保存用户信息。
例如:
{
"email":"test123@test.com",
"bid":6
}
你的截图下面已经看到:
"bid":6,
"email":"test123@test.com"
③ Signature
签名。
作用:
防止别人修改 Payload。
14.下一步实验:查看 JWT
复制 token。
打开:
(这是学习 JWT 常用工具)
把 token 粘贴进去。
会看到:
Header:
{
"alg":"HS256"
}
Payload:
类似:
{
"id":6,
"email":"test123@test.com"
}
15.学习 Burp 的另一个核心:Authorization
登录以后。
浏览器访问:
比如:
Basket
或者:
Your Profile
然后 Burp 抓一个请求。
你会发现请求里面多了一行:
类似:
Authorization: Bearer eyJ...
这个就是:
后续请求携带登录身份
流程:
登录
|
↓
服务器返回 JWT
|
↓
浏览器保存 Token
|
↓
以后每次请求带 Token
|
↓
服务器识别你是谁
下一步操作
现在回浏览器:
关闭 Burp Repeater 标签不用动
回 Juice Shop
点击右上角:
Account
或者:
Basket
Burp 拦截新的请求
找到:
Authorization: Bearer xxxx
下一阶段开始学习:
JWT 在 Web 安全中的作用
为什么 Token 泄露危险
Juice Shop 第一个真实漏洞练习
现在已经完成了 Web 安全学习里非常重要的一环。
搭的环境和流程已经和真实渗透测试环境很接近了。
登录后的认证请求,这一步比刚才更关键。
从抓包可以看到:
请求:
GET /rest/user/whoami?fields=email HTTP/1.1
Host: 10.0.2.15:3000
重点在这里:
Authorization: Bearer
eyJ0eXAiOiJKV1QiLCJhbGciOi...
这就是刚才说的 JWT Token 身份认证。
现在把整个流程串起来
刚才完成的是:
① 输入账号密码
POST /rest/user/login
↓
② 服务器验证
↓
③ 返回 JWT
↓
④ 浏览器保存 JWT
↓
⑤ 请求用户信息
GET /rest/user/whoami
携带:
Authorization: Bearer JWT
服务器看到:
Authorization: Bearer xxxx
就知道:
这是已经登录的用户
下一步:认识 JWT 内容
先不要攻击,先学分析。
复制这一段:
eyJ0eXAiOiJKV1QiLCJhbGciOi...
注意:
只复制:
Authorization: Bearer 后面的内容
不要复制:
Bearer
然后打开:
https://jwt.io
把 Token 粘进去。
会看到:
Header
类似:
{
"typ":"JWT",
"alg":"RS256"
}
或者:
{
"alg":"HS256"
}
Payload
你应该能看到类似:
{
"data":{
"id":6,
"email":"test123@test.com"
}
}
或者:
{
"id":6,
"email":"test123@test.com"
}
这里有一个非常重要的安全知识:
JWT 默认只是:
编码,不是加密
也就是说:
任何拿到 Token 的人,都可以看到 Payload。
但是不能随便修改,因为有:
Signature
签名校验。
16.下一步实验(Juice Shop 第一个漏洞)
开始做第一个真实漏洞:
Broken Authentication(认证绕过)
目标:
看看 JWT 是否保护正确。
现在在 Burp:
切回:
Proxy
→ HTTP history
找到:
GET /rest/user/whoami?fields=email
右键:
Send to Repeater
然后:
在 Repeater 里:
把这一行:
Authorization: Bearer eyJ...
改成:
Authorization: Bearer aaa
点击:
Send
观察返回。
正常应该:
401 Unauthorized
说明:
JWT 校验正常。
然后继续学习:
JWT 篡改原理
Burp Decoder 解码 JWT
Juice Shop 的第一个官方挑战
如何使用 Intruder 自动测试
刚才做的测试:
把:
Authorization: Bearer eyJ0eXAiOiJKV1Qi...
改成:
Authorization: Bearer aaa
然后 Send。
返回:
HTTP/1.1 304 Not Modified
这里有一点需要注意:
304 并不是 JWT 校验结果。
它是 HTTP 缓存状态,说明这个请求没有返回新的内容。
原因是:虽然改了 Authorization,但是请求里面还保留了:
Cookie: language=en; welcomeBanner_status=dismiss; token=xxxxx
注意这里:
Cookie:
token=xxxxx
Juice Shop 同时支持:
Header 认证:
Authorization: Bearer JWT
Cookie 认证:
token=JWT
所以你改掉 Authorization 后,服务器可能仍然从 Cookie 里面读取 token。
下一步:真正测试 JWT
在 Repeater 里:
找到这一行:
Cookie: language=en;welcomeBanner_status=dismiss;token=xxxxx
删除:
;token=xxxxx
变成:
Cookie: language=en;welcomeBanner_status=dismiss
然后保持:
Authorization: Bearer aaa
再次点击:
Send
正常结果应该变成:
HTTP/1.1 401 Unauthorized
类似:
Invalid token
然后做第二个测试
恢复:
Authorization: Bearer 原来的JWT
但是删除:
Cookie里的token
Send。
如果返回:
200 OK
说明:
Authorization Bearer 是主要认证方式。
现在已经掌握 Burp 一个核心技能:
修改请求 → 重放 → 对比响应
这就是以后:
SQL注入
XSS
越权
JWT攻击
参数篡改
全部都会用到的流程。
解释一下你刚刚学到的东西
现在这个请求实际上有三个身份来源:
1. Authorization Header
Authorization: Bearer JWT
标准 API 登录方式。
2. Cookie
token=JWT
浏览器保存方式。
3. 缓存控制
If-None-Match
HTTP 缓存机制。
在真实渗透测试中,经常会遇到:
改了参数但是响应没变化
改了 Token 但是结果一样
Burp 显示 304
很多新人会误以为漏洞不存在。
实际上只是被缓存干扰。
只要删掉 If-None-Match 再 Send,基本就能正常