一、http 协议详解
1. 中间件服务器
浏览器与服务器之间不熟,不知道是什么请求所以需要apache、nginx、tomcat 做中间人做翻译然后进行转发
2. 网页
2.1 静态网页
不与数据库做交互,没有后端代码参与的网页
2.2 动态网页
与数据库做交互,有后端代码参与的网页
3. HTTP协议
分为两块:浏览器去往服务器的包request(请求)和服务器发回给浏览器的包response(响应)
传输速度快
https比http多了一层加密(ssl)
使用bp抓包,http请求包的请求正文可以观看,但是https的请求正文时一堆乱码
4. URL
Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。
URL是对互联网上得到的资源的位置和访问方法的一种简洁表示,是互联网上标准资源的地址。URL它具有全球唯一性,正确的URL应该是可以通过浏览器打开此网页的,但如果您访问外网,会提示网页无法打开,这并不能说明这个URL是错误的。只不过在国内不能访问而已。
http://127.0.0.1/pikachu-master/vul/burteforce/bf_form.php
schema://login:password@address:port/path/to/resource/? query_string#fragment
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TB6hSSkJ-1692751843350)(%E6%96%B0%E5%BB%BA%E6%96%87%E6%9C%AC%E6%96%87%E6%A1%A3.assets/clip_image004.jpg)]
login和password已经废弃,因为会将用户名和密码明文显现在链接中不安全。
URL 编码 ,URL 所允许出现的字符是有限制的。URL 中从path 开始只允许出现 A-Za-z0-9,半角减号(-),下划线(_),句点(.),波浪号(~)。其他字符均会被URL 编码 (编码规则)
URL编码
防止扰乱数据包的正常发送
URL 之所以需要编码,是因为 URL 中的某些字符会引起歧义,比如 URL 查询参数中包含了”&”或者”%”就会造成服务器解析错误;再比如,URL 的编码格式采用的是 ASCII 码而非 Unicode 格式,这表明 URL 中不允许包含任何非 ASCII 字符(比如中文),否则就会造成 URL 解析错误。
URL特殊字符编码
字符 | 含义 | 十六进制值编码 |
---|---|---|
+ | URL 中 + 号表示空格 | %2B |
空格 | URL中的空格可以编码为 + 号或者 %20 | %20 |
/ | 分隔目录和子目录 | %2F |
? | 分隔实际的 URL 和参数 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签 | %23 |
& | URL 中指定的参数间的分隔符 | %26 |
= | URL 中指定参数的值 | %3D |
5. 请求报文分析
HTTP 请求由请求行、请求头、请求正文三个部分组成
5.1 请求行:
HTTP 报文的第⼀行,由空格字符分成三部分
请求方法:
方法 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体。 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立 和/或 已有资源的修改。 |
5.2 请求头
从请求报文第⼆行开始到第⼀个空行为止之间的内容,请求头中的内容不可打乱顺序和随意修改内容,会导致服务器不能响应
字段 | 含义 |
---|---|
Host | 指定被请求资源的服务器的地址和端口 |
User-Agent | 用户客户端的浏览器的内核 |
Content-Type | 标识传输给对方服务器的数据的类型 |
Referer | 包含一个URL ,代表当前URL的上一个URL;从哪个页面跳转到的这个页面 |
Cookie | 令牌;身份认证 |
Accept-Charset | 用于指定浏览器啊接受的字符集 |
Content-length | 用于指明实体正文的长度,以字节方式存储的十进制数字来表示 |
Last-Modified | 用于指示资源的最后修改时间 |
-
User-Agent:使用nmap扫描时User-Agent中展示的是nmap(强特征)或者是nmap指定的选项参数(弱特征):nmap的User-Agent参数可指定,若不指定,它的User-Agent会一直在变动,让人一眼就看出来流量不正常。
-
某一款恶意连接工具,它的User-Agent默认有15种
-
有源IP(攻击者IP)和目的IP(受害者IP):查找所有和源IP有关的流量,如果来自源IP的UA一直在变(一秒钟变换多次)可判定为攻击流量
-
-
cookie:cookie值可变,能够实现越权
5.3 请求正文
第⼀个空行开始以后的所有内容主要包括POST传参
6. 响应报文分析
响应报文由状态行、响应报头、响应正文三部分组成
6.1 状态行
响应报文的第⼀行
响应状态码:判断当前请求报文是否被正确响应
6.2 状态码
(https://cloud.tencent.com/developer/chapter/13553)查看状态码详细信息
状态代码 | 类型 |
---|---|
1xx | 信息性状态码 |
2xx | 成功状态码,对方响应信息了 |
3xx | 重定向状态码 |
4xx | 客户端错误状态码 |
5xx | 服务器错误状态码 |
200:不一定就是成功连接到对方,如果对方网站中有一台WAF,向对方服务器中上传木马,被WAF拦截,对方发送来一条响应说你的入侵失败或者说登录网页失败,返回给我们相应包,这个响应包成功发送给我,状态码显示200,但是我们上传木马失败了或登陆网页失败了。
403:服务器理解请求但拒绝授权
404:服务器找不到请求的资源
6.3 响应报头
响应报文第二行开始到第⼀个空行为止的所有内容,其中包含了关于HTTP响应的重要字段。
6.4 响应报文
响应报文从第⼀个空行开始到最后的所有内容。 服务器返回资源的内容,即浏览器接 收到的HTML 代码
6.5 内容
Set-Cookie:设置cookie
字段 | 含义 |
---|---|
Data | 时间个日期 |
Server | Web服务器指纹 |
Last-Modified | 服务器通过这个头信息告诉浏览器,资源的最后修改时间 |
Content-Length | 响应正文长度 |
Content-Type | 响应正文类型 |
Set-Cookie | 向浏览器端写入Cookie信息 |
Location | 重定向目标页面 |
Refresh | 服务器通过Refresh头告诉浏览器定时刷新浏览器 |