HTTP协议

1、web安全概述

从黑客技术发展角度看,在早期黑客攻击的目标以系统软件居多,一方面由于这时期的web技术发展不成熟,多是以静态页面为主的技术架构,很难有所突破,而通过攻击系统服务,黑客能获得直接root权限。
另一方面在早期,web并非互联网的主流应用,相对来说,基于SMTP、POP3、FTP、IRC等协议的服务是绝大多数用户的选择,因此黑客们主要的攻击目标是网络、操作系统以及二进制软件等领域,web安全领域的攻击与防御技术均处于非常原始的阶段。

案例
乌云 镜像站:https://wooyun.laolisafe.com/

就目前来看相对于那些攻击系统软件的exploit而言,基于web的攻击,一般只能让黑客获得一个较低权限的账户,随着web服务的流向,web攻击对黑客的吸引力也在增强。

1.1、web安全的兴起

从web发展开始到现在,黑客更多是关注服务器端动态脚本的安全问题,如将一个可执行脚本(俗称webshell)上传到服务器上,从而获取权限
随着动态脚本语言的普及,以及web技术的发展初期对安全问题认知的不足导致很多"血案"发生,同时也遗留下很多历史问题,比如PHP语言至今仍然只能靠较好的代码规范来保证没有文件包含漏洞,而无法从语言本身杜绝此类安全问题。
SQL注入的出现是web安全史上的一个里程碑,它最早出现大概是1999年,并很快成为web安全的头号大敌,就如同缓冲区溢出出现时一样,程序员不得不日以继夜的去修改程序中存在的漏洞。
XSS(跨站脚本攻击)的出现则时web安全历史上的另一个里程碑,实际上,XSS的出现时间和SQL注入差不多,但是真正引起人们重视则是在大概2003年以后,在经历了myspace的XSS蠕虫事件后,安全界对XSS的重视程度提高了很多。
伴随着web 2.0的 兴起,XSS、CSRF等攻击已经变的更强大,web攻击的思路也从服务端转向客户端,转向了浏览器和用户,覆盖了web的每一个环节,变得更加的多样化。

2、URL简介

URL全称:统一资源定位符(Uniform Resource Locator)
URL链接里,每一条格式正确且符合规范的URL都对应着互联网中一个唯一的资源。
URL的语法规范,是浏览器地址栏的基础,也是用户使用浏览器访问互联网的重要安全指标

2.1、scheme 协议格式

scheme: // login:passwd @address:port /path/to/resource ?query_string #fargment
scheme: //address:port /path/to/resource ?query_string #fargment

shceme:协议,http、https、file、ftp
login:passwd:身份认证,不安全,已废弃不用
@address:port:域名或者IP地址,域名不区分大小写
port:服务器端口是URL中可选内容,在没有指定端口时,会默认去访问协议的标准端口
/path/to/resource:层级文件路径,这一结构来源自UNIX目录语义,因此保留了对/ ./ ../的支持
?query_string:查询字符串是一个非必须的字段,主要负责将一系列非层级格式的任意参数传递给指定的服务器资源
#fargment:片段ID,同样使应用的位置有别于查询字符串,他应用于客户端,片段ID值并不会回传至服务端

2.2、Scheme 协议名称

Scheme 是用来指定使用的传输协议,其中最常见的就是HTTP协议,它是互联网中应用最广的协议
其他常见的协议有:

  file:用于访问资源位于本地计算机上的文件
  ftp:用于访问FTP服务器上的资源
  HTTPS:通过SSl协议的HTTP访问web服务器资源
  mailto:访问资源属于电子邮件地址,通过SMTP协议访问
  ed2k(电驴)、flashget(网际快车)、thunder(迅雷)等,通过支持专用下载协议的P2P软件访问资源

2.3 URI

URI全称:统一资源标识符(Universal Resource Identifier),用于标识某一互联网资源名称的字符串。Web上可用的每种资源,如:HTML文档、图像、视频片段、程序等,可以由 URI 进行定位。

URI一般由三部分组成:

 访问资源的命名机制。 
 存放资源的主机名。 
 资源自身的名称,由路径表示。

URI和URL的区别
url一般是一个完整的链接,我们可以直接通过这个链接(url)访问到一个网站,或者把这个url复制到浏览器访问网站。
uri并不是一个直接访问的链接,而是相对地址(当然如果相对于浏览器那么uri等同于url了)。这种概念更多的是用于编程中,因为我们没必要每次编程都用绝对url来获取一些页面,这样还需要进行分割“http://xx/xxx”前面那一串,所以编程的时候直接request.getRequestURI就行了,当然如果是重定向的话,就用URL。

