disable_functions bypass - dl function

Support HackTricks

중요한 참고 사항:

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

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

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

  • PHP 확장은 extension_dir 지시어에 의해 정의된 디렉토리위치해야 합니다(이 정보는 phpinfo의 출력에서 확인할 수 있습니다). 서버를 악용하려는 공격자가 이 디렉토리에 대한 쓰기 권한을 가질 가능성은 매우 낮으므로, 이 요구 사항은 아마도 이 기술을 악용하는 것을 방지할 것입니다.

이 요구 사항을 충족하면, disable_functions를 우회하는 방법을 배우기 위해 이 게시물을 계속 읽으십시오 https://antichat.com/threads/70763/. 다음은 요약입니다:

dl 함수는 스크립트 실행 중에 PHP 확장을 동적으로 로드하는 데 사용됩니다. PHP 확장은 일반적으로 C/C++로 작성되어 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는 모듈 하위 디렉토리에 위치합니다.

  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>

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

Support HackTricks

Last updated