HTTP协议
HTTP(HyperText Transfer Protocol,超文本传输协议)是浏览器与Web服务器之间的通信协议,是传递消息的一种规定。在1990年提出HTTP的1.1版本,1.1版本一直沿用到现在,并且是主流的版本。
- HTTP协议是将html文档从Web服务器传输到Web浏览器,当访问php文件时,浏览器端接收到的并不是php这个文件的源代码,而是这个php文件的执行结果,这个结果就是html文档,也就是说php是在后端运行的。
- HTTP是一个响应请求的协议,客户端发出请求,服务器响应客户端的请求,它能够明确区分哪端是客户端,哪端是服务端。HTTP并不会主动去连接客户端。
- HTTP协议使用可靠的TCP连接,默认端口是80。但是HTTP会有明文传输漏洞,所以后面出现了HTTPS。
- HTTP支持的是B/S,在浏览器像服务器提出请求时,只需要传输请求方法和路径,并且它可以传输任意类型的数据对象。
- HTTP协议为了提高快速处理大量事物效率,把它设计成了不保存状态协议,即无状态协议。它并不会保存上一次连接时的信息,所以后来出现了Cookie技术,用来解决这个弊端。
请求-REQUEST
HTTP请求由请求行、请求头和请求正文这三个部分组成。
请求行:HTTP报文的第一行,由两个空格分成三部分
请求方法 资源路径 协议版本
请求方法:
-
GET:获取服务器的资源
-
POST:用来传输实体的主体,例如表单提交或者上传文件,GET方法也能办到这点,但是一般不用。
-
HEAD:与GET方法类似,但是只能返回头部,可以被用来查看资源是否存在。
-
PUT:向服务器上传文档(因为这个方法太危险,所以不使用)
-
DELETE:删除服务器上到资源(也是因为太危险而不使用)
-
TRACE:追踪路径(可以查看文件传输路径,但因为容易引发XST(跨站追踪)攻击而不怎么使用)
-
OPTIONS:用来测试服务器所支持的方法
请求头:从请求报文第二行开始到第一个空行之间的内容。 -
Host:主要用于指定被请求资源的服务器地址和端口号
-
User-Agent:客户端浏览器信息(浏览器指纹)
-
Referer:包含一个URL,代表当前URL的上一个URL
-
Cookie:记录请求者的身份认证信息
-
Accept-Charset:用于指定浏览器接受的字符集
-
Content-Type:用于向接收方(浏览器或服务器)指示实体的介质类型(数据类型,MIME)
-
Content-Length:用于指明实体正文的长度,以字节方式存储的十进制数字来表示
-
Last-Modified:用于指示资源的最后修改时间
请求正文:第一个空喊开始后的所有内容。
响应-RESPONSE
响应报文如下:
响应报文由状态行、响应头、响应正文三部分组成
状态行:响应报文第一行
协议版本 响应状态码 描述短语
响应报头:响应报文第二行开始倒第一个空行为止的所有内容,其中包含了关于HTTP响应的重要字段。
响应正文:响应报文从第一个空行开始倒最后的所有内容。服务器返回资源的内容,即浏览器接收到的HTML代码。
状态代码:
- 1XX:信息性状态码(很少见)
- 2XX:成功状态码(200 OK)
- 3XX:重定向状态码(302 FOUND,304 Not Modified)
- 4XX:客户端错误状态码(403,404 Not Found)
- 5XX:服务器错误状态码(500)
主要字段: - Data:时间和日期
- Server:Web服务器指纹
- Last-Modified:服务器通过这个头信息告诉浏览器,资源的最后修改时间
- Content-Type:响应正文的类型
- Set-Cookie:服务器向浏览器端写入Cookie信息
- Location:重定向目标页面
- Refresh:服务器通过Refresh头告诉浏览器定时刷新浏览器
在kali中利用telnet测试多种请求方法
首先用telnet命令连接服务器
telnet 192.168.42.146 80
测试GET方法
测试POST方法
测试HEAD方法
用BP分析一个网站后台的登录过程
在进入主页面的时候发现服务器响应码为302(重定向)
先用错误密码登录,Cookie并不完全
POST /cms/admin/login.action.php HTTP/1.1
Host: 192.168.42.146
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 52
Origin: http://192.168.42.146
Connection: close
Referer: http://192.168.42.146/cms/admin/login.php
Cookie: username=admin; userid=1; PHPSESSID=bge967e5b0bpspm22mgopebf03
Upgrade-Insecure-Requests: 1
username=admin&image.x=65&image.y=49&password=123789
转发之后会出现
在点击确定之后,发现BP上并没有抓取到数据,则说明没有数据流过,页面的切换是在本地浏览器上执行的。
再次输入正确的账号密码,会出现正确的Cookie信息。
POST /cms/admin/login.action.php HTTP/1.1
Host: 192.168.42.146
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 52
Origin: http://192.168.42.146
Connection: close
Referer: http://192.168.42.146/cms/admin/login.php
Cookie: username=admin; userid=1; PHPSESSID=bge967e5b0bpspm22mgopebf03
Upgrade-Insecure-Requests: 1
username=admin&image.x=61&image.y=45&password=123456