文章目录
网络协议基础02
BurpSuite安装与使用
BurpSuite简介
BurpSuite是一个集成化的渗透测试工具,它集合了多种渗透测试组件,使我们自动化地或手工地能更好的完成对 Web 应用的渗透测试和攻击。
BurpSuite是由Java语言编写而成,而依托Java自身的跨平台性,使得软件在不同系统平台使用更加方便。
BurpSuite使用
Proxy简介
BurpSuite是以拦截代理的方式,拦截所有通过代理的网络流量,如客户端的请求数据、服务器端的返回信息等。 BurpSuite主要拦截http和https协议的流量,通过拦截, Burp Suite 以中间人的方式,可以对客户端请求数据、服务端返回做各种处理,以达到安全评估测试的目的。
-
浏览器设置
firefox浏览器代理插件:
https://addons.mozilla.org/zh-CN/firefox/addon/switchyomega/edge浏览器代理插件:
https://microsoftedge.microsoft.com/addons/detail/proxy-switchyomega/fdbloeknjpnloaggplaobopplkdhnikc?hl=zh -
https抓包
-
https证书下载
方法一:
Proxy > Options > Proxy Listeners > Regenerate CA certificate Import / export CA certificate > Export > Certificate in DER format > next
方法二:
浏览器设置代理
127.0.0.1:8080
后,访问http://burp
,点击页面 CACertificate 按钮,下载证书 cacert.der 。 -
安装证书
双击打开
burpsuite.der
证书文件,选择安装证书->选择,将所有证书都放入受信任的根证书颁发机构
-
firefox浏览器导入证书
火狐浏览器右上角栏→选项→右上角搜索处搜“证书”→证书颁发机构->导入->选择下载的
cacert.der
证书->信任证书->确定查看证书,有了PortSwigger机构的证书,导入成功
-
-
火狐浏览器抓包问题
问题:总是有到
http://detectportal.firefox.com/success.txt
的请求流量解决:- 在浏览器的地址栏输入about:config。
- 输入network.captive-portal-service.en,进行查找。
- 本来该项的值是true,双击true,改成false即可。
HTTP
HTTP基础知识
HTTP是什么
HTTP是超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议。是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的互联网文件都必须遵守这个标准。
HTTP的名字「超文本协议传输」,它可以拆成三个部分:
- 超文本
- 协议
- 传输
-
协议
HTTP是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。
-
传输
就是把一堆东西从A点搬到B点,或者从B点搬到A点。
HTTP 协议是一个双向协议。
HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。
我们在上网冲浪时,浏览器是请求方A,百度网站就是应答方B。双方约定用HTTP协议来通信,于是浏览器把请求数据发送给网站,网站再把一些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图片、视频了。
-
超文本
HTTP传输的内容是「超文本」
「文本」,在互联网早期的时候只是简单的字符文字,但现在「文本」的涵义已经可以扩展为图片、视频、压缩包等,在 HTTP 眼里这些都算做「文本」。
「超文本」,它就是超越了普通文本的文本,它是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。
HTML 就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等的链接,在经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了。
HTTP是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。
统一资源定位符(URL)
URL(统一资源定位符):我们常说的网址,包含了用于查找资源的足够的信息,而一个完整的URL包含下面几部分:
URL 遵守一种标准的语法,它由协议、主机名、域名、端口、路径、以及文件名这六个部分构成,其中端口可以省略。具体语法规则如下:
protocol://[[user[:password]@]host[:port]][/path][?query][#fragment]
[协议名]://[用户名]:[密码]@[主机名]:[端口]/[路径]?[查询参数]#[片段ID]
protocol:指定使用的传输协议,最常用的是通过 HTTP/HTTPS 协议来定位网络资源。
mailto:用户打开邮箱的客户端
ftp:用来做文件的转换
file:用来获取文件
user:password 需要认证后才能访问时的账号密码。
host:表示合法的因特网主机域名或者IP地址。
port:用于表示在传输层上交换信息的进程端口号,标明了获取服务器资源的入口,http协议默认端口号为80,不同的协议默认端口号不同。
path:指定请求服务器上资源的路径。
?query:可选,用于给动态网页传递参数,可以有多个参数,用"&"符号隔开,每个参数的键值之间用"="隔开。
#fragment:信息片断字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。
例如:
https://en.wikipedia.org:443/wiki/Hypertext_Transfer_Protocol?id=123#HTTP/1.1_response_messages
统一资源标志符(URI)
URI:Universal Resource Identifier统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。
HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
HTTP使用统一资源标识符(URI)来传输数据和建立连接。
URI和URL的区别:URL是URI的一个子集。
URN:Universal Resource Name统一资源名称,通过特定命名空间中的唯一名称或ID来标识资源。
URI可被视为定位符(URL),名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。
HTTP客户端请求消息
HTTP请求报文:web客户端向服务器发送的请求
HTTP请求由四个部分组成:
- 请求行
- 请求头部
- 空行
- 请求正文
请求行
Method Request-URI HTTP-Version CRLF
Method:表示请求方法;
Request-URI:是一个统一资源标识符;
HTTP-Version:表示请求的HTTP协议版本;
CRLF:表示回车和换行
除了作为结尾的CRLF外,不允许出现单独的CR或LF字符
请求方法
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
CONNECT 保留将来使用,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
PATCH 用于将局部修改应用到资源。(由 RFC 5789 指定的方法)
HTTP1.0定义了三种请求方法:GET、POST、HEAD方法。
HTTP1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT方法。
请求头部字段
请求头部字段:
Header:Header_Value CRLF
允许客户端传递关于自身的信息和希望的响应形式。
在HTTP/1.1协议中,所有的请求头,除Host外,都是可选的。
Host
客户端发送请求时,用来指定服务器的域名。
Host: www.A.com
有了Host字段,就可以将请求发往「同一台」服务器上的不同网站。
Content-Lengt
服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据长度。
Content-Length: 1000
#如上面则是告诉浏览器,本次服务器回应的数据长度是 1000 个字节,后面的字节就属于下一个回应了。
Connection
Connection字段最常用于客户端要求服务器使用 TCP 持久连接,以便其他请求复用。
HTTP/1.1版本的默认连接都是持久连接,但为了兼容老版本的HTTP,需要指定Connection首部字段的值为Keep-Alive。
Connection: keep-alive
一个可以复用的 TCP 连接就建立了,直到客户端或服务器主动关闭连接。但是,这不是标准字段。
Content-Type
Content-Type字段用于服务器回应时,告诉客户端,本次数据是什么格式。
Content-Type: text/html; charset=utf-8
#上面的类型表明,发送的是网页,而且编码是UTF-8。
客户端请求的时候,可以使用 Accept 字段声明自己可以接受哪些数据格式。
Accept: */*
#上面代码中,客户端声明自己可以接受任何格式的数据。
Content-Encoding
Content-Encoding字段说明数据的压缩方法。表示服务器返回的数据使用了什么压缩格式。
Content-Encoding: gzip
#上面表示服务器返回的数据采用了 gzip 方式压缩,告知客户端需要用此方式解压。
Accept-Encoding: gzip, deflate
#客户端在请求时,用 Accept-Encoding 字段说明自己可以接受哪些压缩方法。
空行
表示请求头结束,请求正文(请求体)开始
请求正文
GET方法:提交数据时,数据参数会作为URL的一部分,放在文件路径后面发送给服务器,被称为查询字符串。
POST方法:发送的数据在请求体中。
HTTP服务端响应消息
HTTP响应报文:在接收和解释请求消息后,服务器返回一个HTTP响应消息。
HTTP响应也由四个部分组成,分别是:
- 状态行
- 消息报头
- 空行
- 响应正文
状态行
HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version:表示服务器HTTP协议的版本;
Status-Code:表示服务器发回的响应状态代码;
Reason-Phrase:表示状态代码的文本描述。
状态码
五大类HTTP状态码
-
1xx
1xx类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
-
2xx
2xx类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。
「200 OK」是最常见的成功状态码,表示一切正常。如果是非HEAD请求,服务器返回的响应头都会有body数据。 「204 No Content」也是常见的成功状态码,与200 OK基本相同,但响应头没有body数据。 「206 Partial Content」是应用于HTTP分块下载或断电续传,表示响应返回的body数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
-
3xx
3xx类状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。
「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL再次访问。 「302 Moved Permanently」表示临时重定向,说明请求的资源还在,但暂时需要用另一个URL来访问。 #301 和 302 都会在响应头里使用字段 Location ,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。 「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,用于缓存控制。
-
4xx
4xx类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。
「400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误。 「403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错。 「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
-
5xx
5xx类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。
「500 Internal Server Error」与400类似,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。 「501 Not Implemented」表示客户端请求的功能还不支持。 「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。 「503 Service Unavailable」表示服务器当前很忙,暂时无法响应服务器。
响应头部字段
响应头部字段:响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
空行
表示响应头结束,响应正文(响应体)开始
响应正文
服务器返回的资源内容
{"result":"success","message":null}
HTTP请求方法理解
GET
Get方法的含义是请求从服务器获取资源,这个资源可以是静态的文本、页面、图片视频等。但不包含请求主体。
POST
向Request-URI所标识的资源提交数据,数据就放在请求正文中。
用于向指定资源发送数据,指定的资源会对数据进行处理,然后将处理结果返回给客户端,一般用于表单提交、文件上传。
POST提交数据的几种Content-Type:
- application/x-www-form-urlencoded:最常见的POST提交数据方式,浏览器支持的原生form表单
- multipart/form-data:这种方式一般用来上传文件。
- application/json:在响应头中很常见,在请求头中用来告诉服务端消息主体是序列化后的json字符串。
HEAD
HEAD:请求获取由Request-URI所标识的资源的响应消息报头首部,不会返回报文主体
OPTIONS
OPTIONS:查询资源支持的方法。
PUT
PUT:请求服务器存储一个资源,并用Request-URI作为其标识
服务器会将请求主体的内容保存到URL指定的资源位置,包含两种情况:
- URL指定的资源不存在,服务器会新建一个文件,将请求主体中的内容保存到新建的文件里,响应码为201。
- URL指定的资源存在,服务器会重置文件内容,用请求主体中的内容覆盖原文件内容,响应码为200或204。
PUT方法自身不带验证机制,任何人都可以执行,存在安全问题,所以网站一般不会使用PUT方法。
DELETE
DELETE:请求服务器删除Request-URI所标识的资源
和PUT类似,DELETE方法同样不带验证机制,所以网站一般也不使用DELETE方法。
TRACE
TRACE:路径追踪,请求服务器回送收到的请求信息,主要用于测试或诊断发送的请求是否在客户端与服务端之间传送时被网关、防火墙、代理更改。
HTTPS与HTTP
HTTP与HTTPS的区别
- HTTP是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS则解决 HTTP 不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输。
- HTTP连接建立相对简单,TCP三次握手之后便可进行HTTP的报文传输。而HTTPS在TCP三次握手之后,还需进行SSL/TLS的握手过程,才可进入加密报文传输。
- HTTP的端口号是80,HTTPS的端口号是443。
- HTTPS协议需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTPS解决的问题
HTTP 由于是明文传输,所以安全上存在以下三个风险:
- 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
- 篡改风险,比如强制入垃圾广告,视觉污染,用户眼容易瞎。
- 冒充风险,比如冒充淘宝网站,用户钱容易没。
HTTPS在HTTP与TCP层之间加入了SSL/TLS协议,可以很好的解决上述风险:
- 信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
- 校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾广告。
- 身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没🤭。