LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

Reading time: 3 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기

기본 정보

세션이 없고 session.auto_start가 꺼져 있어도 Local File Inclusion을 발견한 경우, **session.upload_progress.enabled**가 켜져 있고 multipart POST 데이터에 **PHP_SESSION_UPLOAD_PROGRESS**를 제공하면 PHP가 세션을 활성화합니다.

bash
$ 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

**PHP_SESSION_UPLOAD_PROGRESS**를 사용하면 세션 내의 데이터를 제어할 수 있으므로, 세션 파일을 포함하면 제어할 수 있는 부분(예: php 쉘코드)을 포함할 수 있습니다.

note

인터넷의 대부분의 튜토리얼에서는 디버깅 목적으로 session.upload_progress.cleanupOff로 설정할 것을 권장합니다. 그러나 PHP의 기본 session.upload_progress.cleanup은 여전히 On입니다. 이는 세션의 업로드 진행 상황이 가능한 한 빨리 정리된다는 것을 의미합니다. 따라서 이는 경쟁 조건이 될 것입니다.

CTF

이 기술이 언급된 원래 CTF에서는 경쟁 조건을 악용하기에 충분하지 않았고, 로드된 콘텐츠는 @<?php 문자열로 시작해야 했습니다.

session.upload_progress.prefix의 기본 설정으로 인해, 우리의 SESSION 파일은 성가신 접두사 upload_progress_로 시작합니다. 예: upload_progress_controlledcontentbyattacker

초기 접두사를 제거하는 요령은 페이로드를 3번 base64 인코딩한 다음 convert.base64-decode 필터를 통해 디코딩하는 것입니다. 이는 base64 디코딩 시 PHP가 이상한 문자를 제거하기 때문입니다. 따라서 3번 후에는 오직 공격자가 전송한 페이로드남게 됩니다(그 후 공격자는 초기 부분을 제어할 수 있습니다).

원래 작성물에 대한 더 많은 정보는 https://blog.orange.tw/2018/10/와 최종 익스플로잇 https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
또 다른 작성물은 https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/에서 확인할 수 있습니다.

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기