协议分析—HTTP协议和DNS协议
一、HTTP协议
1、HTTP协议简介
1.1 什么是超文本(HyperText) ?
包含有超链接(Link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web) ,因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
1.2 什么是URL ?
URL即统一资源定位符(Uniform Resource Locator) ,用来唯一地标识万维网中的某一个文档。URL由协议、主机和端口(默认为80)以及文件名三部分构成。
1.3 什么是超文本传输协议HTTP ?
HTTP全称为Hyper Text Transfer Protocol,是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另-台主机(浏览器)的应用层协议,以实现超链接的功能。
1.4 HTTP协议的重要性
●是大多数网站遵循的规范,也是与网站交互的语言基础
●HTTPS协议其实是HTTP协议的传输加密实现
●是WAF与扫描器的策略研发的基本准则
●WebServer虽各自实现有所差异,但都统一于HTTP协议的基础之上
2、HTTP工作原理
2.1 使用浏览器上网的工作原理
①用户到浏览器:鼠标点击、键盘输入、文件上传、语音录入
②超文本Hypertext转化显示(区别于富文本) ,包括视频、音频
③HTTP协议请求
④HTTP协议响应
2.2 HTTP工作原理
(1)请求/响应交互模型.
在用户点击URL为http://www.moc.com/fac.php的链接后,浏览器和Web服务器执行以下动作:
1 )浏览器分析超链接中的URL
2 )浏览器向DNS请求解析www.moc.com的IP地址
3 ) DNS将解析出的IP地址10.10.10.10返回浏览器
4 )浏览器与服务器建立TCP连接(80端口)
5 )浏览器请求文档: GET /fac.php
6 )服务器给出响应,将文档fac.php发送给浏览器
7 )释放TCP连接
8 )浏览器显示fac.php中的内容
(2)HTTP的连接方式和无状态性
非持久性连接:即浏览器每请求一个Web文档 ,就创建一个新的连接,当文档传输完毕后,连接就立刻被释放。
注:
HTTP1.0、HTTP0.9采用此连接方式。
对于请求的Web页中包含多个其他文档对象(如图像、声音、视频等)的链接的情况,由于请求每个链接对应的文档都要创建新连接,效率低下。
持久性连接:即在一个连接中,可以进行多次文档的请求和响应。服务器在发送完响应后,并不立即释放连接,浏览器可以使用该连接继续请求其他文档。连接保持的时间可以由双方进行协商。
无状态性:指同一个客户端(浏览器)第二次访问同一个Web服务器上的页面时,服务器无法知道这个客户曾经访问过。HTTP的无状态性简化了服务器的设计,使其更容易支持大量并发的HTTP请求。
2.3 访问网站过程分析
第一步:浏览器分析超链接中的URL
第二步: DNS请求
第三步: DNS回复
第四步: PC向解析出的域名服务器地址发起tcp三次握手
第五步: PC向解析出的域名服务器发出GET请求,请求主页
第六步: 服务器回应HTTP/1.1 200 OK ,返回主页数据包
3、HTTP报文结构
(1)HTTP请求方法
方法(Method)是对所请求对象所进行的操作,也就是一些命令。 常见的方法具体如下:
方法 | 含义 | 方法 | 含义 |
---|---|---|---|
GET | 请求读取一个Web页面 | HEAD | 请求读取一个Web页面的首部 |
POST | 附加一个命名资源(如Web页面) | PUT | 请求存储一个Web页面 |
DELETE | 删除Web页面 | TARCE | 用于测试,要求服务器送回收到的请求 |
CONNECT | 用于代理服务器 | OPTION | 查询特定选项 |
(2)响应报文中的状态码
状态码(Status-Code)是响应报文状态行中包含的一个3位数字,指明特定的请求是否被满足,如果没有满足,原因是什么。状态码分为以下五类:
状态码 | 含义 | 举例 |
---|---|---|
1xx | 通知信息 | 100=服务器正在处理客户请求 |
2xx | 成功 | 200=请求成功(OK) |
3xx | 重定向 | 301=页面改变了位置 |
4xx | 客户端发生错误 | 403=禁止的页面;404=页面未找到 |
5xx | 服务器发生错误 | 500=服务器内部错误;503=以后再试 |
(3)HTTP头部
头(Header) | 类 型 | 说明 |
---|---|---|
User-Agent | 请求 | 关于浏览器和它平台的信息,如Moilla4.0 |
Accept | 请求 | 客户能处理的页面的类型,如text/html |
Accept-Charset | 请求 | 客户可以接受的字符集,如Unicode-1-1 |
Accept-Encoding | 请求 | 客户能处理的页面编码方法,如gzip |
Accept-Language | 请求 | 客户能处理的自然语言,如en(英语),zh-cn(简体中文) |
Host | 请求 | 服务器的DNS名称。从URL中提取出来,必需。 |
Referer | 请求 | 用户从该URL代表的页面出发访问当前请求的页面 |
Cookie | 请求 | 将以前设置的Cookie送回服务器器,可用来作为会话信息 |
Date | 双向 | 消息被发送时的日期和时间 |
Server | 响应 | 关于服务器的信息,如Microsf-11/6.0 |
Content-Encoding | 响应 | 内容是如何被编码的(如gzip) |
Content-Language | 响应 | 页面所使用的自然语言 |
Content-Length | 响应 | 以字节计算的页面长度 |
Content-Type | 响应 | 页面的MIME类型 |
Last-Modified | 响应 | 页面最后被修改的时间和日期,在页面缓存机制中意义重大 |
Location | 响应 | 指示客户将请求发送给别处,即重定向到另一个URL |
Set-Cookie | 响应 | 服务器希望客户保存一个Cookie |
二、DNS协议
DNS简介
DNS服务和协议:端口号( 如: DNS TCP/UDP端口53 )
DNS协议定义了一套自动化服务,该服务将资源名称和所需的数字网络地址匹配。
DNS是一种客户/服务器服务模式, DNS客户端本身就是一种服务,也被称为DNS解析器,支持其它网络应用程序和服务的名称解析。
DNS使用域名守护程序( named )主要提供了域名解析的服务DNS服务器存储了不同类型的资源记录,用来解析域名,这些记录包括名字,地址,类型。
DNS定义了统一的消息格式,各种类型的消息都用此格式。
ipconfig /displaydns命令可以显示所有DNS缓存条目。
记录类型
A-将域名指向一个IPV4地址
AAAA-将域名指向一个IPV6地址
Ns-将子域名指定其他DNS服务器解析
MX-将域名指向邮件服务器地址
SRV-记录提供特定的服务的服务器
TXT-文本长度限制512,通常做SPF记录(反垃圾邮件)
CAA- CA证书颁发机构授权校验
显性URL-将域名重定向到另外一个地址
隐性URL-与显性URL类似,但是会隐藏真实目标地址
域名系统采用分级系统创建域名数据库,提供域名解析服务,层级关系模型:倒置的树。最高的根域名服务器维护最高级别域名服务器记录,后者维护下一级域名服务器的记录。
1、DNS查询
域名服务的解析方法:递归,迭代。
客户端发出的查询都是递归查询, DNS服务器向外发出的查询一般都是迭代查询。
2、DNS C2隐蔽隧道
DNS隧道原理
DNS隧道的存在,必然有相应的应用场景,其实也是为了规避防火墙对协议的检测,无论防火墙检测多么严格, 一般都会开启DNS查询的53端口。
DNS隧道可以分为直连和中继两种。直连也就是Client直接和指定的目标DNS Server(Authoritative NS Server)连接,通过将数据编码封装在DNS协议中进行通信,这种方式速度快,但是隐蔽性比较弱,很容易被探测到, 其实本质上是典型的C/S结构。 另外限制比较高,很多场景不允许自己指定DNS Server。
通过DNS迭代查询而实现的中继隧道,则更为隐秘,但同时因为数据包到达目标DNS Server前需要经过多个节点,所以速度上较直连慢很多。
3、DNS放大攻击
3.1 DNS放大攻击工作原理
基本上大部分的放大攻击是攻击者通过许多请求然后将其放大以此来消耗目标Web资源间的带宽。通常黑客利用DNS服务器放大攻击的特性,使用受损的被控僵尸主机将带有欺骗性IP地址,然后利用DNS服务器向被攻击者返回查询的结果。通常查询应答数据包会比查询请求数据包大数倍。导致被攻击者的源服务器因为泛滥的流量而变得不堪重负,最终导致拒绝服务。
攻击者利用大量被控主机,向大量的DNS服务器发送DNS请求。但请求中的源IP地址均被伪造成被攻击者的IP , 于是DNS服务器会向被攻击者返回查询结果。通常查询答包会比查询请求包大数倍甚至数十倍 ,从而形成对被攻击者的IP地址的流量放大攻击。
3.2 从受害者角度看特征
1.DNS流量占比极高
2.DNS流量包长超过1000B
3.TYPE=255的应答报文较多弓
4.出现大量IP分片报文(最大数据报1500字节,以太包1518字节)
3.3 建议用户:
增大链路带宽;
DNS服务器关闭递归查询;
一旦发生大规模DNS放大攻击,可以马上与ISP联系,在上游对攻击进行过滤。
4、DNS欺骗
DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。
原理:如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS欺骗的基本原理。DNS欺骗其实并不是真的“黑掉”了对方的网站,而是冒名顶替、招摇撞骗罢了。