Français [MMA 2015] [Web – Uploader] Write Up

Description

Le script d’upload retire tous les /<\?|php/. Donc, vous ne pouvez pas lancer du php.

Vous pouvez seulement uploader des fichier dont le nom est capturé par la regexp /^[a-zA-Z0-9]+\.[a-zA-Z0-9]+$/.

Resolution

L’énoncé est clair, il faut réussir à exécuter du php, malgré les regexp qui nous bloquent la route.

Habituellement on utilise <?php, <? ou <?= pour débuter un code php, la regexp supprimant « <? » et « php » on se retrouve vite coincé.

Un petit tour dans la documentation php nous donne une piste, on peut voir que la synaxe « <script language=php> » pouvant passer la regexp a été supprimée en php 7. Cela tombe bien, les headers http de l’épreuve nous apprennent que c’est PHP/5.5.9-1ubuntu4.11 qui est utilisé.

On tente d’abord d’uploader un fichier contenant un petit « <script language=php>echo time();</script> » mais non, cela ne passe pas, la regexp nous supprime le mot php dans notre code.

Oh mais, et si la regexp était sensible à la casse ? Envoyons le mot PHP en majuscules…

<script language=PHP>eval($_GET['q']);</script>

On tente alors de lire le flag, en passant à notre script l’argument « q=echo file_get_contents('/flag'); »

Ça fonctionne !

Le flag est : MMA{you can run php from script tag}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *