Fix css + relecture breizhctf
This commit is contained in:
parent
49781af6e8
commit
7d04a07844
2 changed files with 17 additions and 12 deletions
|
@ -95,6 +95,10 @@ if ('DECRYPT' == method) {
|
|||
|
||||
Il suffit alors d'appeler la fonction breizHash avec le message encodé pour obtenir le flag.
|
||||
|
||||
```javascript
|
||||
console.log(breizHash("3d25373c2b39044f1d390a4a1c4b484e4f11204e4a20114f48204a4c3c0a0d16480620084c131c4f124c200b4f20352c20084f0d131b02","DECRYPT"));
|
||||
```
|
||||
|
||||
## Breizh Coin Miner
|
||||
|
||||
Pour ce challenge, l'objectif est de trouver des valeurs de départs dont le hash sha512 commence par `1337`.
|
||||
|
@ -102,10 +106,10 @@ C'est le principe du proof-of-work utilisé par Bitcoin. La seule façon connue
|
|||
|
||||
Pour la complexité demandée, un simple programme en javascript suffit. Pour les valeurs aléatoires, je récupère 100 octets depuis `/dev/urandom` que j'encode en base64.
|
||||
C'est cette chaine de caractère en base64 que je vais hasher.
|
||||
En effet, le serveur validant les résultats en utilisant un protocole texte, si jamais la valeur générée contient un byte interprété comme un retour à la ligne, je ne pourrai pas soumettre mon résultat.
|
||||
En effet, pour valider les résultats, il est nécessaire de communiquer avec le serveur en utilisant un protocole texte : si jamais la valeur générée contient un byte interprété comme un retour à la ligne, mon résultat sera tronqué.
|
||||
En utilisant des chaines en base64, je suis sûr de ne pas avoir de retour à la ligne.
|
||||
|
||||
Le programme ressemble donc à ça :
|
||||
Le programme final :
|
||||
|
||||
```javascript
|
||||
const crypto = require('crypto');
|
||||
|
@ -166,10 +170,9 @@ Ce sont donc ces caractères que l'on va chercher pour connaitre la couleur du t
|
|||
|
||||
Étant donné que l'on doit répondre à un service TCP avec un protocole texte, j'ai du utiliser la bibliothèque socket de python également.
|
||||
Cependant, faisant face à un protocole texte principalement fait pour être utilisé par un humain, il est dur de savoir combien d'octets il faut lire avant d'avoir tout le message.
|
||||
Pour ma part, je me suis basé sur la présence de certains mots clés dans le buffer ou du prompt.
|
||||
Ainsi je lis jusqu'à obtenir un caractère précis, comme le prompt ou jusqu'à un message d'erreur identifié.
|
||||
Pour ma part, je me suis basé sur la présence du prompt ou de certains mots clés dans le buffer.
|
||||
|
||||
La correspondance ville-codes postal a été récupérée depuis un site internet pointé par le challenge. J'ai converti le tout en CSV ressemblant à :
|
||||
La correspondance ville-codes postal a été récupérée depuis un site internet pointé par le challenge. J'ai converti le tout en CSV :
|
||||
|
||||
```csv
|
||||
Yffiniac,22120
|
||||
|
@ -185,7 +188,7 @@ Séné,56860
|
|||
...
|
||||
```
|
||||
|
||||
Puis le code python consistait à mettre en place toutes les solution évoquées précédemment :
|
||||
Enfin le code python consistait à mettre en place toutes les solution évoquées précédemment :
|
||||
|
||||
```python
|
||||
import csv, socket, re
|
||||
|
@ -245,7 +248,7 @@ Il nous faut donc un algorithme de "path finding", on peut citer entre autre Bre
|
|||
|
||||
Pour gagner du temps, on peut récupérer l'implémentation python sur [la page dédiée](https://www.redblobgames.com/pathfinding/a-star/implementation.html#python).
|
||||
|
||||
Ensuite il nous reste à récupérer le labyrinth depuis le socket, le stocker dans un format de donnée compatible avec notre implémentation, puis récupérer le résultat et le convertir au format attendu.
|
||||
Ensuite il nous reste à récupérer le labyrinthe depuis le socket, le stocker dans un format de donnée compatible avec notre implémentation, puis récupérer le résultat et le convertir au format attendu.
|
||||
|
||||
Voilà à quoi pouvait ressembler une carte :
|
||||
|
||||
|
@ -358,7 +361,7 @@ Une fois connecté à ce challenge en telnet, on était dans une jail python.
|
|||
On nous demandait de déclencher 35 exceptions Python différentes. Bien entendu, impossible de lever ses propres exceptions.
|
||||
J'ai commencé par essayer ce qui me passait par la tête :
|
||||
|
||||
```
|
||||
```python
|
||||
throw
|
||||
throw "e"
|
||||
5/0
|
||||
|
@ -376,11 +379,13 @@ Notre point de départ était l'article [BreizhCTF 2016 – Write-Up – PyJail
|
|||
Malheureusement pas de clé `_module` dans dans la classe `warnings.catch_warnings`.
|
||||
|
||||
|
||||
La jail possède une liste noire de mots clés, dont `os`. Il existe plusieurs solutions pour contourner cette limitation quand il s'agit d'une chaine de caractère, comme une concaténation : `'o'+'s'` ou encore en utilisant les codes ASCII `'\x6F\x73'`.
|
||||
|
||||
En cherchant, [Maximilien](http://mricher.fr/) a trouvé un article nommé [Python Sandbox Escape](http://blog.orleven.com/2016/10/27/python-sandbox-excape/) (en chinois !) qui nous a permis de trouver l'inspiration.
|
||||
Nous avons finalement trouvé une variable qui contenait le module `os` qui nous a permis d'exécuter des commandes et, finalement, de lire le flag.
|
||||
|
||||
La jail possède une liste noire de mots clés, dont `os`. Il existe plusieurs solutions pour contourner cette limitation quand il s'agit d'une chaine de caractère, comme une concaténation : `'o'+'s'` ou encore en utilisant les codes ASCII `'\x6F\x73'`.
|
||||
|
||||
Finalement, la ligne suivante nous a permis de lire le flag :
|
||||
|
||||
```python
|
||||
print ()\
|
||||
.__class__ \
|
||||
|
@ -392,4 +397,4 @@ print ()\
|
|||
.__dict__['system']('cat *')
|
||||
```
|
||||
|
||||
Et voilà, c'est la fin !
|
||||
Et voilà, c'est tout !
|
||||
|
|
|
@ -291,7 +291,7 @@ hr {
|
|||
background: #eee;
|
||||
}
|
||||
|
||||
span.code, code { font-family:Menlo, Monaco, Courier; color: #ffffff; padding: 6px 3px 3px 3px; background-color:#272b2d; font-size:14px; }
|
||||
span.code, code { font-family:Menlo, Monaco, Courier; color: #ffffff; padding: 6px 0px 3px 0px; background-color:#272b2d; font-size:14px; }
|
||||
|
||||
pre {
|
||||
font-family:Menlo, Monaco, Courier;
|
||||
|
|
Loading…
Reference in a new issue