URI和URL的联系
在这里插入图片描述

URI就是用来标识互联网中资源的字符串,其有两种实现形式:
一是URL,这是目前最普遍得形式,其一缺点就是URL所对应资源的位置发生变化会导致URL失效。
二是URN,是由于URL的缺点才延申出这种技术,该技术理论很好,但实现起来困难很多;给互联网中每个资源命名一个唯一字符串,并且字符串所对应该资源的URL发生变化的时候也能及时更替最新URL,这时就需要一个字符串解析器,由于互联网资源如此庞大,所需这个解析器要更精密的软件支持,所以URN流行还需要一定时间。

3、HTTP协议

1、什么是协议?
所谓协议:就是指双方遵循的规范
http协议:就是浏览器和服务器之间进行“沟通”的一种规范
HTTP协议属于“应用层协议”,而且是基于TCP/IP协议
2、OSI七层模型
在这里插入图片描述

3、为什么要用HTTP协议?
TCP协议是基于连接三次握手的,虽然具有可靠性,但是具有一定的缺陷。
普通的C/S架构软件,顶多上万个Client同时连接,而B/S架构的网站,千万人同时在线也是很平常的事,如果千万个客户端和服务器一直保持连接状态,那服务器如何满足承载呢?

Client/server
Browser/server

这就衍生出了HTTP协议,基于TCP的可靠性连接,通俗点说,就是在请求之后,服务器端立即关闭连接、释放资源,这样即保证了资源可用,也吸取了TCP的可靠性的优点。

4、什么是HTTP协议?

1)HTTP协议:即超文本传输协议(Hypertext Transfer Protocol)
是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议
2)HTTP协议是TCP/IP模型中应用层的协议,通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成为我们常说的HTTPS

image-20210505130917555

3)HTTP协议是由请求包和响应包构成,是一个标准的客户端服务器模型,HTTP是一个无状态的协议
4)HTTP默认的端口号是80,HTTPS的端口号是443
5)浏览网页是HTTP的主要应用,并不代表HTTP只能应用于浏览网页
比如常用的QQ、迅雷这些软件,都使用的HTTP协议(还有其他应用)

5、HTTP协议特点

1)简单快速:客户向服务器请求服务时,只需传送请求方法和路径,所以HTTP服务器的程序规模小,因而通信速度很快。
2)灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由content-Type加以标记。
3)连接性:HTTP 0.9和1.0使用非持续连接,限制每次连接只处理一个请求,服务器处理完客户的请求,并收到用户的应答后,即断开连接
HTTP 1.1使用支持连接:不必为每个web对象创建一个可信的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
4)无状态:HTTP协议是无状态协议,无状态协议是指对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
重传时必须携带一个cookie,登录后台,抓包可以看到分配一个cookie,也就是一个令牌,证明你的身份,你说你是谁,不相信,必须要有身份证明,使用cookie值来证明,cookie值是可控的。
5)支持B/S 及 C/S模式。

6、HTTP工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:
1)首先客户机与服务器需要建立连接,只要单击某个超级链接,HTTP的工作就开始了。
2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:同一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的:
①协议版本号
②一个成功或错误的状态码,后面是MIME信息包括服务器信息、实体信息和可能的内容。
4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

7、HTTP协议格式

所有HTTP请求和HTTP响应都包含一个或几个单行实现的消息头(header),在消息头结束后,会出现一个空白行,最后是消息主题(可选)。

在这里插入图片描述

8、HTTP请求

8.1请求行

请求行由三部分组成:请求方式(请求方法),请求路径,请求协议版本。
格式:Method Request-URI HTTP-Version CRLF
格式说明:

Method 表示请求方法;

Request-URl是一个统一资源标识符;

HTTP-Version.表示请求的 HTTP 协议版本;

CRLF表示回车和换行;

例如:GET /images/logo.gif HTTP/1.1
HTTP协议中共定义了十种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:

在这里插入图片描述

HTTP请求方法:GET 和 POST 方法(最常用)

•如果请求行中是GET方法,则没有请求体。
•用户在浏览器的地址栏中输入URL,回车发出的请求都是GET请求。
•方法名称是区分大小写的。当某个请求所针对的资源不允许对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
•HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。
•请求版本信息一般是HTTP/1.1或者HTTP/1.0。
•请求行以换行(回车)作为请求行的结束。

