HTTP请求以及burp使用

时间:2024-03-28 17:26:42

一、使用burp的时候需要设置代理(代理作为客户端和服务器的中间者,在利用http协议交互时,所有的请求和回应都不会直接发送给目标而是右代理接收和转发),还有安装证书。我使用的时候出现了一个问题,就是在burp里面设置代理的时候无法勾选127.0.0.1:8080,即下图中不能出现那个√。此时就应该考虑是端口占用问题,所以端口占用是一个非常不起眼但是又非常常见的问题,phpstudy中也经常出现端口占用问题。所以在命令行中netstat -ano ,再结合资源管理器就可以关闭占用端口的程序了。

HTTP请求以及burp使用

二、http报文:http的一个会话有Request(请求包)和Response(响应包)组成

(1)http请求报文:由请求行,消息报头和请求正文组成。

                请求行就是第一行,请求方法/协议/协议版本。消息包头就是host,user-agent等。剩下的就是请求正文。

               扩展:http请求方法一共有九种,最常用的就是get和post,下面是九种方法:

                  ① GET GET方法请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据.

                  ② HEAD HEAD方法请求一个与GET请求的响应相同的响应,但没有响应体.

                  ③ POST POST方法用于将实体提交到指定的资源,通常导致状态或服务器上的副作用的更改.  

                  ④ PUT PUT方法用请求有效载荷替换目标资源的所有当前表示。

                  ⑤ DELETE DELETE方法删除指定的资源。

                  ⑥ CONNECT CONNECT方法建立一个到由目标资源标识的服务器的隧道。

                  ⑦ OPTIONS OPTIONS方法用于描述目标资源的通信选项。

                  ⑧ TRACE TRACE方法沿着到目标资源的路径执行一个消息环回测试。

                  ⑨ PATCH PATCH方法用于对资源应用部分修改。

            下面结合一个具体事例来分析一下http的请求报文:

HTTP请求以及burp使用

首先看到第一行:GET / HTTP/1.1,上面说到第一行是请求行,代表了请求方法是GET,协议是HTTP,协议的版本是1.1,有的会加上路径。

第二行Host:主要用于指定被请求支援的Internet主机和端口号,这里就只有主机名,也就是我们访问的域名是cloud.tencent.com,如果第一行中加上了路径名,那么也是访问的路径之一。有的也会有端口号,例如http://reset.com:8080/1.php(url是不存在的因为是我编的,只是展示一下形式)。

第三行Connection:Connection是当前这个请求结束后,还会不会保留tcp连接。现在是close,代表关闭,如果是keep-alive,代表网络连接状态要keep住,让后续的请求沿用这个连接。

第四行Upgrade-Insecure-Requests:这是chrome浏览器增加的一个头,是用来告诉服务器,浏览器可以处理https的协议,这个用来向服务器端发送信号,表示客户端优先选择加密及带有身份验证的响应,一般配合https协议使用。因为有的如果在https的页面加载http资源,那么浏览器就会报错。

第五行User-Agent:是向服务端传递客户端操作系统,浏览器和其他属性的报头。通俗的说就是浏览器告诉服务器我的浏览器是什么,是什么版本,以及系统的相关信息。

第六行Accept:用于指定客户端接收哪些信息。

第七行Cookie:cookie是用来保存信息的,通常大小不超过4kb。它的内容可以由服务端或者JavaScript脚本生成。保存的信息里一般会放一些请求之间保存的凭证,比如登录状态等。

第八行if-none-match:是一个条件式请求首部。对于 GETGET 和 HEAD 请求方法来说,当且仅当服务器上没有任何资源的 ETag 属性值与这个首部中列出的相匹配的时候,服务器端会才返回所请求的资源,响应码为  200 。

还有许多其他的没有列出的请求首部,下面是我所接触到的其他的请求首部:

Refer:包含一个url,代表当前URL上的一个URL

Range:可以请求实体部分的内容,多线程下载一定会用到这个请求首部。

x-forward-for:即XFF头,代表着请求端的ip,也可以是多个,用逗号隔开

Content-Type:用于向接收方只是实体的介质类型

Content-Length:指明实体正文的长度,以字节方式存储的十进制数字表示

DNT: 1  :DNT是Do Not Track的缩写,用来向服务器告知是否用户是否想被跟踪的一个标记,用于控制隐私相关的功能比如个性化推荐,但是国内并没有法律要求服务端必须遵循。

(2)http响应报文:响应报文是对请求报文的回应,就是服务器发给客户端的报文。通常包含状态行,消息报头和响应正文。状态行也是第一行,表示协议、版本、状态码、描述。下面也是用一个事例,这个事例是上面的请求的响应:

HTTP请求以及burp使用

第一行是状态行:协议是http,版本是1.1,状态码是200,描述是OK。需要了解一下常见的状态码:200客户端请求成功,302重定向,404请求资源不存在,400客户端请求有语法错误不能被服务器理解,401请求未授权,403服务器收到请求但是拒绝服务,500服务器内部错误,503服务器当前不能处理客户端的请求,一段时间后恢复正常,等等。

第二行Server:web服务器的名称

第三行Date:指的是服务器当前的时间,一般用来配合浏览器做一些缓存控制

第四五六行同上(Content部分表示的返回的内容的类型),第七行Vary:官方解释是 当缓存中存在一个响应,并且该缓存没有过期失效,是否被允许去利用此响应去回复后续请求而不需要重验证(revalidation)就是对缓存的控制,如果之前有了缓存了,就比对请求头如果一样的话就直接使用,如果不一样的话就需要重新请求。

第八行x-req-id:标识客户端和服务端的请求

第九行Set-Cookie:向客户端设置cookie

第十行Etag:它是用作缓存使  用的两个主要的头信息之一 (另一个是Expires)。

还有一些我见过的响应首部:

X-Powered_by:应用服务器名称版本等。

Location:(302重定向)告诉浏览器去访问那个页面,浏览器接收到这个请求后会立刻访问location所指向的页面。

Refresh:服务器通过Refresh告诉浏览器定时刷新页面。

三、HTTP与HTTPS的关系:

联系:HTTPS是在HTTP的基础上,请求与响应方式都一样

区别:(1)HTTP是超文本传输协议,信息明文传输

                      HTTPS是有安全性的SSL加密传输协议

            (2)两者采用完全不同的连接方式:HTTP的默认端口是80,HTTPS的默认端口是403,默认端口是可以改变的

            (3)HTTPS需要到CA申请证书,HTTP不需要

           (4)HTTP连接相对简单,是无状态的

                     HTTPS协议是由SSL和HTTP协议构建的可进行加密传输和身份认证的网络协议。