最近读了《图解HTTP》,这本书里面用浅显易懂的语言介绍了HTTP协议的相关知识,并采用大量图解的方式使读者得到更好的理解,很适合作为Web选手入门学习的一本书籍。
这篇博客对与HTTP相关的一些常见名词做一下总结,以后做CTF题时经常会见到这些名词,熟悉了它们,会对我们做题有很大帮助。
笔者水平有限,有些内容无法写全,以后会慢慢补全,或者有写的不对的地方,欢迎指正。
一、了解Web及网络基础
1、Web
万维网(World Wide Web)的简称,是一种基于超文本和HTTP的、全球性的、动态交互的、跨平台的分布式图形信息系统。
2、协议
协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。
计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标,由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定。
不同的硬件、操作系统之间的通信,所有这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。
3、HTTP
超文本传输协议(HyperText Transfer Protocol),顾名思义,该协议的功能即为客户端与服务器之间的文本传输。
Web使用HTTP协议作为规范,完成客户端与服务器端等一系列运作流程。
4、TCP/IP协议族
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议族。
协议中存在各式各样的内容。从电缆的规格到IP地址的选定方法、寻找异地用户的方法、双方建立通信的顺序,以及Web页面显示需要处理的步骤,等等。
像这样把与互联网相关联的协议集合起来总称为TCP/IP协议族。
IP(Internet Protocol),网际协议,位于网络层。IP协议的作用是把各种数据包传送给对方。
TCP/IP协议族中的IP指的就是网际协议,这里的IP协议和IP地址是不同的概念。
IP地址指明了节点被分配到的地址,MAC地址是指电脑网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但是MAC地址在网卡出厂的那一刻起基本上不会改变。
TCP(Transmission Control Protocol),传输控制协议。是一种面向连接的、可靠的、基于字节流的传输层通信协议。
所谓的字节流是指,为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理。
TCP协议的作用就是把数据分割成容易传送的数据包,并确保数据最终能够传送给对方。
5、三次握手
为了准确无误的将数据送达目标处,TCP协议采用了三次握手策略。
用TCP协议将数据包发送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。
发送端首先发送一个带SYN(synchronize)标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以传达确认信息。最后,发送端再回传一个带ACK(acknowledgement)标志的数据包,代表握手结束。
6、DNS
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
DNS服务位于应用层,它提供域名到IP地址之间的解析服务。
计算机可以被赋予IP地址,也可以被赋予主机名和域名。比如www.baidu.com。
用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址来访问,因为域名比纯数字组成的IP地址更方便记忆。
7、URI与URL
统一资源标识符URI(Uniform Resource Identifier)是一个用于标识某一互联网资源名称的字符串。
与URI相比,我们更熟悉URL(Uniform Resource Locator,统一资源定位符)。URL正是我们使用Web浏览器等访问Web页面时需要输入的网页地址。比如www.baidu.com
URL是URI的子集。对于互联网上的资源,我们对其进行标识的方法(URI)有很多种,比如编号、定位等。而URL通过该资源的地址对其进行标识的。
二、简单的HTTP协议
1、客户端与服务器端
请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。
在两台计算机之间使用HTTP协议通信时,在一条通信线路上必定有一端是客户端,另一端则是服务器端。
有时候客户端和服务器端的角色是可以互换的。HTTP协议可以区分哪端是客户端,哪端是服务器端。
2、GET与POST方法
GET方法用来请求访问已被URI识别的资源。
POST方法用来向指定的资源提交要被处理的数据。
3、Keep-Alive
使用HTTP持久连接(Keep-Alive)的方法可以使客户端与服务器端之间保持连接,只要任意一端没有提出断开连接,则保持TCP连接状态,这样就不需要进行大量的握手操作了。
4、Session
Session(会话)在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。
当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。
5、Cookie
HTTP是一种无状态协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。
当我们逛淘宝时,经常需要挑选不同的商品,这样就要不停的进行页面跳转,而HTTP协议并不能保存我们的登录信息,那么我们每次跳转到新页面都要重新登录,于是我们引入了Cookie技术。
客户端发送登录信息给服务器端后,服务器端会在响应报文中生成一个叫做Set-cookie的首部字段信息并发送给客户端。当客户端发送跳转页面的请求时,将cookie加入请求报文中,服务器端就能辨认出“你是刚刚登录的那个家伙”。
三、HTTP报文信息
1、HTTP报文
用于HTTP协议交互的信息被称为HTTP报文。客户端的HTTP报文称为请求报文,服务器端的HTTP报文称为称为响应报文。
HTTP报文大致可分为报文首部和报文主体两部分,中间由一个空行隔开。
2、HTTP报文首部
请求报文和响应报文的首部内容由请求行、状态行、首部字段三部分组成。
请求行包含用于请求的方法和HTTP版本。如:GET/HTTP/1.1
状态行包含表明响应结果的状态码,原因短语和HTTP版本。
首部字段包含请求和响应各种条件和属性的各类首部。
3、报文首部字段
首部字段是由首部字段名和字段值构成的,中间用冒号分隔开。
因为我们抓包的时候看见的都是这些字段,所以我们要熟悉常见的一些字段代表的信息,我们经常能在这些信息里找到解题的突破口。
0x01、Cache-Control
通过指定首部字段Cache-Control的指令,就能操作缓存的工作机制。
指令的参数是可选的,多个指令之间用逗号隔开。
Cache-Control: private , max-age=0 , no-cache
private表示仅向特定用户返回响应。(可省略)
max-age=0表示响应的最大Age值。(必需)
no-cache表示缓存前先确认其有效性。(可省略)
相关的指令有很多,这里不一一列举,大家可以自行百度。
0x02、Connection
Connection首部字段有两个作用:
1、控制不再转发给代理的首部字段
2、管理持久连接
Connetion: Keep-Alive
比如我们之前提到的Keep-Alive,保持持久连接就是由Connection发出的指令。
0x03、Date
Date首部字段表明创建报文的时间。
Date: Tue , 03 Jul 2012 04:40:59 GMT
0x04、Pragma
该首部字段只用在请求报文中,客户端会要求所有的中间服务器不返回缓存的资源。
Pragma: no-cache
0x05、Transfer-Encoding
该字段规定了传输报文主体时采用的编码方式。
分块传输编码。
Transfer-encoding : chunked
0x06、Accept
该字段可通知服务器,用户代理能够处理的媒体类型及优先级。
如Accept-Charset 字符集;Accept-Encoding 内容编码;Accept-Language 语言……
0x07、Authorization
该字段用来告知服务器用户代理的认证信息(证书值)。
0x08、Host
该字段用来告知服务器,请求的资源所处的互联网主机名(域名)和端口号(可省略)。
Host : www.baidu.com
0x09、Referer
该字段会告知服务器请求的原始资源的URI。
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。referer 是http的拓展头部,作用是记录当前请求页面的来源页面的地址。服务器使用referer确认访问来源,如果referer内容不符合要求,服务器可以拦截或者重定向请求。
0x0A、Set-Cookie
当服务器准备开始管理客户端的状态时,会事先告知各种信息。
Set-Cookie: status=enable; expires=Tue,05 Jul 2011 07:26:31 GMT;path=/; domain=.hackr.jp
0x0B、Content-Encoding
该字段会告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码即在不丢失实体信息的前提下所进行的压缩。
主要的内容编码方式包括以下4种:gzip、compress、deflate、identity。
0x0C、X-Forwarded-For
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。
在CTF题中我们经常用XFF来伪造客户端IP地址,来绕过服务器的IP地址过滤。
当然,还有很多首部字段,这里就不一一列举了。
四、返回结果的HTTP状态码
1、各种状态码及其对应信息
状态码 | 类别 | 原因短语 |
---|---|---|
1xx | 信息性状态码 | 接受的请求正在处理 |
2xx | 成功状态码 | 请求正常处理完毕 |
3xx | 重定向状态码 | 需要附加操作以完成请求 |
4xx | 客户端错误状态码 | 服务器无法处理请求 |
5xx | 服务器端错误状态码 | 服务器处理请求出错 |
例如我们常见的404 Not Found ,该状态码表明服务器上无法找到请求的资源。
当我们抓包发现响应报文中出现302的状态码时,要知道这是一个暂时性重定向状态码,浏览器会自动重定向到指定的页面,而此页面并不是我们想要的含有Flag的页面。这时,我们需要添加一些指令来使页面不发生重定向。
五、与HTTP协作的Web服务器
1、代理
代理是一种有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
例如我们常用的抓包软件其实就是一个代理服务器,利用它我们就可以截获客户端与服务器端之间传输的数据包。
2、网关
网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像拥有资源的源服务器一样对请求进行处理。
网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非HTTP协议服务。
网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。
3、缓存
缓存是指代理服务器或客户端本地磁盘内保存的资源副本。
利用缓存可减少对源服务器的访问,因此也就节省了通信流量和通信时间。
六、HTTP与Web安全
1、HTTPS
HTTP加上加密处理和认证以及完整性保护后即是HTTPS。
&emps;HTTPS并非一种新的协议,只是HTTP披上了SSL或者TSL协议外壳,拥有了HTTPS的加密、证书和完整性保护这些功能。
2、密钥
在数据传输过程中,加密和解密都会用到密钥。
没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能进行解密了。如果密钥被攻击者获得,那加密也就失去了意义。
3、数字证书
数字证书是指在互联网通讯中标志通讯各方身份信息的一个数字认证,人们可以在网上用它来识别对方的身份。
数字证书又称为数字标识。数字证书对网络用户在计算机网络交流中的信息和数据等以加密或解密的形式保证了信息和数据的完整性和安全性。
就先写到这吧,以后再做补充和修改,这是我在博客上写的第一篇学习总结,在写的过程中也结合了这段时间做CTF题的一些感受,写完后感觉对HTTP的知识体系有了更加清晰的认识。
最重要的还是能和大家一起交流学习,共同进步。