HTTP协议相关漏洞

一、HTTP协议

HTTP是一个基于请求与响应模式的、无状态的应用层协议。
常基于TCP的连接方式 ,即http是将数据打包成TCP数据包来进行传送的,绝大多数Web应用,都是构建在HTTP协议之上,即目前使用浏览器访问web网站都是以http协议为标准的。

1、HTTP协议工作原理

客户机与服务器建立连接后,浏览器可以向web服务器发送请求并显示收到的网页,当用户在浏览器地址栏中输入一个URL或点击一个超连接时,浏览器就向服务器发出了HTTP请求,请求方式的格式为:统一资源标识符、协议版本号,后边是MIME(Multipurpose Internet Mail Extensions)信息包括请求修饰符、客户机信息和可能的内容。该请求被送往由URL指定的WEB服务器,WEB服务器接收到请求后,进行相应反映,其格式为:一个状态行包括信息的协议版本号、一个成功或错误的代码,后边服务器信息、实体信息和可能的内容。即以HTTP规定的格式送回所要求的文件或其他相关信息,再由用户计算机上的浏览器负责解释和显示。

2、HTTP协议的方法

GET :请求获取Request-URI所标识的资源
POST :在Request-URI所标识的资源后附 加新的数据
HEAD:请求获取由Request-URI所标识的资源的响应消息报头
PUT: 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE:请求服务器删除Request-URI所标识的资源
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT:保留将来使用
OPTIONS:请求查询服务器的性能或查询与资源相关的选项等

3、HTTP状态码

类别原因短语
1XXInformational(信息性状态码)接收的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error(服务端错误状态码)服务器处理请求出错

常见的HTTP状态码

200 OK
204 No Content
   一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用.
206 Partial Content
   该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求.响应报文中包含由Content-Range指定范围的实体内容.
 301 Moved Permanently
   永久性重定向.请求资源的URI已变更.
302 Found
   临时性重定向.
303 SEE OTHER
   该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源
304 Not Modified
   该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但为满足条件的情况.
307 Temporary Redirect
   临时重定向,类似302
400 Bad Request
   该状态码表示请求报文中存在语法错误
401 Unauthorized
   需要认证/认证失败
403 Forbidden
   未被授权
404 Not Found
500 Internal Server Error
503 Service Unavailable
   该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求.

二、HTTP的缺点

1、明文传输

通信使用明文可能会被窃听

1.1、TCP/IP 是可能被窃听的网络

互联网上流动的数据可能被恶意窥视, 被抓包(Packet Capture)或嗅探器(Sniffer)工具收集到数据包并解析,eg: Wireshark, 可以获取HTTP协议的请求和响应的内容,并对其进行解析

1.2、加密处理防止被窃听

通信的加密
HTTP协议中没有加密机制,可以通过和SSL或TLS的组合使用,加密HTTP的通信内容.

 HTTPS -> HTTP + SSL ->HTTP Secure / HTTP over SSL

内容的加密
对报文主体进行机密处理,前提是要求客户端和服务端同时具备加密和解密机制.

2、不安全认证

不验证通信方的身份,因此有可能遭遇伪装

  • 任何人都可发起请求
  • 查明对手的证书
    SSL不仅提供加密处理,而且使用了证书以确定通信方的身份.

3、无法判断报文完整性

无法证明报文的完整性,所以有可能已遭篡改

接收到的内容可能有误
中间人攻击(Man-in-the-Middle attack,MITM): 请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击.
如何防止篡改
常用的是 MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法.
提供下载服务的网站,比如Apache相关的软件下载,会提供以PGP(Pretty Good Privacy,完美隐私)创建的签名及MD5算法生成的散列值.

三、HTTP首部注入攻击

HTTP首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任何响应首部或主体的一种攻击.属于被动攻击模式。

向首部主体内添加内容的攻击称为HTTP响应截断攻击(HTTPResponse Splitting Attack)

如下所示,Web应用有时会把从外部接收到的数值,赋给响应首部字段Location和Set-Cookie

Location: http://www.example.com/a.cgi?q=12345
Set-Cookie: UID=12345

HTTP首部注入攻击有可能造成以下影响:

  • 设置任何Cookie信息
  • 重定向至任何URL
  • 显示任意的主体(HTTP响应截断攻击, HTTP Response Splitting Attack)

1、设置任何Cookie信息

下面我们以选定某个类别后即可跳转至各类别对应页面的功能为例,讲解HTTP首部注入攻击。该功能为每个类别都设定了一个类别ID值,一旦选定某类别,就会将该ID值反映在响应内的Location首部字段内,形如

Location: http://example.com/?cat=101

令浏览器发生重定向跳转

在这里插入图片描述

攻击者以下面的内容替代之前的类别ID后发送请求

101%0D%0ASet-Cookie:+SID=123456789

其中,%0D%0A代表HTTP报文中的换行符,紧接着的是可强制将攻击者网站的会话ID设置成SID=123456789的Set-Cookie首部字段。

发送该请求之后,假设结果返回以下响应

Location:http://example.com/?cat=101(%0D%0A:换行符)
Set-Cookie:SID=123456789

此刻,首部字段Set-Cookie已生效,因此攻击者可指定修改任意的Cookie信息。通过和会话固定攻击(攻击者可使用指定的会话ID)攻击组合,攻击者可伪装成用户

攻击者输入的%0D%0A,原本应该属于首部字段Location的查询值部分,但经过解析后,%0D%0A变成了换行符,结果插入了新的首部字段

这样一来,攻击者可在响应中插入任意的首部字段

2、重定向至任何URL

该功能就是向URL指定参数后,使本来的URL发生重定向跳转

http://example.com/?redirect=http://www.tricorder.jp

攻击者把重定向指定的参数改写成已设好陷阱的Web网站对应的连接,如下所示

http://example.com/?redirect=http://hackr.jp

用户看到URL后原以为访问example.com,不料实际上被诱导至hackr.jp这个指定的重定向目标

可信度高的Web网站如果开放重定向功能,则很有可能被攻击者选中并用来作为钓鱼攻击的跳板

3、HTTP响应截断攻击

HTTP响应截断攻击是用在HTTP首部注入的一种攻击。攻击顺序相同,但是要将两个%0D%0A%0D%0A并排插入字符串后发送。利用这两个连续的换行就可作出HTTP首部与主体分隔所需的空行了,这样就能显示伪造的主体,达到攻击目的。这样的攻击叫做HTTP响应截断攻击

%0D%0A%0D%0A<HTML><HEAD><TITLE>之后,想要显示的网页内容<!--

在可能进行HTTP首部注入的环节,通过发送上面的字符串,返回结果得到以下这种响应

Set-Cookie: UID=(%0D%0A :换行符)
(%0D%0A :换行符)
<HTML><HEAD><TITLE>之后,想要显示的网页内容(原来页面对应的首部字段和主体部分全视为注释)

利用这个攻击,已触发陷阱的用户浏览器会显示伪造的Web页面,再让用户输入自己的个人信息等,可达到和跨站脚本攻击相同的效果

另外,滥用HTTP/1.1中汇集多响应返回功能,会导致缓存服务器对任意内容进行缓存操作。这种攻击称为缓存污染。使用该缓存服务器的用户,在浏览遭受攻击的网站时,会不断地浏览被替换掉的Web网页

posted @ 2022-07-06 18:24  爱吃_白菜  阅读(361)  评论(0编辑  收藏  举报