Parę dni temu, podczas dyskusji ze znajomym (hi Felix ;>) o metodach exploitacji Local File Inclusion w PHP, wpadł mi do głowy pomysł, żeby użyć w tym celu tymczasowych plików tworzonych przez engine PHP podczas uploadu plików (to nie jest tożsame z include'owaniem uploadowanych plików ofc). Przerzuciłem pomysł na papier (w postaci artykułu), po czym okazało się, że w zasadzie ta metoda jest znana w niektórych kręgach. Niemniej jednak, ponieważ nie jest to "common knowledge" (w przeciwieństwie do np. include'owania logów apache czy /proc/self/environ), zdecydowałem się i tak opublikować owy art.
PHP LFI to arbitratry code execution via rfc1867 file upload temporary files (EN)
PHP_LFI_rfc1867_temporary_files.pdf (169KB)
W skrócie:
- metoda działa ślicznie na Windowsie (http://site/?page=C:\Windows\Temp\php<<)
- trik z << w FindFirstFile ftw!
- metoda działa w bardzo specyficznych przypadkach na Linux-based OS'ach (w innych nie działa wcale)
- GetTempFileName w WinAPI jest zaskakująco słabe
- natomiast mkstemp z GNU lib C jest zaskakująco dobre
Notka o komunikacji:
2011-03-16 - team PHP dostaje "heads up", następuje wymiana kilku mejli; nie otrzymuje prośby o zmianę terminu publikacji
2011-03-18 - publikacja
Podziękowania dla:
Felix Gröbert za interesującą dyskusję, która doprowadziła do powstania tego artykułu :)
phunk za info, że ta metoda jest znana w pewnych kręgach
I tyle,
UPDATE 1 (2011-03-19, 7am)
EdiStrosar tweetnął o DoS'ie związanym z przetwarzaniem uploadowanych plików, spatchowanym w PHP 5.3.1. Interesujące :)
2011-03-18:
Comments:
Mówisz o linku z samej góry? Jeśli tak, to wersja językowa włączy się wg ustawień języka, więc Ty zobaczysz polską, ale reszta świata angielską :)
Add a comment: