很多人一上来就学”怎么打站点”,结果连请求是怎么到服务器的都说不清,遇到非常规情况就卡死。渗透的本质是”在协议层面找错位”——你得像快递员一样清楚包裹经过哪几道关卡。这一篇先把最底层的协议地基打牢。
本文及本系列所有内容,仅用于你拥有合法授权的环境(如自有靶场、授权测试)中的学习与防御研究。请勿对未授权目标进行任何测试。
为什么渗透要懂协议
你用的每一个工具(Burp、Nmap、sqlmap),底层都在和协议打交道。比如:
- 为什么改
Host头能打虚拟主机?因为 HTTP 协议规定它用来区分同 IP 的多个站点; - 为什么能”半连接扫描”?因为 TCP 三次握手是可以只走一半的;
- 为什么 HTTPS 比 HTTP 难拦?因为数据被 TLS 加密了。
不懂协议,你只会按教程点按钮;懂了协议,你才知道每个按钮背后在干什么,才能应对没教程的现场。 所以这一篇是后面所有内容的地基。
OSI 七层模型:理论的”参考地图”
OSI(Open Systems Interconnection)把网络通信分成七层,从上到下:
| 层 | 名称 | 干什么 | 典型设备/协议 |
|---|---|---|---|
| 7 | 应用层 | 给用户用的程序 | HTTP、FTP、DNS |
| 6 | 表示层 | 数据格式/加密 | TLS、编码 |
| 5 | 会话层 | 建立/维护会话 | — |
| 4 | 传输层 | 端到端传输 | TCP、UDP |
| 3 | 网络层 | 寻址和路由 | IP、路由器 |
| 2 | 数据链路层 | 相邻节点传输 | 交换机、MAC |
| 1 | 物理层 | 比特流传输 | 网线、光纤 |
记不住没关系,记住一句口诀:“应表会传网数物”(应用、表示、会话、传输、网络、数据链路、物理)。OSI 更多是”理论参考”,实际互联网用的是下面要讲的 TCP/IP 四层。
TCP/IP 四层:实战的”真实地图”
实际互联网按 TCP/IP 模型运作,比 OSI 更精简:
- 应用层:HTTP、DNS、FTP 等(对应 OSI 上三层);
- 传输层:TCP / UDP,负责”这台机器的哪个程序”和”数据到没到”;
- 网络层(网际层):IP,负责”送到哪台机器”;
- 网络接口层:网卡和网线那一套(对应 OSI 下两层)。
理解”IP 找机器、端口找程序”这个分工,是渗透的基本功:一个目标 8.8.8.8:80 里,8.8.8.8 是 IP(网络层),80 是端口(传输层),合起来才精确定位到一个服务。
TCP 三次握手与端口扫描
TCP 建立连接要”三次握手”:
客户端 → 服务器:SYN(我想连)
服务器 → 客户端:SYN+ACK(可以,我也想连)
客户端 → 服务器:ACK(好的,开始吧)
渗透里”端口扫描”就是去试探目标哪些端口开着。常见 Nmap 扫描类型就建立在这套机制上:
- 全连接扫描(-sT):走完三次握手,最稳但最容易被记录;
- SYN 半开扫描(-sS):发 SYN,收到 SYN+ACK 就走人(不发最后的 ACK),不易留日志,最常用;
- NULL/Xmas/FIN 扫描:发非常规包,用来绕过某些防火墙(依据 RFC 对异常包的回应判断)。
这些手法仅用于你授权的资产。对别人网络扫描可能触发告警甚至违法。
HTTP:Web 的”普通话”
HTTP(超文本传输协议)是浏览器和服务器说话的方式。一次请求/响应长这样:
请求:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
响应:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 123
<html>...</html>
请求行(GET /index.html HTTP/1.1):方法 + 路径 + 协议版本。
请求头:一堆 Key: Value,携带元信息(Host、Cookie、User-Agent 等)。
空行:头和正文的分隔。
正文(可选):POST 提交的数据就放这。
理解这个结构,你才懂为什么 Burp 能”改包”——它就是在请求发出前,让你编辑这些头和正文。
常见 HTTP 方法
| 方法 | 含义 | 渗透关注点 |
|---|---|---|
| GET | 获取资源 | 参数在 URL,易被记录/缓存 |
| POST | 提交数据 | 参数在正文,相对隐蔽 |
| PUT | 上传资源 | 若开启危险,可传 Webshell |
| DELETE | 删除资源 | 若开启危险 |
| OPTIONS | 查询支持的方法 | 看服务器暴露了哪些方法 |
| HEAD | 只看响应头 | 探测服务信息 |
有些服务器错误地开启了 PUT/DELETE,就成了突破口——这叫”HTTP 方法滥用”。
HTTPS 与 TLS:加密的那层
HTTPS = HTTP + TLS。TLS 在 HTTP 之下加了一层加密,保证:
- 机密性:中间人看不懂内容;
- 完整性:内容没被篡改;
- 身份认证:证书证明”你连的真是 example.com”。
渗透含义:HTTPS 流量默认看不到明文,要用代理(见下)做”中间人解密”才能看,而这就需要客户端信任你的证书。
URL 结构:每个字段都是输入点
https://user:pass@example.com:443/path/page?a=1&b=2#frag
└协议┘ └认证┘ └─主机─┘ └端口┘ └路径┘ └─查询参数─┘ └锚点┘
渗透测试里,路径、参数(query)、甚至主机头都可能是注入点。不要只盯着 ?id=1 这种明显参数,Cookie、Header、路径段都可能是输入。
HTTP(S) 代理:你的”显微镜”
做 Web 渗透,Burp Suite 或 Fiddler 这类代理是标配。原理:
浏览器 → 代理(Burp) → 服务器
浏览器 ← 代理(Burp) ← 服务器
你把浏览器流量先发给 Burp,Burp 让你查看、拦截、修改每一个请求和响应。配置要点:
- 浏览器或系统设置代理地址为
127.0.0.1:8080(Burp 默认端口); - 导出 Burp 的 CA 证书,装进浏览器”受信任根证书”,才能解密 HTTPS;
- 开启 “Intercept” 就能逐个改包。
仅在自己机器、自己授权的测试里配置代理和装证书。给别人的设备装你的证书 = 能获得他所有 HTTPS 明文,这是严重越权行为。
更多实战案例:把 HTTP 流程拆开看
我们日常访问网页,背后是一次次 HTTP 请求响应。用浏览器开发者工具切到 Network 面板,刷新页面,你会看到一长串请求:先是 HTML 文档,再是里面的 css、js、图片,每个都有方法(GET/POST)、状态码(200/301/404)、请求头(Cookie、User-Agent、Referer)和响应头(Set-Cookie、Content-Type)。做安全测试时,这一步叫”流量观察”:你要搞清楚一个功能到底发了什么、带没带 token、返回里有没有敏感信息。比如登录接口返回里若直接带了密码或 token,就是信息泄露。
更多实战案例:HTTPS 与证书
HTTPS 并不是”换了个协议”那么简单,它是 HTTP 套了一层 TLS 加密。抓包时若看到 Mixed Content(页面是 https 却加载了 http 资源),浏览器会拦截,这也可能是漏洞点。自签名证书、过期证书、证书域名不匹配,在测试环境常见,但要分清”这是测试方便”还是”生产也这样”——生产用自签名证书意味着传输可被中间人解密,是严重问题。
常见坑
- 只测功能不看流量:很多逻辑漏洞(如越权、信息泄露)藏在响应头或隐藏字段里,不看流量发现不了。
- 忽略状态码:301/302 跳转可能暴露后台路径,403 可能只是前端拦截后端没拦。
- 把 POST 当安全:POST 只是不显示在 URL,参数一样能被改,别以为 POST 就防篡改。
- 忽视 WebSocket:现代应用用 ws/wss 通信,普通代理抓不到,要用支持 ws 的工具。
进阶:抓包与改包
学会用代理工具(如 Burp Suite、Fiddler、mitmproxy)拦截请求,改掉参数再发出去,是几乎所有 Web 漏洞利用的基础。比如把 id=1 改成 id=2 看是否越权读到别人数据;把 price=100 改成 price=1 看能否低价下单。协议理解越深,你能构造的测试越精准。
小测验
- 问题1:为什么只点功能按钮不够,还要看流量?答案:越权、信息泄露等常藏在响应头或隐藏字段。
- 问题2:POST 请求比 GET 安全吗?答案:不,参数一样可改,只是不在 URL 显示。
- 问题3:Mixed Content 是什么?答案:https 页加载了 http 资源,会被浏览器拦截。
更多实战案例:从流量发现逻辑漏洞
很多逻辑漏洞藏在响应里:登录失败返回”用户名不存在”暴露账号是否存在;某个接口响应里带了大量不该返回的用户信息;删除操作只在前端隐藏按钮但接口仍可调。看流量时要带着”这里有没有多返回/少校验”的怀疑。改一个参数重放,对比两次响应差异,差异处往往就是漏洞。
常见坑(终补)
- 只测功能不看流量:越权、信息泄露常藏在响应头或隐藏字段。
- 忽略状态码:301/302 可能暴露后台,403 可能只是前端拦。
- 把 POST 当安全:POST 参数一样可改,别以为防篡改。
- 忽视 WebSocket:现代应用用 ws/wss,普通代理抓不到。
进阶(终补):抓包与改包
学会用代理工具拦截请求,改掉参数再发出去,是几乎所有 Web 漏洞利用的基础。比如把 id=1 改成 id=2 看是否越权;把 price=100 改成 price=1 看能否低价下单。协议理解越深,能构造的测试越精准。配合重放、对比响应,效率倍增。
小测验(终补)
- 问题1:为什么只点功能不够还要看流量?答案:越权、信息泄露常藏在响应头或隐藏字段。
- 问题2:POST 比 GET 安全吗?答案:不,参数一样可改,只是不在 URL 显示。
- 问题3:Mixed Content 是什么?答案:https 页加载 http 资源,会被浏览器拦截。
实战要点:日常抓包的正确姿势
养成”每个功能都看一眼流量”的习惯。用代理拦截,观察:请求方法、路径、参数、Cookie、自定义头;响应状态码、Set-Cookie、返回的数据里有没有敏感字段;有没有隐藏表单、注释掉的接口。改一个参数(id、user_id、price、role)重放,对比响应差异。差异处就是突破口。熟练后,你看一个功能就能在脑子里过一遍”它能怎么被滥用”。
易错提醒
别只点功能按钮就以为测完了;别把 POST 当安全(参数照样可改);别忽略 301/302 跳转暴露的后台路径;别忽视 WebSocket(用支持 ws 的代理)。协议理解越深,你能构造的测试越精准,发现也越深。
自测
- 为什么只点功能不够还要看流量?答:越权、信息泄露常藏在响应头或隐藏字段。
- POST 比 GET 安全吗?答:不,参数一样可改,只是不在 URL 显示。
- Mixed Content 是什么?答:https 页加载 http 资源,会被浏览器拦截。
延伸思考:协议理解决定测试深度
同样一个登录功能,懂协议的人会去试:改 POST 为 GET 看是否还能登录(可能绕过重校验)、改 Content-Type 看后端是否换解析逻辑、加 X-Original-URL 看是否被代理信任。协议细节里藏着大量边界。所以学安全不能只学”漏洞名”,要把 HTTP、Cookie、缓存、编码这些底层机制吃透,测试才有深度。
一句话自测
- 为什么 POST 不等于安全?答:参数照样可改,POST 只是不在 URL 显示。
- 看流量主要看什么?答:方法、参数、Cookie、状态码、响应里有无敏感字段。
这一篇你该记住的
渗透测试是”在协议层面找错位”,不懂协议就只能照猫画虎。OSI 七层是理论参考,实战用 TCP/IP 四层;IP 找机器、端口找程序;TCP 三次握手支撑了端口扫描的各种手法;HTTP 请求=请求行+头+空行+正文,理解结构才能改包;HTTPS 靠 TLS 加密;URL 每个字段都可能是输入点;Burp 这类代理是看/改流量的显微镜。
协议地基打好了,下一步就是”先摸清目标”——下一篇讲 信息收集,渗透 80% 的时间其实都在这里:子域名、端口、目录、指纹,一个都不放过。