LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Podstawowe informacje

Jeśli znalazłeś LFI (Local File Inclusion), nawet jeśli nie masz sesji i session.auto_start jest ustawione na Off. Jeśli session.upload_progress.enabled jest On 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 za pomocą PHP_SESSION_UPLOAD_PROGRESS możesz kontrolować dane w sesji, więc jeśli dołączysz plik sesji, możesz dołączyć część, którą kontrolujesz (na przykład kod PHP shell).

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 jest ustawione na On. Oznacza to, że postęp przesyłania w sesji zostanie jak najszybciej wyczyszczony. Więc to będzie Race Condition.

CTF

W oryginalnym CTF, gdzie ta technika jest komentowana, nie wystarczyło wykorzystać Race Condition, 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ą, aby usunąć początkowy prefiks, było trzykrotne zakodowanie payloadu w base64 a następnie odkodowanie go za pomocą filtrów convert.base64-decode. Dzieje się tak, ponieważ podczas dekodowania base64 PHP usunie dziwne znaki, więc po 3-krotnym zakodowaniu tylko payload wysłany przez atakującego zostanie (a następnie atakujący może kontrolować początkową część).

Więcej informacji w oryginalnym wpisie https://blog.orange.tw/2018/10/ oraz końcowym wykorzystaniu https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py Inny wpis na https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated