Webshell是黑客经常使用的攻击手法,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的,本文针对Weevely Webshell的连接行为进行进行总结和分析,并提供简单的检测规则,适合于恶意流量分析的安全人士,如果大家有更好的检测手法,欢迎交流。

一、什么是Weevely ? 

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

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

weevely项目地址: https://github.com/epinna/weevely3.git

二、Weevely 部署和使用

①Weevly安装

# git clone https://github.com/epinna/weevely3.git

# sudo pip3 install prettytable Mako PyYAML python-dateutil PySocks –upgrade

②生成后门木马

# python3 weevely.py generate weevely backdoor.php

backdoor.php的内容如下:

可以发现backdoor.php的内容都进行了加密处理,而且每次生成的木马后面都不相同,因此通过检测payload的手法是行不通的。

③通过搭建apache2环境连接后门木马

# python3 weevely.py http://X.X.X.X/backdoor.php weevely

可以发现已经成功连接后门,并且可以进行数据读取和数据库爆破等内网攻击。

三、Weevely webshell连接特征

通过多次生产Weevely webshell后门,并复现webshell连接,实时抓取攻击特征流量。Weevely成功连接后的特征如下:

多次实验发现,webshell后门连接成功后,会产生固定的36条会话数据流。

多次实验发现,流量包中的“POST”请求Content-Length长度固定为83位;webshell后门连接成功回包的Content-Length长度为60,并且回包的http_server_body数据是一个45位的base64编码的加密数据和12位的数字串。

四、Weevely webshell检测规则

基于第三部分的特征分析,可以总结针对检测Weevely webshell的snort规则。

#weevely webshell检测

alert http any any -> any any (msg:"MALWARE BACKDOOR Weevely PHP backdoor webshell detected"; flow:established,to_server; content:"POST"; http_method; content:"Accept-Encoding|3a| identity"; http_header; content:"Content-Length: 83"; flowbits:set, Weevely_post_req; noalert; classtype:web-application-attack; sid:2000001;rev:1; metadata:created_at 2020_08_12, updated_at 2020_08_12, by sampson;)

alert http any any -> any any (msg:"MALWARE BACKDOOR Weevely PHP backdoor webshell detected"; flow:established,to_client; content:"200"; http_stat_code; content: "Content-Length: 60"; content:"|3d 3d|"; http_server_body; nocase;pcre: "/\r\n\r\n[A-Za-z\d+/]{45}([A-Za-z\d+/=]==|[A-Za-z\d+/][A-Za-z\d+/][A-Za-z\d+/=])/";flowbits: isset, Weevely_post_req; classtype:web-application-attack;sid:2000002; rev:1; metadata:created_at 2020_08_12, updated_at 2020_08_12, by sampson;)

本文作者:Sampson