OSI七层模型和TCP/IP四层模型
在正式讲抓包前,先普及一下网络协议之间的关系。网上这类文章很多,此处只是以抛砖引玉的方式通过浅显易懂的入门需要的知识进行讲解。
首先需要知道两个模型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
HTTP和HTTPS都是位于TCP/IP模型的应用层的协议。HTTP是一种用于传输超文本的协议,而HTTPS是在HTTP协议基础上添加了安全性的协议。HTTPS通过SSL/TLS协议对通信进行加密和认证,保护数据的安全性和完整性。
- HTTP/HTTPS在TCP/IP的层次:
- HTTP协议位于TCP/IP模型的应用层,它定义了客户端和服务器之间的通信规则和数据格式。
- HTTPS协议也位于TCP/IP模型的应用层,它是HTTP协议的安全版本,通过SSL/TLS协议对通信进行加密和认证。
- HTTP与HTTPS的关系:
- HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议,它基于客户端-服务器模型,在客户端和服务器之间进行通信。
- HTTPS(HTTP Secure)是在HTTP协议基础上添加了安全性的协议。它使用SSL/TLS协议对通信进行加密和认证,保护数据的安全性和完整性。
- HTTP和HTTPS之间的主要区别在于安全性。HTTP是明文传输的,数据在传输过程中容易被窃听和篡改,不提供数据的机密性和完整性保护。而HTTPS使用SSL/TLS协议对数据进行加密和认证,确保数据的安全性和完整性。
- 在实际应用中,使用HTTP还是HTTPS取决于具体的需求和安全性要求。对于一些不涉及敏感信息的普通网页浏览,使用HTTP可以提供更快的传输速度。而对于涉及用户隐私和敏感数据的场景,使用HTTPS可以保护数据的安全性。
HTTP(S)的规范
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)的状态码
HTTP(S)协议定义了一系列状态码(Status Code),用于表示请求的处理结果和服务器的响应状态。状态码由三位数字组成,分为五个类别,每个类别具有不同的含义。以下是常见的HTTP(S)状态码及其含义:
-
1xx - 信息性状态码(Informational)
- 100 Continue:服务器已接收到请求的初始部分,并且客户端应该继续发送剩余的请求。
- 101 Switching Protocols:服务器已理解并接受客户端的请求,将切换到不同的协议。
-
2xx - 成功状态码(Success)
- 200 OK:请求成功,服务器成功处理了请求。
- 201 Created:请求成功,并在服务器上创建了新的资源。
- 204 No Content:请求成功,但响应中不包含实体内容。
-
3xx - 重定向状态码(Redirection)
- 301 Moved Permanently:请求的资源已永久移动到新位置。
- 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)的玩笑协议。这个协议描述了如何通过网络来控制一台咖啡壶。在这个玩笑中,"I’m a teapot"状态码被定义为当服务器是一台咖啡壶时返回的响应。始皇也在拿这个梗开玩笑
-
-
5xx - 服务器错误状态码(Server Error)
- 500 Internal Server Error:服务器遇到了意外的错误,无法完成请求。
- 503 Service Unavailable:服务器当前无法处理请求,一般是由于过载或维护。
这只是一些常见的HTTP(S)状态码,根据需要还有其他状态码。状态码提供了对请求处理结果的指示,客户端和服务器可以根据状态码来采取相应的操作和处理。
HTTP(S)协议定义了一系列状态码,用于表示请求的处理结果和服务器的响应状态。状态码分为五个类别:1xx(信息性状态码)、2xx(成功状态码)、3xx(重定向状态码)、4xx(客户端错误状态码)和5xx(服务器错误状态码)。状态码提供了对请求处理结果的指示,客户端和服务器可以根据状态码来采取相应的操作和处理。
http/https抓包的原理
HTTP/HTTPS抓包的原理是通过拦截网络通信流量,将请求和响应数据包进行捕获和分析。下面分别介绍HTTP抓包和HTTPS抓包的原理:
-
HTTP抓包的原理:
- HTTP抓包工具(如Burp、Wireshark、Fiddler、Charles等)在客户端和服务器之间作为中间人,拦截HTTP请求和响应数据包。
- 抓包工具在客户端和服务器之间建立代理服务器或中间人代理,并配置客户端或系统的网络设置,使流量经过抓包工具。
- 当客户端发送HTTP请求时,抓包工具会捕获请求数据包,并将其展示给用户。同样,抓包工具也会捕获服务器返回的HTTP响应数据包。
- 使用抓包工具,用户可以查看请求和响应的详细信息,包括请求头、响应头、请求体、响应体等,并进行分析和修改。
-
HTTPS抓包的原理:
- HTTPS抓包相对于HTTP抓包更加复杂,因为HTTPS使用SSL/TLS协议对通信进行加密和认证。
- HTTPS抓包工具需要在客户端和服务器之间建立中间人代理,并生成自己的SSL证书。
- 客户端在进行HTTPS通信时,抓包工具会伪装成服务器,向客户端发送自己生成的SSL证书。
- 客户端收到抓包工具的证书后,会验证证书的合法性。如果证书不是由可信的证书颁发机构签发,客户端会发出警告。
- 如果用户选择信任抓包工具的证书,客户端和抓包工具之间会建立安全连接,抓包工具可以解密客户端和服务器之间的SSL流量。
- 抓包工具捕获解密后的HTTPS请求和响应数据包,并对其进行展示和分析,用户可以查看解密后的数据。
抓包工具和服务端证书的相关情况:
-
抓包工具的证书:
- 为了能够拦截和解密HTTPS流量,抓包工具会生成自己的SSL证书。
- 这个证书被称为抓包工具的根证书(Root Certificate)或中间人证书(Man-in-the-Middle Certificate)。
- 抓包工具会将自己的根证书添加到操作系统或浏览器的受信任证书存储中,以便被信任和接受。
- 服务端的证书:
- 服务端在进行HTTPS通信时,会使用由可信的第三方机构(证书颁发机构)签发的SSL证书。
- 这个证书包含了服务端的公钥、域名信息和证书颁发机构的签名等。
- 客户端在收到服务端的证书后,会验证证书的合法性,包括检查签名、域名匹配和证书的有效期等。
抓包工具和服务端的证书之间的关系是通过以下方式实现的:
- 抓包工具的证书信任:
- 抓包工具的根证书被添加到操作系统或浏览器的受信任证书存储中,使其被信任和接受。
- 这样,当抓包工具拦截HTTPS流量时,它可以使用自己的根证书来替代服务端的证书,并与客户端建立安全连接。
- 证书验证和替换:
- 当客户端发起HTTPS请求时,抓包工具会拦截该请求,并使用自己的根证书来替代服务端的证书。
- 抓包工具会将服务端的证书解析出来,验证其合法性,并生成一个新的证书链,其中包含抓包工具的根证书。
- 抓包工具将新的证书链返回给客户端,客户端在验证证书时会接受抓包工具的根证书,并与抓包工具建立安全连接。
通过以上的证书信任和替换,抓包工具能够拦截和解密HTTPS流量,并展示明文的请求和响应数据,方便进行分析和调试。请注意,抓包工具的根证书只在本地机器上生效,不会影响其他用户的HTTPS通信。
HTTP抓包的原理是通过拦截HTTP请求和响应数据包进行捕获和分析。HTTPS抓包的原理相对复杂,需要在客户端和服务器之间建立中间人代理,并解密SSL流量。抓包工具可以捕获和展示HTTP/HTTPS请求和响应的详细信息,帮助用户进行调试、分析和修改。
抓包工具首席推荐之burpsuit
Burp Suite是一款功能强大的网络安全测试工具,广泛用于渗透测试、漏洞挖掘和应用程序安全评估。它由多个模块组成,提供了丰富的功能和工具,使安全测试人员能够有效地发现和利用应用程序的漏洞。
以下是Burp Suite的主要组成部分和功能
- Proxy代理:
- Burp Proxy是Burp Suite的核心组件,允许拦截、修改和分析HTTP/HTTPS请求和响应。
- 它可以作为中间人代理,捕获流量并允许用户查看和修改请求、响应的内容,以便进行调试和漏洞挖掘。
- Burp Proxy还提供了各种高级功能,如拦截规则、自动化扫描、HTTP历史记录等。
- Scanner扫描器:
- Burp Scanner是自动化漏洞扫描工具,用于发现应用程序的安全漏洞。
- 它通过对应用程序进行主动扫描,自动检测常见的漏洞类型,如跨站脚本攻击(XSS)、SQL注入、命令注入等。
- Burp Scanner可以生成详细的漏洞报告,帮助安全测试人员识别和修复潜在的安全风险。
- Spider爬虫:
- Burp Spider是一个Web应用程序爬虫,用于自动化地发现隐藏的页面和功能。
- 它通过跟踪和模拟用户的行为,自动遍历和访问应用程序的不同路径和链接。
- Burp Spider可以帮助测试人员发现未经授权的访问、敏感信息泄露等问题。
- Intruder暴力破解器:
- Burp Intruder是一个强大的暴力破解和Fuzz测试工具,用于测试应用程序的鲁棒性和安全性。
- 它可以自动化地发送大量的定制请求,对目标参数进行暴力破解、字典攻击、参数化Fuzz等。
- Burp Intruder可以帮助测试人员发现认证绕过、弱口令、输入验证问题等。
- Repeater重放器:
- Burp Repeater是一个交互式的工具,用于重放和修改请求,观察响应结果。
- 它提供了一个可编辑的请求编辑器,可以手动修改请求参数和头部信息,并观察修改后的响应。
- Burp Repeater对于调试和测试特定请求非常有用。
为什么推荐burp,burp在很久之前的版本是单纯一个抓包工具,每次使用的时候需要自己配置burp的证书,然后后面更新的版本自带了一个浏览器这样就不需要通过外部浏览器添加证书就能方便的抓包了,所以这个特性针对入门的小白很方便。安装包和破解包的话网上有很多,我只指一条路Github搜索Burp Suite Pro Loader & Keygen,这个工具能够自动更新和下载最新的版本,破解原理后面有空的话我也可以抽出源码进行讲解,原理跟始皇的agent方式注入很相似。
下一篇文章我会讲解Burp具体的抓包实战指南。后续的文章会讲解针对不同平台的抓包方式。如果有其他想要了解的内容也可以跟帖回复,我会根据大家的需求更新其他类型的文章。