人肉解密一个php webshell

来自吐司的一个加密的shell

先直接把shell放上来把

这个shell其实还是比较好解密的,看一下整体结构,有一个function和两个类,同时有两处判断了$_GET是否存在,十分明显的入口点

同时发现v8XfgjUvE这个函数出现的频率非常高,简单看了一下是一个解密混淆的函数,为了便于理解,把他的函数名全局替换为func_dec,同时写个脚本执行替换所有调用函数的位置为他的返回值

这里我没有去逆向函数的解密过程,直接在一个php里调用这个函数

先来看第一处出现$_GET的地方:

有一个无用的变量,调用了第一个类iVoOUGIpWFA的静态方法,同时出现了$_COOKIE 和熟悉的e修饰符,猜测是shell的入口点,并且是一个preg_replace的shell

发现shell中存在大量初始化后就不再调用的变量,为了美化结构,用python脚本将其去除,同时把第一个类的名字改为class_1第二个类的名字改为class_2

取出无用变量的脚本,首先读取所有的变量,把只出现一次的变量存入list,再正则匹配删除掉出现变量的那一行:

成功删除了116个无用变量

此时注意到class_1内的静态方法是正常php函数的混淆函数,对同一个函数进行了多次混淆,每次混淆后的函数只调用一次

再次用python脚本,将函数替换回php本身函数:

发现shell中还有许多数字运算,再用脚本将其处理成整数

经过上述处理后的shell已经能够理解,删除掉已经没用的func_dec和class_1再美化一下class_2中的变量名后得到:

发现这个shell的语句在:

但是只传递了两个参数给preg_replace,按理说应该是不能执行的,那这个shell还有啥用呢,有点搞不懂

同时还发现这个shell的大部分内容都是制作者设置的后门:

分别会尝试用curl,socket和file_get_contents来将经过这个shell的请求方法,参数,post内容报告到制作者的vps上的一个php文件上:176.9.39.195/forum/9a8dc03d3311b8ca.php

没什么意思,这样的shell就算可以过各种查杀,管理员一眼就看得出有问题了