当前位置: 首页 > news >正文

CVE-2017-7529 Nginx越界读取内存漏洞

漏洞概述

当使用Nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header请求,来获取响应中的缓存文件头部信息。在某些配置中,缓存文件头可能包含后端服务器的IP地址或其它敏感信息,从而导致信息泄露。

影响版本

Nginx version 0.5.6 - 1.13.2

修复版本

Nginx version 1.13.3, 1.12.1

环境搭建

拉取vulhub

git clone https://github.com/vulhub/vulhub.git

搭建镜像

cd vulhub/nginx/CVE-2020-7529
docker-compose up -d

在这里插入图片描述

漏洞复现

运行poc.py
在这里插入图片描述

原理解析

该漏洞的本质实际上是range过滤器整型溢出。
首先是http range,range可以允许服务器上只发送HTTP消息的一部分到客户端。这样的部分请求对于大型媒体、具有中断和恢复下载进度的下载文件请求很有帮助。

ngx_http_range_parse函数源码位置:
https://github.com/nginx/nginx/blob/release-1.13.2/src/http/modules/ngx_http_range_filter_module.c#L301
这段代码是要把bytes=-中“-”两边的数字取出分别赋值给start和end变量,标记读取文件的偏移和结束位置,当以-开头只给end时,start会自行计算。
在这里插入图片描述

对于有额外头部的缓存文件若start值为负(合适的负值),那么就意味着缓存文件的头部也会被读取。
图中阐述了如何使start<0,但end的构造如果略大于content_length,则无法通过以下校验:
在这里插入图片描述

而end如果过大,又会使start的绝对值过大,远超文件长度,使读取失败。
因此,可以构造前小后大两个end值:bytes=-X,-Y,使得start为较小的负值,而size会巨大,即可绕过检查。
如下是payload:
在这里插入图片描述

打印出range:
在这里插入图片描述

修复方法

https://github.com/nginx/nginx/compare/release-1.13.2…release-1.13.3#diff-478bbf7792c487160c237dc997ea53fa0cc9bfd24e4ab9cd9cddf6272d510c45
在这里插入图片描述

加入了更完善的校验机制。

http://www.lryc.cn/news/192641.html

相关文章:

  • 力扣每日一题136:只出现一次的数字
  • 导航栏参考代码
  • 区块链(11):java区块链项目之页面部分实现
  • RootSIFT---SIFT图像特征的扩展
  • ChatGPT角色扮演教程,Prompt词分享
  • zabbix监控——自定义监控内容
  • 中断机制-中断协商机制、中断方法
  • three.js入门 —— 实现第一个3D案例
  • 《动手学深度学习 Pytorch版》 8.4 循环神经网络
  • 什么是物联网阀控水表?
  • Kafka 开启SASL/SCRAM认证 及 ACL授权(一)认证
  • 关于智能控制领域中模糊控制算法的概述
  • 剖析伦敦银最新价格走势图
  • 通用人工智能技术(深度学习,大模型,Chatgpt,多模态,强化学习,具身智能)
  • makefile的特性-部分语法记录
  • 【Java 进阶篇】JavaScript 正则表达式(RegExp)详解
  • 51单片机之串口通信例程
  • Hadoop高可用集群(HA)一键启动脚本
  • C#开发的OpenRA游戏之金钱系统(1)
  • Puppeteer监听网络请求、爬取网页图片(二)
  • GoLang连接mysql数据库
  • 软件工程与计算总结(八)软件设计基础
  • someip 入门
  • C# 使用Parallel去执行并行下载
  • @Component 和 @Bean的区别
  • 百度测试开发工程师面试心得
  • 发现更多美景!XnViewMP for Mac/Windows 图片浏览软件
  • 城市广告牌安全传感器特点有哪些?
  • 源码部署lamt架构
  • 【Java 进阶篇】JavaScript Math对象详解