disable_functions bypass - dl function
중요 사항:
**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 확장을 만들기로 결정합니다.
공격자가 수행한 단계:
PHP 버전 식별:
공격자는 스크립트 (
<?php echo 'PHP Version is '.PHP_VERSION; ?>
)를 사용하여 PHP 버전을 확인합니다.
PHP 소스 획득:
로컬 PHP 설정:
특정 PHP 버전을 시스템에 추출하고 설치합니다.
확장 생성:
사용자 정의 확장 컴파일에 대한 참고 사항:
ZEND_MODULE_API_NO:
bypass.c
의ZEND_MODULE_API_NO
는 현재 Zend Extension Build와 일치해야 합니다. 다음 명령을 사용하여 확인할 수 있습니다:
PHP_FUNCTION 수정:
최신 PHP 버전(5, 7, 8)의 경우
PHP_FUNCTION(bypass_exec)
를 수정해야 할 수 있습니다. 제공된 코드 스니펫에서 이 수정 내용을 자세히 설명합니다.
사용자 정의 확장 파일:
bypass.c:
사용자 정의 확장의 핵심 기능을 구현합니다.
php_bypass.h:
확장 속성을 정의하는 헤더 파일입니다.
config.m4:
사용자 정의 확장의 빌드 환경을 구성하기 위해
phpize
에서 사용됩니다.
확장 빌드:
컴파일 명령:
phpize
,./configure
,make
을 사용하여 확장을 컴파일합니다.결과로 생성된
bypass.so
는 modules 하위 디렉토리에 위치합니다.
정리:
컴파일 후
make clean
및phpize --clean
을 실행합니다.
피해 호스트에 업로드 및 실행:
버전 호환성:
공격자와 피해자 시스템 간에 PHP API 버전이 일치하는지 확인합니다.
확장 로딩:
상대 경로를 사용하거나 프로세스를 자동화하기 위해 스크립트를 사용하여
dl
함수를 활용합니다.
스크립트 실행:
공격자는
bypass.so
와 PHP 스크립트를 피해자의 서버에 업로드합니다.스크립트는
dl_local
함수를 사용하여bypass.so
를 동적으로 로드한 다음cmd
쿼리 매개변수를 통해 전달된 명령을 실행하는bypass_exec
를 호출합니다.
명령 실행:
공격자는 다음을 통해 명령을 실행할 수 있습니다:
http://www.example.com/script.php?cmd=<command>
이 상세한 안내서는 dl
함수를 악용하여 시스템 명령을 실행하는 PHP 확장을 생성하고 배포하는 과정을 설명하며, 이는 보안 위협을 방지하기 위해 이상적으로는 비활성화되어야 합니다.
Last updated