LFI2RCE Via temp file uploads

HackTricks 지원하기

이 기술의 전체 세부정보는 https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf에서 확인하세요.

PHP 파일 업로드

PHP 엔진이 RFC 1867에 따라 형식화된 파일을 포함하는 POST 요청을 수신하면, 업로드된 데이터를 저장하기 위해 임시 파일을 생성합니다. 이러한 파일은 PHP 스크립트에서 파일 업로드 처리를 위해 중요합니다. 지속적인 저장이 필요할 경우, move_uploaded_file 함수를 사용하여 이러한 임시 파일을 원하는 위치로 이동해야 합니다. 실행 후, PHP는 남아 있는 임시 파일을 자동으로 삭제합니다.

보안 경고: 공격자는 임시 파일의 위치를 알고 있으며, 업로드 중 파일에 접근하여 코드 실행을 위해 로컬 파일 포함 취약점을 악용할 수 있습니다.

무단 접근의 도전 과제는 임시 파일의 이름을 예측하는 것으로, 이는 의도적으로 무작위화됩니다.

Windows 시스템에서의 악용

Windows에서는 PHP가 GetTempFileName 함수를 사용하여 임시 파일 이름을 생성하며, <path>\<pre><uuuu>.TMP와 같은 패턴을 생성합니다. 주목할 점은:

  • 기본 경로는 일반적으로 C:\Windows\Temp입니다.

  • 접두사는 보통 "php"입니다.

  • <uuuu>는 고유한 16진수 값을 나타냅니다. 중요한 것은, 함수의 제한으로 인해 하위 16비트만 사용되므로, 상수 경로와 접두사로 최대 65,535개의 고유 이름을 허용하여 무차별 대입이 가능하다는 것입니다.

또한, Windows 시스템에서의 악용 과정은 간소화됩니다. FindFirstFile 함수의 특이성으로 인해 로컬 파일 포함(LFI) 경로에서 와일드카드를 사용할 수 있습니다. 이를 통해 임시 파일을 찾기 위해 다음과 같은 포함 경로를 작성할 수 있습니다:

http://site/vuln.php?inc=c:\windows\temp\php<<

특정 상황에서는 더 구체적인 마스크(예: php1<< 또는 phpA<<)가 필요할 수 있습니다. 이러한 마스크를 체계적으로 시도하여 업로드된 임시 파일을 발견할 수 있습니다.

GNU/Linux 시스템에서의 악용

GNU/Linux 시스템의 경우, 임시 파일 이름의 무작위성이 강력하여 이름이 예측 가능하지 않으며 무차별 대입 공격에 취약하지 않습니다. 추가 세부정보는 참조된 문서에서 확인할 수 있습니다.

Support HackTricks

Last updated