8.2请求头(Header)

请求头(又称消息头)的内容包含:客户机请求的服务器主机名,客户机的环境信息等。

•在HTTP/1.1协议中,所有的请求头,都是可选的,除post方法外。
•请求头是以key: value的形式现示的。每一个报头域(报头域包括请求头和响应头)都是由名字+”:”+空格+值组成,消息报头域的名字是大小写无关的。
•请求头里保存的是请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示请求头部分结束。
•HTTP常见的请求头(Header)

HOST:被访问的完整URL中的主机名称,一般是域名或者IP,可伪造或者注入 Host:127.0.0.1或Host:1‘+or

Content-Type: 数据类型(text/html等)

Content-Length: Body的长度,当Body存在时会用这个属性

Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;

User-Agent: 声明用户的操作系统和浏览器版本信息,爬虫需要伪装UA

Accept:用于告诉服务器客户端接收哪些内容,如图像类型、办公文档格式等。

referer: 当前页面是从哪个页面跳转过来的;

Accept-Language:用于声明服务器浏览器可以支持声明语言。

location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;

Origin:这个消息头用在跨域Ajax请求中,字段里只包含是谁发起的请求,只存在于POST请求中。

Connection:通知通信的另一方,是否在完成HTTP传输后关闭TCP连接。Keep-Alive close

Date:告诉服务器,当前请求的时间。

Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能.(服务器使用Set-Cookie消息头来设置Cookie,一般用于身份认证),cookie注入非常常见,很多种时候会把cookie的值带入到数据库中进行查询。

8.3请求主体

空行后面的内容都是请求体 ,请求体允许为空字符串.
GET方法没有请求体,因为GET方法的请求参数都已经跟在了URL(地址栏)的后面。
POST请求主体一般是表单信息(登录、注册、忘记密码)
看到公钥就是非对称加密,主流加密方式就是非对称加密
在这里插入图片描述

9、HTTP响应

在接收和解释请求消息后,服务器返回一个HTTP响应消息。
HTTP响应整体由三部分组成:状态行、响应头、响应正文

•状态行:包括协议版本Version、状态码Status Code、回应短语;
•响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息; •响应正文:就是响应的具体数据


在这里插入图片描述

HTTP响应内容:
在这里插入图片描述

每个HTTP响应的第一行由3个以上、空格间隔的内容组成
1)使用的HTTP版本
2)表示请求结果的数字状态码
3)一段文本形成的原因短语
HTTP/1.1:HTTP协议的版本,HTTP/2 HTTP/1.0等版本

200:请求成功的状态码

OK:成功

Date:请求的时间,对渗透帮助不大

Server:非常重要,会显示服务器的详细信息,比如:Apache/2.4.23(win32):就可以在网上搜索该版本是否有放出来的公开的漏洞 OpenSSL/1.02j、mod_fcgid/2.3.9

X-Powered-By:PHP/5.3.29,开发语言和版本

Expires:用于向浏览器说明消息主体内容的有效时间。

Connextion:用于告诉通信的另一端,在完成HTTP传输后是关闭TCP连接,还是保持连接开放以接收其他信息。

Content-Type:用于规定消息主体的内容类型,例如:MIME文档的内容类型为text/html

Cache-Control:用于向浏览器传送缓存指令(如no-cache)。

Content-lenth:用于规定消息主体的字节长度。

10、HTTP方法

当渗透测试工程师攻击web应用程序时,几乎肯定会用到最常用的方法,GET和POST
这些方法之间存在一些必须了解的重要差异,忽略这些差异可能会危及应用程序的安全。
根据HTTP标准,HTTP请求可以使用多种请求方法:
1)HTTP 1.0定义了三种请求方法:GET、POST 和 HEAD方法。
2)HTTP 1.1新增了五种请求方法:OPTIONS、PUT、DELETE、TRACE 和 CONNECT 方法。
OPTIONS:要求服务器报告对某一特殊资源有效的HTTP方法,服务器通常返回一个包含allow消息头的响应,并在其中列出所有有效的方法。(用来获取服务器支持的所有请求方法)
在这里插入图片描述

