>  기사  >  백엔드 개발  >  .user.ini 파일로 구성된 PHP 백도어

.user.ini 파일로 구성된 PHP 백도어

巴扎黑
巴扎黑원래의
2016-11-11 14:05:271899검색

0x00 배경
많은 학생들이 이것을 경멸하며 똥이라고 생각했을 것 같습니다.

.htaccess 파일로 구성된 PHP 백도어

그럼 만들어 보겠습니다. 새로운 것:.user.ini. .htaccess보다 더 널리 사용됩니다. nginx/apache/IIS라도 이 방법은 PHP가 fastcgi로 실행되는 한 사용할 수 있습니다. 내 모든 nginx 서버는 fpm/fastcgi를 사용하고, 모든 IIS php5.3 이상에서는 fastcgi/cgi를 사용하며, win 아래의 아파치도 fcgi를 사용하는데, 이는 제한이 있는 .htaccess와는 달리 매우 광범위하다고 할 수 있습니다.

0x01 .user.ini
그럼 .user.ini는 무엇인가요?

php.ini로 시작해야 합니다. php.ini는 많은 PHP 구성을 포함하는 PHP의 기본 구성 파일입니다. 이러한 구성은 PHP_INI_SYSTEM, PHP_INI_PERDIR, PHP_INI_ALL, PHP_INI_USER 등 여러 유형으로 나뉩니다. 여기에서 볼 수 있습니다: http://php.net/manual/zh/ini.list.php 이 모드의 차이점은 무엇입니까? 공식 설명을 살펴보세요:


여기에 이미지 설명을 입력하세요

PHP_INI_USER 모드의 구성 항목은 ini_set() 함수 또는 레지스트리에서 설정할 수 있다고 언급되어 있습니다. , .user.ini에서 설정합니다. 여기에 .user.ini가 언급되어 있는데 이것은 어떤 구성 파일입니까? 공식 문서에서는 다음과 같이 설명합니다.

기본 php.ini 외에도 PHP는 실행된 PHP 파일이 있는 디렉터리에서 시작하여 웹 루트까지 각 디렉터리의 INI 파일을 검색합니다. 디렉토리($_SERVER['DOCUMENT_ROOT']로 지정됨). 실행 중인 PHP 파일이 웹 루트 디렉터리 외부에 있는 경우 해당 디렉터리만 검사됩니다.

PHP_INI_PERDIR 및 PHP_INI_USER 모드를 사용한 INI 설정만 .user.ini 스타일 INI 파일에서 인식됩니다.

여기서 매우 명확합니다. .user.ini는 실제로 사용자가 "사용자 정의"할 수 있는 php.ini입니다. 우리가 사용자 정의할 수 있는 설정은 "PHP_INI_PERDIR, PHP_INI_USER" 모드의 설정입니다. (위 표에 언급되지 않은 PHP_INI_PERDIR은 .user.ini에서도 설정 가능합니다)

사실 PHP_INI_SYSTEM 이외의 모드(PHP_INI_ALL 포함)도 .user.ini를 통해 설정할 수 있습니다.

그리고 php.ini와 달리 .user.ini는 동적으로 로드할 수 있는 ini 파일입니다. 즉, .user.ini를 수정한 후에는 서버 미들웨어를 다시 시작할 필요가 없으며 user_ini.cache_ttl에 설정된 시간(기본값은 300초)만 기다리면 다시 로드할 수 있습니다.

그런 다음 php.ini에서 구성 항목을 보았습니다. 불행하게도 비활성화_함수 및 확장_dl을 포함하여 약간 민감한 구성 항목이 모두 PHP_INI_SYSTEM 모드(php.ini만 해당)에 있다는 사실을 발견했습니다. , 등. 그러나 .user.ini 파일을 사용하면 "백도어"를 쉽게 구성할 수 있습니다.

PHP 구성 항목에는 두 가지 흥미로운 항목이 있습니다(아래 그림의 첫 번째와 네 번째):

여기에 이미지 설명을 입력하세요.

auto_append_file, auto_prepend_file, 보려면 클릭하세요. 의미 보기:

여기에 이미지 설명 입력

파일을 지정하고 파일 앞에 require() 함수를 호출하는 것과 유사하게 실행할 파일 앞에 자동으로 포함합니다. Auto_append_file은 유사하지만 파일 뒤에 포함됩니다. 사용법은 매우 간단합니다. .user.ini에 직접 작성하면 됩니다.

auto_prepend_file=01.gif
01.gif가 포함될 파일입니다.

따라서 .user.ini를 사용하면 모든 PHP 파일에 특정 파일이 "자동으로" 포함되도록 쉽게 만들 수 있으며, 이 파일은 일반 PHP 파일이거나 문장이 포함된 웹셸일 수 있습니다.

테스트해 보세요. 저는 각각 IIS6.0+Fastcgi+PHP5.3과 nginx+fpm+php5.3에서 테스트했습니다. 디렉토리에는 .user.ini, webshell이 ​​포함된 01.gif 및 일반 PHP 파일 echo.php가 포함되어 있습니다.

여기에 이미지 설명을 입력하세요

여기에 이미지 설명을 입력하세요

echo 방문 백도어를 보려면 .php:

여기에 이미지 설명 입력

Nginx에서도 동일:

여기에 이미지 설명 입력

여기에 이미지 설명 입력

그렇다면 서툴게 생각해볼 수도 있는데, 이 자세는 어떤 상황에서 사용될 수 있을까요? 예를 들어, 특정 웹사이트에서 .php 파일 업로드를 제한하는 경우 .user.ini를 업로드한 다음 이미지 말을 업로드하고 이를 getshell에 포함할 수 있습니다. 하지만 전제는 .user.ini가 포함된 폴더에 일반 PHP 파일이 있어야 하며, 그렇지 않으면 포함될 수 없다는 것입니다. 또 다른 예로, 단지 백도어를 숨기려는 경우 이 방법이 가장 편리합니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.