Índex
Paper és una màquina de dificultat baixa molt recomanada si no tens molta experiència fent CTFs, ja que toca diverses tècniques interessants poc complexes però que et serviran en un futur.
La part més difícil és aconseguir execució de comandes al servidor, ja que com veuràs a continuació s’han d’explotar diverses vulnerabilitats. En canvi, l’escalada de privilegis és bastant directe.
Accés al servidor
Primera enumeració
Primer de tot, llenço un parell d’nmaps per identificar els serveis oberts. Amb el primer comprovo el top 1000 de ports i les seves versions:
I una vegada tinc informació per seguir, tiro el de tots els ports. Així no perdo el temps esperant a que aquest acabi i puc avançar feina:
Analitzant els resultats, sé que m’hauré d’enfrontar a una web, així que sense pensar-ho dues vegades llenço wfuzz per enumerar directoris amb un diccionari de SecLists:
Mentre espero a que acabi l’enumeració de directoris em poso a navegar per la web amb el Burp activat. El que em trobo és una pàgina per defecte:
Amb Nikto aconsegueixo algo més d’informació, com per exemple les versions, que també pots aconseguir analitzant les capçaleres de les respostes del servidor amb Burp:
Recapitulant, tota l’informació que he aconseguit fins ara és:
- Apache httpd 2.4.37
- OpenSSL 1.1.1k
- mod_fcgid 2.3.9
- OpenSSH 8.0
- PHP 7.2.24
- CentOS
- Linux 5.7.28
- Capçalera office.paper
De tot lo anterior el que més crida l’atenció són les versions de PHP i Apache, ja que si tenen una vulnerabilitat pública podria ser trivial aconseguir accés. No obstant això, en lloc de posar-me a investigar exploits he preferit investigar primer la capçalera office.paper, ja que no és comuna.
Afegeixo el domini al fitxer /etc/hosts:
D’aquesta manera, si en lloc d’utilitzar l’IP utilitzo el domini, puc accedir a una pàgina web que no és la per defecte:
Ràpidament m’adono amb el Burp que la web es tracta d’un WordPress:
Torno a començar l’enumeració, ja que es tracta d’una pàgina nova, però ni Nikto ni Wfuzz troben res interessant, a part dels típics directoris de WordPress: wp-content, manual, wp-includes i wp-admin.
Així que em poso a navegar pel blog per intentar treure informació interessant. Hi ha diverses entrades amb comentaris.
Sembla que el bloc és una paròdia de la coneguda sèrie The Office. Puc extreure un possible usuari anomenat Creed Bratton. També puc extreure alguns més d’altres entrades:
Per últim, el comentari d’aquesta entrada dona una informació que pot ser valuosa en un futur, així que me l’apunto, a part de més usuaris:
He aconseguit els següent usuaris:
- prisonmike
- nick
- jan
- michael
- creed braton
Així que em proposo saber quins existeixen i quins no explotant una vulnerabilitat típica de WordPress: enumeració d’usuaris.
Aquesta consisteix en que un atacant pot saber si un usuari existeix o no a través dels missatges que retorna el servidor. En aquest cas, el panell de login de WordPress (wp-admin) és vulnerable.
Quan introdueixo un usuari que no existeix i el servidor em respon amb un missatge d’error:
Però si afegeixo un que existeix em retorna un missatge diferent:
Amb aquest mètode aconsegueixo saber que els següents usuaris existeixen:
- prisonmike
- nick
Arribats a aquest punt, el que he aconseguit fins ara han sigut dos usuaris, diverses versions de les tecnologies que utilitza el servidor i el comentari que parla sobre les entrades esborranys.
Decideixo indagar una mica més en el WordPress i utilitzo una eina especialitzada anomenada WPScan:
Aquesta em dona la versió del servidor i indica que té 32 vulnerabilitats conegudes:
Em poso a analitzar-les. Marco en blau les que no m’interessen ja que és un CTF, com per exemple atacs de client com els XSS. Marco en blanc les que haig d’investigar més a fons per determinar si poden ser útils. En taronja les que em criden l’atenció i amb vermell la que més m’ha interessat, ja que parla d’esborranys, igual que el comentari de l’entrada del blog.
Primera explotació
En aquest punt, ja ho tinc més a enumerat. Potser podria ampliar més l’informació sobre algun punt, però el 90%ja el tinc. He recopilat el següent:
Usuaris
- prisonmike
- nick
Versions
- Apache httpd 2.4.37 ((centos)
- OpenSSL/1.1.1k
- mod_fcgid/2.3.9
- OpenSSH 8.0
- php 7.2.24
- CentOS
- Linux 5.7.28
Directoris
- wp-content
- wp-includes
- manual
- wp-admin
Vulnerabilitats WordPress
- Unauthenticated View Private/Draft Posts
- Server-Side Request Forgery (SSRF) in URL Validation
- Disclosure of Password-Protected Page/Post Comments
Altres
- Comentari: possible informació sensible a l’esborrany de l’usuari Michael.
- Blog sobre la sèrie The Office (pot interessar per fer força bruta de contrasenyes)
Una vegada feta tota l’enumeració, toca decidir els vectors d’atac que seguiré per comprometre el servidor. La meva recomanació que és que facis una llista com aquesta i l’ordenis el que en diuen “the most hanging fruit”. Aquest concepte fa referència a imaginar cada punt de l’enumeració com una fruita penjada d’un arbre i el teu objectiu és agafar la més madura.
Fer primer l’enumeració i després utilitzar aquesta tècnica et servirà per no perdre el temps. Per exemple, imagina que comences a enumerar, trobes una versió i hi ha un exploit públic. Comences a retocar-lo perquè funcioni, inverteixes 5 hores i no ho aconsegueixes. No obstant, si haguessis seguit fent l’enumeració haguessis vist ràpidament que la web és vulnerable a injecció d’SQL que t’hagués permès comprometre el servidor en 10 minuts.
Tornant al CTF, els meus vectors d’atac ordenats per prioritat seran els següents:
- Vulnerabilitat WordPress: Unauthenticated View Private/Draft Posts
- Força bruta usuaris al login wp-admin
- Les altres vulnerabilitats WordPress
- Revisar exploits púbics versions PHP, Apache i mod_fcgid
Començo amb el primer vector d’atac que l’he escollit perquè el comentari de l’entrada i la vulnerabilitat s’assemblen massa perquè sigui una coincidència.
Hi ha una explicació detallada i una prova de concepte al blog 0day.work. En mode resum, hi ha un error al codi que permet a un atacant veure informació secreta just abans que el control d’accés validi si l’usuari té permisos.
El payload és bastant simple, consisteix en afegir ?static=1a la URL:
Quan ho exploto, el servidor retorna la pàgina de l’imatge. En groc hi ha les entrades del blog que són públiques i en vermell les entrades que són un esborrany.
A una d’elles hi ha una URL que sembla servir per poder-me registrar, ja que recorda que al panell d’inici de sessió del WordPress (wp-admin) tenia el registre deshabilitat.
Per suposat, abans de poder accedir a la URL, he d’afegir el domini al fitxer de hosts:
Una vegada fet, puc accedir al que sembla un panell d’inici de sessió i registre de Rocket.chat:
Segona enumeració
Primer de tot em registro:
A l’iniciar sessió, la web em mostra aquest missatge:
Així que sense pensar-m’ho dues vegades, intento accedir al panell d’administració:
Malauradament, no tinc permisos. Segueixo navegant per la pàgina i m’apareix un chat:
És un chat de només lectura, sembla que és el que utilitzaven el empleats abans de que eliminessin tots els usuaris. Així que vaig a l’inici i llegeixo tots els missatges. A part dels usuaris, he vist uns missatges que m’han cridat l’atenció:
L’usuari DwightKSchrute parla d’un bot automàtic que serveix per ajudar als empleats a fer accions bàsiques. A continuació, kellylikescupcakes executa la comanda help del bot i mostra el següent:
A aquest punt, veig clarament que la cosa està en executar el bot, així que decideixo no fer tota l’enumeració. Inverteixo bastanta estona intentant esbrinar com puc escriure al xat que és només de lectura, inclús em poso a investigar vulnerabilitats específiques de la tecnologia.
Després de xocar contra una paret durant un rato, m’adono que al xat general hi ha l’usuari recyclops que ha respost amb l’ajuda. Clico el nom i veig que puc obrir un xat privat amb ell directament.
Segona explotació
Em centro directament amb les funcionalitats de llistar el contingut de la carpeta i llegir fitxers. Segons les instruccions, si escric “list sale” puc veure el contingut de la carpeta que utilitzen el departament de venda:
Per llegir el fitxer, havia d’escriure “file portfolio.txt“:
No obstant això, no em deixa accedir-ho. M’adono que mostra el directori absolut del fitxer, així que intento indicar la carpeta sales:
Tot i que el contingut no m’interessa, em fa pensar en que possiblement pugui moure’m pel servidor aprofitant que el tenen mal configurat:
Per acabar de confirmar les meves sospites, decideixo intentar accedir al fitxer /etc/passwd:
Ara sé que puc llegir qualsevol fitxer del sistema, sempre que tingui permisos clar, però el que jo vull és executar comandes. Així que intento provar de concatenar comandes directament:
Com que no he tingut èxit, em poso a investigar una mica la carpeta de l’usuari dwight:
Em crida l’atenció el fitxer bot_restart.sh, scripts que a vegades poden contenir contrasenyes en text clar o la carpeta .ssh per si hi ha alguna clau o informació que em serveixi per entrar a través de l’SSH. Malauradament no trobo res interessant.
Entro a la carpeta hubot i investigo el fitxer start_bot.sh i el log:
Igual que abans, sense sort. En aquest punt, decideixo invertir uns minuts a investigar per internet què és exactament el hubot, ja que jo no el conec. Llegeixo la documentació oficial buscant com es configuren l’usuari i la contrasenya del bot, ja que no les he trobat als scripts.
Hi ha un apartat on indica diverses maneres de configurar-ho, la que a mi em crida l’atenció és la de configurar variables globals:
Sabent això, llegeixo les variables d’entorn de la home sense èxit. Després m’adono que a la carpeta hubot hi ha un fitxer .env:
Efectivament, hi ha un usuari i una contrasenya en clar!
Ara toca esbrinar on utilitzar aquestes credencials, ja que com bé ja sé per l’nmap que he llençat al començament, els ports 8000 i 48320 estan tancats des de fora, així que no puc accedir-hi.
Llegeixo una altra vegada el fitxer /etc/passwd per revisar quins usuaris em poden interessar:
Els dos últims tenen configurada una terminal. Per últim, només em queda decidir a on provo els usuaris i la contrasenya. Per suposat, l’únic lloc que se m’acut és al servei SSH.
Primer provo l’usuari rocketchat, però sense èxit. Però amb l’usuari dwight aconsegueixo accedir al servidor i llegir la flag!
Escalada de privilegis
El primer que faig és executar la comanda id per assegurar-me que el meu usuari no sigui root, intentar executar la comanda sudo per saber si estar al grup de sudoers i executar uname -i per saber el sistema operatiu i la seva versió:
Primer reviso una mica la carpeta home, però tot el que hi ha es el que ja havia vist amb el bot. A continuació, executo l’script Linux Exploit Suggester (el passo al servidor amb scp, ja que no te accés a Internet):
A continuació, executo LinPEAS script que em dona moltíssima informació sobre el sistema. Per suposat, tot això ho pots fer manualment també.
De tota l’informació, em crida l’atenció el següent:
- Versió Sudo 1.8.29
- Vulnerabilitat CVE-2021-3560
- Exploits per Linux 4.18.0
Primer decideixo investigar el Sudo, però sense gaire èxit. Després investigo el CVE-2021-4034, ja que és el mateix servei que el CVE-2021-3560, el Polkit.
Busco per Google i trobo un exploit públic. El passo al servidor i l’executo, però falla:
En lloc de posar-me a debugar el codi, decideixo buscar la vulnerabilitat CVE-2021-3560. Trobo també un exploit públic.
L’executo diverses vegades fins que funciona:
Finalment aconsegueixo ser administrador de la màquina i aconseguir la flag!
Conclusions
Aquesta màquina és recomanable per qualsevol que s’estigui iniciant, ja que no és complicada i és una barreja entre un CTF d’investigació i l’aplicació de conceptes bàsic de hacking.exploit