GET:用来从服务器上获取数据。指定的资源经服务器端解析后返回响应内容。GET请求的数据会附在URL后面。
POST:用于发送包含用户提交数据的请求,有可能对服务器的数据进行更改。POST的数据放在HTTP包体。
HEAD:获得报文首部。和 GET 方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。因此,这种方法可用于检查某一资源在向其提交GET请求前是否存在。
PUT:上传一个文件到服务器,比较老,服务器基本不会允许有这个操作,以前IIS 6.0老版本的有这个漏洞,可以直接上传webshell到服务器拿到权限
DELETE:在服务器上删除一个文件,服务器基本不会允许有这个操作
TRACE:回显服务器收到的请求(你可以知道发送出去的请求是否被加工修改了),主要用于测试或诊断。
在这里插入图片描述

CONNECT: 作用是将服务器作为代理,让服务器代替用户去访问其他网页,之后将数据返回给用户。

11、HTTP状态码

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
在这里插入图片描述

•状态码在响应包里出现的位置:

在这里插入图片描述

1)1xx:提供信息
100 continue:当客户端提交一个包含主体的请求时,将发送这个响应,该响应表示已收到请求消息头,客户端应继续发送主体,请求完成后,在由服务器返回另一个响应。
2)2xx:请求被成功提交
200 Ok:表示已成功提交请求,且响应主题中包含请求结果。
201 created:PUT请求的响应返回这个状态码,表示请求已成功提交。
3)3xx:客户端被重定向到其他资源
301 moved permanently:将浏览器永久重定向到另外一个在location消息头中指定的URL,以后客户端应使用新URL替换原始URL。
302 Found:临时重定向,将浏览器暂时重定向到另外一个在location消息头中指定的URL,客户端应在随后的请求中恢复使用原始URL。
304 NOt Modified:指示浏览器使用缓存中保存的所请求资源的副本,服务器使用if-modified-Since与if-none-Match消息头确定客户端是否拥有最新版本的资源。
4)4xx:请求包含某种错误
400 Bad Request:表示客户端提交了一个无效的HTTP请求,当以某种无效的方式修改请求时(例如在URL中插入一个空格符),可能会遇到这个状态码。
401 Unauthorized:401未授权,服务器在许可请求前要求HTTP进行身份验证,www-Authenticate消息头详细说明所支持的身份验证类型。
403 Forbidden:不管是否通过身份验证,禁止任何人访问被请求的资源。
404 Not Found:表示所请求的资源不存在。
405 Method Not Allowed:表示指定的URL不支持请求中使用的方法,例如:如果试图在不支持PUT方法的地方使用该方法,就会收到该状态码。
414 Request-URl Too Large:如果在本地代码中探查缓冲器兹出漏洞并就此提交超长数据串,则本状态码表示请求主体过长,服务器无法处理。
414 Request-URl Too Long:与上一个响应类似,表示请求中的URL过长,服务器无法处理。
5)5xx:服务器执行请求时遇到错误
500 Internal Server Error:表示服务器在执行请求时遇到错误,当提交无法预料的输入、在应用程序处理过程中造成无法处理的错误时,通常会收到该状态码,应该仔细检查服务器响应的所有内容,了解与错误性质有关的详情。
503 Service Unavailable:表示尽管web服务器运转正常,并且能够响应请求,但服务器访问的应用程序还是无法做出响应,应该进行核实,是否因为执行了某种行为而造成的这种结果。
还有大量特殊状态码,其中许多状态码仅用在特殊情况下

12、附录

HTTP状态码列表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

Postman工具
Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件
Postman背景介绍

用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的css、html、脚本等简单的网页基本信息,它还可以发送几乎所有类型的HTTP请求!Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一。
Postman的操作环境
postman适用于不同的操作系统,Postman Mac、Windows X32、Windows X64、Linux系统,还支持postman 浏览器扩展程序、postman chrome应用程序等。
Postman重要提示:

由于2018年初chrome停止对chrome应用程序的支持,你的postman插件可能无法正常使用了。目前chrome应用商店能使用的就是chrome扩展程序和主题背景。
在这里建议大家直接下载它的应用程序进行使用
贴上官网下载地址:https://www.postman.com/downloads/
在这里插入图片描述

下载完成后双击安装吧,安装过程极其简单,无需任何操作
在这里插入图片描述

成功进入postman页面后,接下来我们正式进行postman的系统教程吧
设置postman主题
右上角的设置里可以设置postman的主题

在这里插入图片描述

postman基础功能介绍
首先,看一下它的基础功能:
在这里插入图片描述

collection在postman里面相当于一个文件夹,可以把同一个项目的请求放在一个Collection里方便管理和分享,Collection里面也可以再建文件夹。这里我们做一个普通接口的简单的示例:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值