5 KiB
LFI2RCE poprzez PHP_SESSION_UPLOAD_PROGRESS
{% hint style="success" %}
Dowiedz się i praktykuj Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Dowiedz się i praktykuj Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Wesprzyj HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Udostępnij sztuczki hakerskie, przesyłając PR-y do HackTricks oraz HackTricks Cloud na githubie.
Podstawowe informacje
Jeśli znalazłeś Włączenie Pliku Lokalnego (LFI) nawet jeśli nie masz sesji i session.auto_start
jest wyłączone. Jeśli session.upload_progress.enabled
jest włączone i podasz PHP_SESSION_UPLOAD_PROGRESS
w danych multipart POST, PHP włączy sesję dla Ciebie.
$ 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
Zauważ, że dzięki PHP_SESSION_UPLOAD_PROGRESS
możesz kontrolować dane wewnątrz sesji, więc jeśli dołączysz swój plik sesji, możesz dołączyć część, którą kontrolujesz (na przykład kod powłoki PHP).
{% hint style="info" %}
Chociaż większość samouczków w Internecie zaleca ustawienie session.upload_progress.cleanup
na Off
w celach debugowania, domyślne session.upload_progress.cleanup
w PHP nadal wynosi On
. Oznacza to, że postęp przesyłania w sesji zostanie wyczyszczony tak szybko, jak to możliwe. Więc będzie to Warunek Wyścigu.
{% endhint %}
CTF
W oryginalnym CTF, gdzie skomentowana jest ta technika, nie wystarczyło wykorzystać Warunku Wyścigu, ale załadowana zawartość musiała również zaczynać się od ciągu @<?php
.
Ze względu na domyślne ustawienie session.upload_progress.prefix
, nasz plik SESJI zacznie się od irytującego prefiksu upload_progress_
Na przykład: upload_progress_controlledcontentbyattacker
Sztuczką do usunięcia początkowego prefiksu było trzykrotne zakodowanie payloadu w base64 a następnie odkodowanie go za pomocą filtrów convert.base64-decode
, ponieważ podczas dekodowania base64 PHP usunie dziwne znaki, więc po 3-krotnym tylko payload wysłany przez atakującego pozostanie (a następnie atakujący może kontrolować początkową część).
Więcej informacji w oryginalnym opisie https://blog.orange.tw/2018/10/ oraz ostateczny exploit https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
Inny opis w https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/
{% hint style="success" %}
Dowiedz się i ćwicz Hacking w AWS:HackTricks Training AWS Red Team Expert (ARTE)
Dowiedz się i ćwicz Hacking w GCP: HackTricks Training GCP Red Team Expert (GRTE)
Wesprzyj HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 Grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Udostępniaj sztuczki hakerskie, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.