5.2 KiB
LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres façons de soutenir HackTricks:
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFTs
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud dépôts GitHub.
Informations de base
Si vous avez trouvé une inclusion de fichier local même si vous n'avez pas de session et que session.auto_start
est Off
. Si session.upload_progress.enabled
est On
et que vous fournissez le PHP_SESSION_UPLOAD_PROGRESS
dans les données POST multipart, PHP activera la session pour vous.
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -d 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -F 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah' -F 'file=@/etc/passwd'
$ ls -a /var/lib/php/sessions/
. .. sess_iamorange
In the last example the session will contain the string blahblahblah
Notez qu'avec PHP_SESSION_UPLOAD_PROGRESS
vous pouvez contrôler les données à l'intérieur de la session, donc si vous incluez votre fichier de session, vous pouvez inclure une partie que vous contrôlez (par exemple, un shellcode php).
{% hint style="info" %}
Bien que la plupart des tutoriels sur Internet vous recommandent de définir session.upload_progress.cleanup
sur Off
à des fins de débogage, la valeur par défaut de session.upload_progress.cleanup
en PHP est toujours On
. Cela signifie que votre progression de téléchargement dans la session sera nettoyée dès que possible. Il s'agit donc d'une condition de course.
{% endhint %}
Le CTF
Dans le CTF original où cette technique est commentée, il ne suffisait pas d'exploiter la condition de course, mais le contenu chargé devait également commencer par la chaîne @<?php
.
En raison du paramètre par défaut de session.upload_progress.prefix
, notre fichier de SESSION commencera par un préfixe ennuyeux upload_progress_
tel que : upload_progress_controlledcontentbyattacker
Le truc pour supprimer le préfixe initial était de encoder le payload en base64 3 fois puis de le décoder via les filtres convert.base64-decode
, cela est dû au fait que lors du décodage en base64, PHP supprimera les caractères étranges, donc après 3 fois seul le payload envoyé par l'attaquant restera (et ensuite l'attaquant pourra contrôler la partie initiale).
Plus d'informations dans l'article original https://blog.orange.tw/2018/10/ et l'exploit final https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
Un autre article dans https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres façons de soutenir HackTricks :
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFTs
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud github repos.