| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> HTTP 请求走私 -> 正文阅读 |
|
[网络协议]HTTP 请求走私 |
什么是 HTTP 请求走私?HTTP 请求走私是一种用于干扰网站处理从一个或多个用户接收的 HTTP 请求序列的方式的技术。请求走私漏洞通常本质上至关重要,允许攻击者绕过安全控制,未经授权访问敏感数据,并直接危害其他应用程序用户。 漏洞成因HTTP规范提供了两种不同的方法来指定请求的结束位置:
这里的解析错误主要取决于HTTP1.1中的两个特性: Keep-Alive:是在 HTTP 请求中增加一个特殊的请求头 Connection: Keep-Alive,告诉服务器,接收完这次 HTTP 请求后,不要关闭 TCP 链接,后面对相同目标服务器的 HTTP 请求,重用这一个 TCP 链接,这样只需要进行一次 TCP 握手的过程,可以减少服务器的开销,节约资源,还能加快访问速度。这个特性在 HTTP1.1 中是默认开启的。 Pipeline(http管线化):http管线化是一项实现了多个http请求但不需要等待响应就能够写进同一个socket的技术,仅有http1.1规范支持http管线化。在这里,客户端可以像流水线一样发送自己的 正常HTTP请求: 当我们向代理服务器发送一个比较模糊的 HTTP 请求时,由于两者服务器的实现方式不同,可能代理服务器认为这是一个 HTTP 请求,然后将其转发给了后端的源站服务器,但源站服务器经过解析处理后,只认为其中的一部分为正常请求,剩下的那一部分,就算是走私的请求,当该部分对正常用户的请求造成了影响之后,就实现了 HTTP 走私攻击。 HTTP 流水线上边写到Pipeline(http管线)可以像流水线一样发送http请求,所以这里简单了解下HTTP流水线原理 执行
在一个连接中发送3个HTTP请求,服务器会按序响应3个HTTP请求。可以使用这种办法来最小化请求之间的间隔时间。但由于手工录入可能较慢,可能无法实现我们的意图,所以也可以用命令来代替
这里就可以结合请求走私,执行一些我们想要执行的操作 五种攻击方式CL不为0所有不携带请求体的HTTP请求都有可能受此影响。前端代理服务器允许GET请求携带请求体;后端服务器不允许GET请求携带请求体,它会直接忽略掉GET请求中的Content-Length头,不进行处理。这就有可能导致请求走私。 代码实例
这里要提一下长度的计算规则:
所以这里的44=21+19+2*2(这两行后边的换行,即:( 攻击流程前端:收到该请求,读取 第一个:
第二个:
CL-CLRFC7230规范在RFC7230中,规定当服务器收到的请求中包含两个Content-Length,而且两者的值不同时,需要返回400错误。 有些服务器不会严格的实现该规范,假设中间的代理服务器和后端的源站服务器在收到类似的请求时,都不会返回400错误。 代码实例
攻击流程前端: 后端: 此时如果又来一个请求
拼接好缓冲区的
此时就会报错,这样就实现了一次HTTP走私攻击,对正常的用户请求造成了影响,而且还可以扩展成类似于CSRF的攻击方式。 CL-TE前置服务器认为 RFC2616规范如果收到同时存在 chunked设置了
代码实例
攻击流程前端: 后端: 此时再有用户请求
就会返回错误内容造成服务器解析异常
实验https://portswigger.net/web-security/request-smuggling/lab-basic-cl-te 改为POST传参后加上如下三行,传参两次,第二次服务器解析异常 TE-CL前置服务器认为 代码实例注意下边有两个换行,为了让
攻击流程前端: 读取到0\r\n\r\n后, 后端: 此时再有用户发出请求
拼接预留内容解析错误
实验https://portswigger.net/web-security/request-smuggling/lab-basic-te-cl 传参两次,第二次服务器解析异常 TE-TE前置和后端服务器都支持 代码实例对
攻击流程前端:服务器读取到 后端:由于构造了大小写混淆,会直接回退到 混淆payloadPortSwigger 中还给出了很多混淆payload:
实验https://portswigger.net/web-security/request-smuggling/lab-obfuscating-te-header 漏洞利用请求走私绕过前端安全控制CL-TE 漏洞在某些应用程序中,前端Web服务器用于实现某些安全控制,以决定是否允许处理单个请求。允许的请求将转发到后端服务器,在该服务器中,它们被视为已通过前端控件传递。 https://portswigger.net/web-security/request-smuggling/exploiting/lab-bypass-front-end-controls-cl-te 本实验当前用户被允许访问根目录 请求走私揭示前端请求重写前端代理服务器在接收到请求后不会直接将请求转发给后端服务器,而是先添加一些必要的字段然后转发给后端服务器。如果不能获取到前端代理服务器添加或重写的字段,那么我们走私的请求就无法被后端服务器处理。 如何获取这些值,这里有一个简单的方法:
https://portswigger.net/web-security/request-smuggling/exploiting/lab-reveal-front-end-request-rewriting 输入框随便输入个值,抓包,构造HTTP走私请求发包 将HTTP头加到走私请求中 请求走私捕获用户请求要进行攻击,您需要走私一个将数据提交到存储功能的请求,其参数包含位于请求最后的数据。后端服务器处理的下一个请求将附加到走私请求上,结果将存储另一个用户的原始请求。 https://portswigger.net/web-security/request-smuggling/exploiting/lab-capture-other-users-requests 访问博客文章并发表评论。将 之后就是一个漫长的过程,一直调整cl长度,发起请求,最后得到了用户的Cookie及指纹信息 请求走私利用反射 XSS该利用方式优点:
https://portswigger.net/web-security/request-smuggling/exploiting/lab-deliver-reflected-xss 先抓包写个xss,看下具体位置及闭合方式,这里需要用 请求走私执行 Web 缓存投毒果前端基础架构的任何部分执行内容缓存(通常出于性能原因),则可能会使用场外重定向响应来毒化缓存。这将使攻击持续存在,从而影响随后请求受影响URL的所有用户。 https://portswigger.net/web-security/request-smuggling/exploiting/lab-perform-web-cache-poisoning 实验环境中提供了漏洞利用的辅助服务器。 选择 使用漏洞利用服务器的主机名启动的攻击,以毒化服务器缓存,构造数据包: 访问/resources/js/tracking.js发生跳转 之后访问服务器主页出现弹窗 漏洞利用方式先做到这里,以上的方式其实都是针对于HTTP/1.1的,如果换成HTTP/2.0就基本都不行了,所以如果需要的话还需要继续进行HTTP/2.0的利用学习,可参考:高级请求走私|网络安全学院 (portswigger.net) Gunicorn 20.0.4 请求走私当代理使用Haproxy,服务器用的是Gunicorn并且版本高于20.0时,就有了这种新的利用方式。它是由对标头的特殊解析引起的。 当我们传入一段这样的请求
Haproxy 将看到以下两个请求:
而 gunicorn 将看到以下两个不同的请求:
这样就造成了请求走私漏洞 同时我们可以使用命令发送上述请求:
参考文章: 详细笔记+实验:HTTP请求走私 - FreeBuf网络安全行业门户 浅谈HTTP请求走私 - 先知社区 (aliyun.com) |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:26:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |