OSI 七层模型和 TCP/IP 四层模型
在深入 Burp Suite 的强大功能之前,我们先放慢脚步,夯实一下网络基础知识。 你可能会觉得这些理论有点枯燥,但它们就像武功的内功心法,是理解和运用 Burp Suite 这类 「神兵利器」 的根基。 磨刀不误砍柴工,掌握扎实的网络基础,才能更高效、更深入地掌握 Burp Suite,发挥它的真正威力。
首先需要知道两个模型 OSI 七层模型和 TCP/IP 四层模型:
OSI 七层模型 | TCP/IP 四层模型
--------------------------------------------------
应用层 (Application Layer) | 应用层 (Application Layer)
--------------------------------------------------
表示层 (Presentation Layer) | -
--------------------------------------------------
会话层 (Session Layer) | -
--------------------------------------------------
传输层 (Transport Layer) | 传输层 (Transport Layer)
--------------------------------------------------
网络层 (Network Layer) | 网络层 (Network Layer)
--------------------------------------------------
数据链路层 (Data Link Layer)| 网络接口层 (Network Interface Layer)
--------------------------------------------------
物理层 (Physical Layer) | -
--------------------------------------------------
OSI 七层模型和 TCP/IP 四层模型是理论上的网络通信模型,用于描述和组织网络协议的功能和层次结构。它们是网络通信领域的基础和参考,对于网络协议的设计和实现起到了重要的指导作用。
然而,在实际的工业界中,TCP/IP 协议族更加广泛地被使用和实现,而 OSI 七层模型相对较少直接应用。这是因为 TCP/IP 协议族是互联网的核心协议,几乎所有的互联网通信都基于 TCP/IP 协议。因此,TCP/IP 协议族更加贴合实际应用和实际需求。
实际工业界中的网络通信系统和协议栈往往是基于 TCP/IP 协议族的,但是可以参考 OSI 七层模型的思想和层次结构进行设计和组织。TCP/IP 协议族的实际实现往往是在网络接口层、网络层、传输层和应用层进行的,而对于表示层、会话层和物理层的功能,可能会被合并到其他层次或由应用层来实现。
此外,一些特定的行业和领域可能会根据实际需求进行定制化的协议设计,在设计过程中可能会参考 OSI 七层模型的思想,但实际的协议结构和层次可能与标准的模型有所不同。
http/https 抓包的原理
好的,理解了网络模型,对于我们接下来学习抓包就非常有帮助了。虽然实际工作中我们更多接触的是 TCP/IP 四层模型,但 OSI 七层模型可以帮助我们更系统地理解网络协议的分层概念。 就好比我们了解了房子的地基、梁柱、墙壁和屋顶这些基本结构,再去看具体的装修细节就更容易理解了。
HTTP(Hypertext Transfer Protocol) 和 HTTPS(HTTP Secure) 都是基于 TCP/IP 协议的应用层协议,用于在客户端和服务器之间进行数据传输和通信。下面分别介绍 HTTP 和 HTTPS 的规范:
- HTTP 规范:
- HTTP 的规范主要由 RFC 2616(HTTP/1.1 规范) 定义,随后更新为 RFC 7230-7235。
- HTTP 规范定义了请求报文和响应报文的格式和语义,包括请求行、状态行、头部字段和报文主体等。
- HTTP 规范定义了多种请求方法 (如 GET、POST、PUT、DELETE 等) 和状态码 (如 200、404、500 等) 的含义和用途。
- HTTP 规范还定义了头部字段的语法和用法,包括通用头部字段、请求头部字段、响应头部字段和实体头部字段等。
- HTTPS 规范:
- HTTPS 是在 HTTP 协议基础上添加了安全性的协议,通过 SSL/TLS 协议对通信进行加密和认证。
- HTTPS 的规范主要由 RFC 2818(HTTP Over TLS) 定义,随后更新为 RFC 7230-7235。
- HTTPS 规范与 HTTP 规范的大部分内容相同,但在安全性方面有所扩展和修改。
- HTTPS 规范要求客户端和服务器之间建立安全连接,使用 SSL/TLS 协议进行数据的加密和认证。
- HTTPS 规范还定义了使用 SSL/TLS 协议进行握手、证书验证和密钥交换的过程。
- 请求报文:
- 请求行:包含请求方法、请求 URL 和 HTTP 版本。
- 请求头部:包含与请求相关的各种信息,如 Host、User-Agent、Content-Type 等。
- 请求主体 (可选):包含请求发送的数据,如表单数据、JSON 数据等。
- 响应报文:
- 状态行:包含响应状态码和状态描述。
- 响应头部:包含与响应相关的各种信息,如 Content-Type、Content-Length 等。
- 响应主体 (可选):包含响应返回的数据,如 HTML 页面、JSON 数据等。
- 请求方法:
- HTTP 定义了多种请求方法,如 GET、POST、PUT、DELETE 等,用于指定请求的操作类型。
- 每种请求方法有不同的语义和用途,用于实现不同的操作。
- 状态码:
- HTTP 定义了一系列状态码,用于表示请求的处理结果。
- 常见的状态码有 200 表示成功、404 表示资源未找到、500 表示服务器内部错误等。
- 头部字段:
- HTTP 定义了各种头部字段,用于承载请求和响应的各种元数据。
- 头部字段可以包含通用头部字段、请求头部字段、响应头部字段和实体头部字段等。
- Cookie:
- HTTP 通过 Cookie 机制来实现状态管理和会话跟踪。
- 服务器可以通过 Set-Cookie 响应头部字段将 Cookie 信息发送给客户端,客户端将 Cookie 信息保存并在后续请求中发送回服务器。
- 缓存:
- HTTP 通过缓存机制来减少网络传输和提高性能。
- 客户端和服务器可以通过 Cache-Control、Expires、Last-Modified 等头部字段来控制缓存行为。
HTTP 和 HTTPS 的规范定义了请求报文、响应报文、请求方法、状态码、头部字段等方面的规。HTTP 规范主要由 RFC 2616 和 RFC 7230-7235 定义,而 HTTPS 规范主要由 RFC 2818 和 RFC 7230-7235 定义。HTTP 规范定义了基本的请求和响应格式,而 HTTPS 规范在此基础上添加了安全性的要求,通过 SSL/TLS 协议对通信进行加密和认证。
HTTP(S) 协议的请求方式
HTTP 定义了多种请求方法 (也称为 HTTP 动词),用于指定请求的操作类型。以下是常见的 HTTP 请求方法及其简单介绍:
- GET:用于从服务器获取资源,一般用于获取数据,不应该对服务器产生副作用。
请求报文示例:
GET /path/to/resource HTTP/1.1
Host: example.com
- POST:用于向服务器提交数据,一般用于发送数据、更新资源或进行服务器端操作。
请求报文示例:
POST /path/to/resource HTTP/1.1
Host: example.com
Content-Type: application/json
{"key": "value"}
- PUT:用于向服务器上传新的资源或更新现有资源,用于替换服务器上指定位置的资源。请求报文示例:
PUT /path/to/resource HTTP/1.1
Host: example.com
Content-Type: text/plain
Updated content
- DELETE:用于删除服务器上指定位置的资源。
请求报文示例:
DELETE /path/to/resource HTTP/1.1
Host: example.com
- HEAD:类似于 GET 请求,但只获取响应头部信息,不返回响应体,常用于获取资源的元数据。
请求报文示例:
HEAD /path/to/resource HTTP/1.1
Host: example.com
- OPTIONS:用于获取服务器支持的请求方法和可用选项,用于探测服务器的功能和配置。
请求报文示例:
OPTIONS /path/to/resource HTTP/1.1
Host: example.com
HTTP(S) 的状态码
HHTTP(S) 协议定义了一系列状态码 (Status Code),用于表示服务器对客户端请求的处理结果和响应状态。状态码由三位数字组成,分为五个类别,每个类别代表不同的响应含义。客户端和服务器可根据状态码采取相应的操作和处理。
状态码分类及常见示例:
1xx - 信息性状态码 (Informational)
表示请求已被服务器接收,客户端应继续发送请求的剩余部分。
- 100 Continue:服务器已接收到请求的初始部分,客户端应继续发送剩余内容。
- 101 Switching Protocols:服务器理解并接受客户端请求,准备切换到新的协议。
2xx - 成功状态码 (Success)
表示请求已成功处理。
- 200 OK:请求成功,服务器已成功处理请求并返回响应内容。
- 201 Created:请求成功,并在服务器上创建了新的资源。
- 204 No Content:请求成功,但响应中不包含任何实体内容。
3xx - 重定向状态码 (Redirection)
表示客户端需要采取进一步的操作才能完成请求,通常涉及资源位置的变化。
- 301 Moved Permanently:请求的资源已永久移动到新位置,客户端应使用新的 URL。
- 302 Found:请求的资源临时移动到不同的位置,客户端应临时访问新位置。
- 304 Not Modified:客户端缓存的资源仍然有效,可以直接使用缓存版本,无需重新下载。
4xx - 客户端错误状态码 (Client Error)
表示客户端请求存在错误,服务器无法处理请求。
- 400 Bad Request:服务器无法理解客户端请求,通常是请求语法或参数错误。
- 401 Unauthorized:请求需要身份验证,客户端需提供有效的身份凭证。
- 404 Not Found:请求的资源不存在或无法找到。
- 418 I'm a teapot:此状态码并非正式 HTTP 规范定义,而是 1998 年 IETF(Internet Engineering Task Force) 愚人节玩笑中提出的,源自名为"Hyper Text Coffee Pot Control Protocol"(HTCPCP) 的虚构协议。该协议描述了如何通过网络控制咖啡壶。"418 I'm a teapot"状态码表示服务器拒绝冲泡咖啡,因为它是一个茶壶。始皇也曾以此梗开玩笑。
5xx - 服务器错误状态码 (Server Error)
表示服务器在处理请求时发生了意外错误或异常情况。
- 500 Internal Server Error:服务器遇到意外情况,无法完成请求。
- 503 Service Unavailable:服务器当前无法处理请求,通常是由于服务器过载或维护。
状态码的作用与意义
HTTP(S) 状态码提供了请求处理结果的明确指示,客户端和服务器可以根据状态码采取相应的操作和处理措施。以上列举的是一些常见的状态码,实际应用中还有其他更多状态码可供使用,具体使用时可根据实际需求进行选择和判断。
http/https 抓包的原理
HTTP/HTTPS 抓包的本质是通过拦截网络通信流量,捕获并分析客户端与服务器之间的请求和响应数据包。下面分别介绍 HTTP 和 HTTPS 抓包的具体原理:
一、HTTP 抓包原理
HTTP 协议采用明文传输,抓包过程相对简单:
- 中间人代理模式:
抓包工具 (如 Burp Suite、Wireshark、Fiddler、Charles 等) 在客户端与服务器之间充当中间人代理,拦截 HTTP 请求和响应数据包。 - 代理配置:
用户通过配置客户端或系统的网络设置,使 HTTP 流量经过抓包工具。 - 数据捕获与分析:
当客户端发送 HTTP 请求时,抓包工具捕获请求数据包并展示给用户;服务器返回的 HTTP 响应数据包同样被捕获和展示。 - 请求与响应的查看与修改:
用户可通过抓包工具查看请求头、响应头、请求体、响应体等详细信息,并进行分析和修改。
二、HTTPS 抓包原理
HTTPS 协议使用 SSL/TLS 加密通信,抓包过程较为复杂:
- SSL/TLS 加密通信:
HTTPS 通信通过 SSL/TLS 协议进行加密和认证,数据以密文形式传输。 - 中间人代理与证书替换:
抓包工具在客户端与服务器之间建立中间人代理,并生成自己的 SSL 证书 (称为根证书或中间人证书)。 - 证书信任机制:
客户端发起 HTTPS 请求时,抓包工具伪装成服务器,向客户端发送自己生成的 SSL 证书。
客户端收到证书后,会验证证书合法性。由于抓包工具的证书并非由可信的证书颁发机构签发,客户端通常会发出安全警告。 - 用户信任与流量解密:
若用户选择信任抓包工具的根证书,客户端与抓包工具之间便建立安全连接。此时,抓包工具可解密客户端与服务器之间的 SSL 流量。 - 数据捕获与分析:
抓包工具捕获解密后的 HTTPS 请求和响应数据包,用户可查看明文数据,进行分析和调试。
三、抓包工具证书与服务端证书的关系
(一) 抓包工具的证书 (根证书)
- 抓包工具生成自己的 SSL 根证书 (Root Certificate),用于拦截和解密 HTTPS 流量。
- 用户需将此根证书添加到操作系统或浏览器的受信任证书存储中,以便客户端信任该证书。
(二) 服务端的证书
- 服务端使用由可信第三方机构 (CA) 签发的 SSL 证书,包含服务端公钥、域名信息及 CA 签名。
- 客户端收到服务端证书后,会验证证书合法性,包括签名有效性、域名匹配性和证书有效期等。
(三) 证书替换与验证过程
- 客户端发起 HTTPS 请求时,抓包工具拦截请求,并使用自己的根证书替代服务端证书。
- 抓包工具解析并验证服务端证书合法性后,生成新的证书链 (包含抓包工具根证书) 返回给客户端。
- 客户端验证并接受抓包工具的根证书后,与抓包工具建立安全连接,从而实现流量解密。
四、小结
- HTTP 抓包:通过中间人代理直接拦截明文 HTTP 请求和响应数据包,过程简单直接。
- HTTPS 抓包:需建立中间人代理并进行证书替换,通过用户信任抓包工具的根证书实现 SSL 流量解密,过程相对复杂。
通过以上机制,抓包工具能够有效捕获和展示 HTTP/HTTPS 请求与响应的详细信息,帮助用户进行调试、分析和修改。需要注意的是,抓包工具的根证书仅在本地机器上生效,不会影响其他用户的 HTTPS 通信。
抓包工具首席推荐之 burpsuit
Burp Suite 是一款功能强大的 Web 安全测试工具,广泛应用于渗透测试、漏洞挖掘和应用程序安全评估。它集成了多个模块,提供丰富的功能和工具,帮助安全测试人员高效地发现并利用应用程序中的漏洞。本文将详细介绍 Burp Suite 的主要组成部分及其功能,并分享一些推荐使用它的理由和技巧。
Burp Suite 的主要组成部分及功能
1. Proxy 代理 (核心组件)
- 拦截与修改请求:Burp Proxy 允许用户拦截、修改和分析 HTTP/HTTPS 请求与响应,作为中间人代理捕获流量,便于调试和漏洞挖掘。
- 高级功能:提供拦截规则、自动化扫描、HTTP 历史记录等功能,帮助用户更高效地进行安全测试。
2. Scanner 扫描器 (自动化漏洞检测)
- 自动化漏洞扫描:Burp Scanner 能够主动扫描应用程序,自动检测常见漏洞类型,如跨站脚本攻击 (XSS)、SQL 注入、命令注入等。
- 详细报告生成:扫描完成后,生成详细的漏洞报告,帮助安全测试人员快速识别和修复潜在风险。
3. Spider 爬虫 (自动化页面发现)
- 自动遍历应用程序:Burp Spider 通过模拟用户行为,自动发现隐藏页面和功能,遍历应用程序的不同路径和链接。
- 发现敏感信息泄露:帮助测试人员发现未经授权访问、敏感信息泄露等安全问题。
4. Intruder 暴力破解器 (暴力破解与 Fuzz 测试)
- 自动化攻击测试:Burp Intruder 可自动发送大量定制请求,进行暴力破解、字典攻击、参数化 Fuzz 测试。
- 发现安全弱点:帮助测试人员发现认证绕过、弱口令、输入验证问题等安全漏洞。
5. Repeater 重放器 (交互式请求测试)
- 请求重放与修改:Burp Repeater 允许用户手动修改请求参数和头部信息,实时观察响应结果。
- 调试与分析:特别适合对特定请求进行深入调试和分析,快速定位问题。
为什么推荐使用 Burp Suite?
- 易于上手:早期版本的 Burp Suite 仅作为抓包工具使用,用户需要手动配置证书,操作较为繁琐。新版 Burp Suite 自带内置浏览器,无需额外配置证书即可轻松抓包,非常适合入门新手。
- 功能强大且集成化:Burp Suite 集成了多种渗透测试工具,允许测试人员结合手工和自动化技术,更高效地完成 Web 应用程序的安全测试。
- 跨平台支持:Burp Suite 基于 Java 开发,具备良好的跨平台性,适用于不同操作系统环境 。
关于安装与破解的建议
网络上有很多 Burp Suite 的安装包和破解工具,这里推荐一种简单有效的方法:在 Github 搜索 Burp Suite Pro Loader & Keygen,该工具能够自动更新并下载最新版本。后续有机会我会专门抽出源码进行详细讲解。