渗透测试基础之http协议基础

目录

 

前言

正文

http的工作流程(快速理解)

关于url的构成

HTTP请求包与返回包

请求包:

返回包:

常见的header:


前言

我又来了,更新速度有点快,莫得办法,贼无聊~~~

想不出骚话了,略过~~~~

 

正文

http的工作流程(快速理解)

什么是客户端?

客户端可以理解成用户  指浏览器

什么是服务端?

服务端可以理解成商店   指服务器

一个http工作流程

可以看成  “用户到商店需要买苹果。然后服务员去拿苹果给用户 “ 简简单单一句话

用户到商店买苹果      这是一个请求

服务员把苹果给用户   这是一个回响

理解的话就已经完全理解了

渗透测试基础之http协议基础_第1张图片

这就是一个http工作流程,分请求包回响包(一般都叫返回包)

 

(1)客户端连接到Web服务器

(2)发送HTTP请求

(3)服务器接受请求并返回HTTP响应

(4)释放连接TCP连接

(5)客户端浏览器解析HTML内容

 

关于url的构成

http://www.test.com/aboutus.php?id=117   (这个url是我找的,然后我改成www.test.com)

http://                        首先是http协议(protocol)

www.test.com           然后就是主机(host)

aboutus.php              然后再路径(path)

?id=117                     然后就是参数

路径就是host后面的部分

HTTP请求包与返回包

HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE

GET:              是最常用的方法,通常用于请求服务器发送某个资源

PUT:              用于向服务端写入文档

POST:            是常用的方法之一,用于向服务端提交数据,有主体

HEAD:           与GET类似,但在响应中只有首部,不返回具体数据,可以用来查看资源是否存在

TRACE:         用于跟踪某个请求

DELETE:       用于删除服务端某个资源

OPTIONS:     用于查询服务端支持的方法

请求包:

​
​
请求行: POST /users/login/ HTTP/1.1
请求头:	Host: xxxxxxxx.net
		User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.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: 250
		Origin: http://XXXXXX.net
		Connection: close
		Referer: http://XXXXXXX.net/users/login/?next=/courses/
		Cookie: csrftoken=7nHRuim6Ost14JzABrAy38lb7ZW2PmU5d1LIX99pafrq1MVsTo2APP55duHAj0K8
		Upgrade-Insecure-Requests: 1
空行
请求体: csrfmiddlewaretoken=SIQUCuyvhyOpOdwDVVYTyBP0EMtLsf6sYmUL5llODlMOLgSvdSqVkizUKhejWTWv&opt_type=account&redirect_url=%2Fcourses%2F&account=aaaaaa&password=aaaaaa&mobile=&captcha_0=9215a8da15a3412e58477a0a0f1dd748d9211041&captcha_1=aaaaaaaa&mobile_code=

​

​

渗透测试基础之http协议基础_第2张图片

请求包分个部分,请求行,请求头,请求体

请求行: POST /users/login/ HTTP/1.1   

传参方式post,然后路径/users/login/,协议是http 1.1

然后请求头,我下面贴出了常见head解释

关于head可以进行head头注入

然后再请求体,有些表单,或者登陆框登陆的时候用户名和密码都会在这里

爆破的时候也是在这爆破

 

返回包:

 

HTTP/1.1 200 OK
Server: openresty/1.13.6.2
Date: Fri, 07 Feb 2020 16:00:11 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN
Vary: Cookie
Set-Cookie: csrftoken=7nHRuim6Ost14JzABrAy38lb7ZW2PmU5d1LIX99pafrq1MVsTo2APP55duHAj0K8; expires=Fri, 05-Feb-2021 16:00:11 GMT; Max-Age=31449600; Path=/
Content-Length: 600



    
        
        
        
        ç»å½ | 红æ¥å®å¨
        
        
        
        
    

返回包先是协议,然后状态码,是否正常

然后一些head等等

下面的html就是跳转返回的页面,只不过太多了,我就删掉了好多,这样看着好看,比较明显

状态码分为五大类:

信息性状态码:100~199

成功状态码:200~299

重定向状态码:300~399

客户端错误状态码:400~499

服务端错误状态码:500~599

常见的header:

Content-Type

请求体/响应体的类型,如:text/plain、application/json

Accept

说明接收的类型,可以多个值,用,(半角逗号)分开

Content-Length

请求体/响应体的长度,单位字节

Content-Encoding

 

请求体/响应体的编码格式,如gzip,deflate

 

Accept-Encoding

 

告知对方我方接受的Content-Encoding

 

ETag

给当前资源的标识,和Last-Modified、If-None-Match、If-Modified-Since配合,用于缓存控制

Cache-Control

取值为一般为no-cache或max-age=XX,XX为个整数,表示该资源缓存有效期(秒)

Authorization

 

用于设置身份认证信息

 

User-Agent

 

用户标识,如:OS和浏览器的类型和版本

 

If-Modified-Since

 

值为上一次服务器返回的 Last-Modified 值,用于确认某个资源是否被更改过,没有更改过(304)就从缓存中读取

 

If-None-Match

值为上一次服务器返回的 ETag 值,一般会和If-Modified-Since一起出现

Cookie

已有的Cookie

Referer

表示请求引用自哪个地址,比如你从页面A跳转到页面B时,值为页面A的地址

Host

 

请求的主机和端口号

 

Date

服务器的日期

Last-Modified

该资源最后被修改时间

Transfer-Encoding

取值为一般为chunked,出现在Content-Length不能确定的情况下,表示服务器不知道响应版体的数据大小,一般同时还会出现Content-Encoding响应头

Set-Cookie

设置Cookie

Location

重定向到另一个URL,如输入浏览器就输入baidu.com回车,会自动跳到 https://www.baidu.com ,就是通过这个响应头控制的

Server

服务器应用程序软件的名称和版本

 

接下来就差不多了,就可以理解啦

渗透测试基础之http协议基础_第3张图片

文末:

欢迎加我微信,一起讨论问题。技术有限,根据网上,以及自己理解写的

如果有什么不对的话可以评论指出来

 

 

 

你可能感兴趣的:(web安全)