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 확장을 동적으로 로드하는 데 사용됩니다. PHP 확장은 일반적으로 C/C++로 작성되어 PHP의 기능을 향상시킵니다. 공격자는 dl
함수가 비활성화되지 않은 것을 발견하고 시스템 명령을 실행하기 위해 사용자 정의 PHP 확장을 만들기로 결정합니다.
공격자가 취한 단계:
PHP 버전 식별:
공격자는 스크립트(
<?php echo 'PHP Version is '.PHP_VERSION; ?>
)를 사용하여 PHP 버전을 확인합니다.
PHP 소스 획득:
로컬 PHP 설정:
특정 PHP 버전을 자신의 시스템에 추출하고 설치합니다.
확장 생성:
PHP 확장 만들기를 연구하고 PHP 소스 코드를 검사합니다.
ext/standard/exec.c
에 위치한 exec 함수의 기능을 복제하는 데 집중합니다.
사용자 정의 확장을 컴파일하기 위한 주의 사항:
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
는 모듈 하위 디렉토리에 위치합니다.
정리:
컴파일 후
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>
이 상세한 절차는 시스템 명령을 실행하기 위해 PHP 확장을 생성하고 배포하는 과정을 설명하며, dl
함수를 악용하여 이러한 보안 침해를 방지하기 위해 이상적으로 비활성화되어야 합니다.
Last updated