LFI2RCE Via temp file uploads

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

이 기술의 자세한 내용은 https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf에서 확인하세요.

PHP 파일 업로드

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

보안 경고: 임시 파일의 위치를 알고 있는 공격자는 업로드 중에 파일에 액세스하여 코드를 실행하는 Local File Inclusion 취약점을 악용할 수 있습니다.

권한이 없는 액세스의 도전은 의도적으로 무작위로 생성되는 임시 파일의 이름을 예측하는 데 있습니다.

Windows 시스템에서의 악용

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

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

  • 접두사는 일반적으로 "php"입니다.

  • <uuuu>는 고유한 16진수 값을 나타냅니다. 함수의 제한으로 인해 하위 16비트만 사용되므로, 일정한 경로와 접두사로 최대 65,535개의 고유한 이름을 사용할 수 있으며, 브루트 포스가 가능합니다.

또한, Windows 시스템에서는 악용 과정이 간소화됩니다. FindFirstFile 함수의 특이점으로 인해 Local File Inclusion (LFI) 경로에 와일드카드를 사용할 수 있습니다. 이를 통해 다음과 같은 include 경로를 만들어 임시 파일을 찾을 수 있습니다:

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

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

GNU/Linux 시스템에서의 공격

GNU/Linux 시스템의 경우, 임시 파일 이름에 대한 무작위성이 강력하게 유지되어 이름이 예측 가능하거나 무차별 대입 공격에 취약하지 않습니다. 자세한 내용은 참조 문서에서 확인할 수 있습니다.

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

Last updated