| Epreuve |
|
Téléchargement |
| 1.1 Sammy |
|
- |
| Solution présentée
pendant le concours |
| 2.2 Porte 1 |
|
Download |
| Cliquez ici pour dévoiler
le code source du crackme. |
| 1.3 Porte 2 |
|
Download |
| Cliquez ici pour dévoiler
le code source du crackme. |
| |
| 2.1 Henry Payr |
|
- |
| Solution présentée
pendant le concours |
| 2.2 Comptabilite |
|
- |
| ??? |
| 2.3 Mémoire++ |
|
- |
| ??? |
| 2.4 inserta |
|
- |
|
| |
| 3.1 Contre-espionnage |
|
- |
| Solution présentée
pendant le concours |
| 3.3 Trinity est la clé |
|
Download |
En
utilisant la même technique que à l'épreuve 3.2
(accès direct à un fichier contenu dans le
répertoire include), il était aisément
possible d'accéder au compte de l'agent xt739kn. Sur ce compte
il était alors possible de récupérer trois fichiers:
vsc.py, cipher.txt et key.txt. Le premier de ces fichiers est un
scipt (python) implémentant un algorithme de chiffrement, le
deuxième est un message chiffré à l'aide de ce
script et le troisième dissimule (stéganographie) la
clé de chiffrement utilisée pour chiffrer le
précédent. C'est ce troisième fichier (key.txt) qui
nous intéresse. En prenant les caractères qu'il contient
par blocs de trois, sans chevauchement - trinity est la clé -
on note que tous les trigrammes observés apparaissent une
seule fois, à l'exception du trigramme sBl qui
apparaît 22 fois. En comptant le nombre de trigrammes (c'est
à dire, le nombre de caractères, divisé par trois)
entre les occurences de sBl on observe alors des valeurs qui
correspondent à des charactères ASCII imprimables. La
concaténation de ces caractères révéle la
clé de chiffrement: /*pr3veren9esR0x0rz*/. Le
procédé est illustré ci-dessous, pour les deux
premiers caractères de cette clé:
...
OQosBlmvtYEVNFiXjnJLfJqmWtFCQljmLpvlSQJXSxJjBDbmLSrEpBdKzQFfHivRdYXehtFy
YkRKThuyWsjhAhvaJiypXpMQkYFpXHlwGMtuqD
lisOjLRhexrxyFmmrBmJQJzmDoyXMAsMdU
PedsBlZhieeCxksdjarYRvZwbtjZwfIQQeWCIrLaTrbadgtManwfPIZXjK
nJSOyqkepixayBbVfiMCKtipnlnVbMthVynEJXaXCYmLkyilLrINKXwj
SbYsstZOCwAHFXarCXsBlhEAapfeZrxoH ...
[*]
len("mvtYEVNFiXjnJLfJqmWtFCQljmLpvlSQJXSxJjBDbmLSrEpBdKzQFfHivRdYXehtFyYkRK
ThuyWsjhAhvaJiypXpMQkYFpXHlwGMtuqDlisOjLRhexrxyFmmrBmJQJzm
DoyXMAsMdUPed") = 141
[*] (141 / 3) = 47
[*] ASCII(47) = "/"
[*]
len("ZhieeCxksdjarYRvZwbtjZwfIQQeWCIrLaTrbadgtManwfPIZXjKnJSOyqkepixayBbVfiMCK
tipnlnVbMthVynEJXaXCYmLkyi lLrINKXwjSbYsstZOCwAHFXarCX") =
126
[*] (126 / 3) = 42
[*] ASCII(42) = '*'
Cette clé peut ensuite simplement être utilisée pour
déchiffrer le fichier cipher.txt, à l'aide de vsc.py,
révélant ainsi la clé de l'épreuve:
Y3T4N0TH3RKEY1028. |
| |
| 4.1 A l'aide! |
|
Download |
En visualisant les logs Apache, il
est possible de retrouver la trace d'une exploitation d'une faille
include qui a permis à l'attaquant de tout d'abord créer
un shell php (fichier pwn3d.php).
Suite à cela, en utilisant ce shell, l'attaquant rajoute une
ligne à la fin du fichier .bashrc qui redéfinit la
commande "sudo".
La nouvelle commande ressemble fortement à l'ancienne, mais au
lieu d'effectuer un vrai sudo, le mot de passe est rajouté
dans un des fichiers du site web. Lorsque l'utilisateur
légitime se connecte ensuite et effectue la commande sudo, il
copie sans le savoir son mot de passe dans le fichier que
l'attaquant peut ensuite consulter quand bon lui semble. |
| 4.2 Webmail |
|
- |
En arrivant sur le webmail du
hacker, on se rend compte qu'il y a peu de possibilités. La
seule fonctionnalité du site, mis à part la connexion en
utilisant un mot de passe inconnu, est la récupération
d'un mot de passe perdu. Ceci est fait en répondant à la
question secrète "Quel est mon surnom?".
Pour trouver la réponse à cette question, il fallait
trouver "Alain Mowat" dans la salle et la lui poser. Suite à
cela, le mot de passe est révélé et on a accès
aux mails du hacker. |
| 4.3 Qu'est-ce? |
|
Download |
| L'un des messages trouvés dans
les emails est encrypté. Il s'agit de l'encryption de
vigénère avec une clé relativement courte qui
était récupérable via une analyse statistique. En
déchiffrant le message avec cette clé, on trouve le lieu
de rencontre des hackers. |
| 4.4 l33tforum |
|
- |
Le forum est protégé par
un "IPS" qui apparament n'est pas très bien configuré. On
remarque rapidement qu'il bloque les tentatives d'injections SQL
par le biais des paramètres GET et POST. Par contre, les
paramètres envoyés par COOKIE ne sont pas filtrés et
permettent une attaque à travers le formulaire
d'authentification qui est vulnérable à une attaque par
injection SQL en aveugle.
Grâce à cela on peut retrouver le mot de passe de l'admin
et se connecter à son compte pour découvrir les quelques
posts de la section privée où l'on découvre son
nom. |
| 4.5 C'en est trop |
|
Download |
En analysant rapidement le binaire
fourni, on se rend compte que lorsqu'il est lancé, il s'attend
à recevoir une connection sur le port 58623. Lorsque la
connexion est établie, il faut entrer un nom d'utilisateur et
mot de passe.
Le nom d'utilisateur se trouve en clair dans le fichier et est
"h4x0r". Pour ce qui est du mot de passe, il faut retrouver la
routine d'encryption du mot de passe et comprendre qu'il va
incrémenter et décrémenter successivent les
caractères entrés et ensuite comparer cela avec le mot de
passe encrypté. Si on refait la manipulation inverse, on
trouve que le mot de passe à entrer est "roxxyfoxy".
Une fois connecté à l'application, il n'y a qu'une seule
commande disponible qui prend un seul paramètre. Ce
paramètre est vulnérable à un "Buffer
Overflow".
Le port 58623 n'est pas choisi au hasard, car ce chiffre correspons
au byte code d'un "JMP ESP". Il suffit alors de remplacer EIP par
l'adresse de cette fonction et avoir son shellcode à l'adresse
suivante sur la stack. |
| |
| 5.1 Java & Co. |
|
- |
| Solution présentée
pendant le concours |
| 5.2 Javascript inside |
|
- |
| Solution présentée
pendant le concours |
| 5.3 Javanoscript |
|
- |
| En analysant le comportement de
l'applet on se rend compte qu'il envoie les données à la
page http://192.168.1.12/javaSocool/pass.php. Cependant cette page
n'existe pas, par contre la page /javanoscript/pass.php elle existe
et renvoie tout le temps false. A partir de là il faut deviner
que si cette page renvoie true, l'applet authentifiera
l'utilisateur. Pour faire cela, il faut soit modifier la
réponse du serveur, soit substituer le serveur par un autre
renvoyant tout le temps true. |
| 5.4 Wannabe hacker |
|
- |
| Mis à part le livre d'or, il
n'y a pas grand chose à attaquer sur ce site. C'est donc sur
cette fonctionnalité que l'on s'attarde. Le champ nom et
message sont correctement traités et ne permettent aucune
injection. On remarque par contre un troisième champ "ip". Il
n'est affiché que pour sa propre ip. On se doute par contre
que l'administrateur a accès à ces informations
également. De plus, il est possible de modifier la valeur
affichée en rajoutant le champ HTTP X-FORWARDED-FOR et en y
insérant un code quelconque. On sait que l'administrateur du
site visite régulièrement la page et il suffit alors
d'insérer un petit code javascript qui va envoyer son cookie
à l'attaquant. En récupérant le sessionid qui est
dans le cookie il est alors possible de se connecter à la
partie administration du site. |
| |
| 6.1 Zero Absolu |
|
- |
| La solution de cette épreuve
se trouve ici. |