disable_functions bypass - dl function

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

HackTricks를 지원하는 다른 방법:

중요 사항:

**dl**은 PHP 확장 기능을 로드하는 데 사용되는 PHP 함수입니다. 이 함수가 비활성화되지 않은 경우 disable_functions를 우회하고 임의의 명령을 실행할 수 있습니다. 그러나 몇 가지 엄격한 제한 사항이 있습니다:

  • dl 함수는 환경에 존재하고 비활성화되지 않아야 합니다.

  • PHP 확장은 서버가 사용하는 동일한 주요 버전(PHP API 버전)으로 컴파일되어야 합니다(이 정보는 phpinfo의 출력에서 확인할 수 있습니다).

  • PHP 확장은 extension_dir 지시문에 정의된 디렉토리위치해야 합니다(phpinfo의 출력에서 확인할 수 있습니다). 공격자가 서버를 악용하려고 할 때 이 디렉토리에 대한 쓰기 액세스 권한이 있는 것은 매우 어렵기 때문에 이 요구 사항은 이 기술을 악용하는 것을 방지할 것입니다.

이러한 요구 사항을 충족하는 경우, disable_functions 우회 방법을 배우기 위해 https://antichat.com/threads/70763/ 게시물을 계속 읽으세요. 여기에는 요약이 있습니다:

dl 함수는 스크립트 실행 중에 PHP 확장을 동적으로 로드하는 데 사용됩니다. 일반적으로 C/C++로 작성된 PHP 확장은 PHP의 기능을 향상시킵니다. 공격자는 dl 함수가 비활성화되지 않은 것을 알아차리면 시스템 명령을 실행하기 위해 사용자 정의 PHP 확장을 만들기로 결정합니다.

공격자가 수행한 단계:

  1. PHP 버전 식별:

  • 공격자는 스크립트 (<?php echo 'PHP Version is '.PHP_VERSION; ?>)를 사용하여 PHP 버전을 확인합니다.

  1. PHP 소스 획득:

  1. 로컬 PHP 설정:

  • 특정 PHP 버전을 시스템에 추출하고 설치합니다.

  1. 확장 생성:

  • PHP 확장 생성을 공부하고 PHP 소스 코드를 검토합니다.

  • ext/standard/exec.c에 위치한 exec 함수의 기능을 복제하는 데 초점을 맞춥니다.

사용자 정의 확장 컴파일에 대한 참고 사항:

  1. ZEND_MODULE_API_NO:

  • bypass.cZEND_MODULE_API_NO는 현재 Zend Extension Build와 일치해야 합니다. 다음 명령을 사용하여 확인할 수 있습니다:

php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{print $1}'
  1. PHP_FUNCTION 수정:

  • 최신 PHP 버전(5, 7, 8)의 경우 PHP_FUNCTION(bypass_exec)를 수정해야 할 수 있습니다. 제공된 코드 스니펫에서 이 수정 내용을 자세히 설명합니다.

사용자 정의 확장 파일:

  • bypass.c:

  • 사용자 정의 확장의 핵심 기능을 구현합니다.

  • php_bypass.h:

  • 확장 속성을 정의하는 헤더 파일입니다.

  • config.m4:

  • 사용자 정의 확장의 빌드 환경을 구성하기 위해 phpize에서 사용됩니다.

확장 빌드:

  1. 컴파일 명령:

  • phpize, ./configure, make을 사용하여 확장을 컴파일합니다.

  • 결과로 생성된 bypass.so는 modules 하위 디렉토리에 위치합니다.

  1. 정리:

  • 컴파일 후 make cleanphpize --clean을 실행합니다.

피해 호스트에 업로드 및 실행:

  1. 버전 호환성:

  • 공격자와 피해자 시스템 간에 PHP API 버전이 일치하는지 확인합니다.

  1. 확장 로딩:

  • 상대 경로를 사용하거나 프로세스를 자동화하기 위해 스크립트를 사용하여 dl 함수를 활용합니다.

  1. 스크립트 실행:

  • 공격자는 bypass.so와 PHP 스크립트를 피해자의 서버에 업로드합니다.

  • 스크립트는 dl_local 함수를 사용하여 bypass.so를 동적으로 로드한 다음 cmd 쿼리 매개변수를 통해 전달된 명령을 실행하는 bypass_exec를 호출합니다.

명령 실행:

  • 공격자는 다음을 통해 명령을 실행할 수 있습니다: http://www.example.com/script.php?cmd=<command>

이 상세한 안내서는 dl 함수를 악용하여 시스템 명령을 실행하는 PHP 확장을 생성하고 배포하는 과정을 설명하며, 이는 보안 위협을 방지하기 위해 이상적으로는 비활성화되어야 합니다.

Last updated