对 APT34 泄露工具的分析——Jason
0x00 前言
Jason 是由 Lab Dookhtegan 在 2019 年 6 月 3 日泄露的另一款工具,用于 Exchange 账户的暴力破解
然而,泄露的这款工具虽然包括源码,但存在一些 bug,无法正常使用
本文不会分析 Jason 和 APT34 之间的关联,仅在技术研究的角度,修复 Jason 的 bug,恢复 Jason 的功能,分析使用的技术,同其他开源工具做横向比较
0x01 简介
本文将要介绍以下内容:
- Jason 的开源资料
- 修复 Jason 的 bug
- 实际测试 Jason
- 同其他开源工具的横向比较
0x02 Jason 的开源资料
Jason 最早泄露于 Telegram 的频道: https://t.me/lab_dookhtegana
p3pperp0tts 将其上传至 Github,地址如下:https://github.com/p3pperp0tts/APT34/tree/master/Jason
文件夹 decompiled_code 内为 Jason 的源码
Jason 采用 EWS Managed API 来实现对 Exchange 资源的访问
经过简单的修复,我在 VS2015 下能够编译成功,但在测试环境中,Jason 无法识别正确的邮箱用户名和口令,所有测试结果均失败
0x03 修复 Jason 的 bug
编译环境: VS2015
为了恢复正常功能,源代码需要修改以下 4 个位置
1.添加 Microsoft.Exchange.WebServices.dll 的引用
我这里是将 Microsoft.Exchange.WebServices.dll 放在工程的同级目录下,并做了引用
2.证书信任策略的 bug 修正
位置:Form1.cs
原代码:
ServicePointManager.ServerCertificateValidationCallback = ((object <p0>, X509Certificate <p1>, X509Chain <p2>, SslPolicyErrors <p3>) => true);
修改后的代码:
ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { return true; };
3.变量赋值的 bug 修正
位置:Form1.cs
(1) 共有两个位置
原代码:
MainConfig.AppLocation + "out.txt";
修改后的代码:
MainConfig.AppLocation = MainConfig.AppLocation + "out.txt";
(2) 共有两个位置
原代码:
MainConfig.UsernameStart + userClass.Username + MainConfig.UsernameEnd;
修改后的代码:
userClass.Username = MainConfig.UsernameStart + userClass.Username + MainConfig.UsernameEnd;
4.EWS 和 OAB 的判断有问题
经过测试,变量 MainConfig.Method 的值始终为空
需要修正 MainConfig.Method 无法取值的 bug
位置:Form1.cs
原代码:
MainConfig.Method = this.cmbMethod.SelectedText;
修改后的代码:
MainConfig.Method = (string)this.cmbMethod.SelectedItem;
实现完整功能的工程我已上传至 github,地址如下:https://github.com/3gstudent/APT34-Jason
0x04 实际测试 Jason
编译成功后生成文件 Jason.exe
在同级目录需要文件 Microsoft.Exchange.WebServices.dll,程序才可以正常运行
程序启动后,需要设置的配置如下:
1.Exchange Address
输入 Exchange 服务器的 URL
在我的测试环境下,Exchange Address 为: https://192.168.206.17
2.Exchange Version
选择对应的版本
此处选择低版本能够适用于高版本的 Exchange 服务器
3.BF Method
三个选项:
- EWS(Exchange Web Service)
- OAB(Offline Address Book)
- Full
通常选择 EWS
4.Username File
用户名的字典文件
格式可参考 PassSample.txt 中提示的格式
我的测试环境下,我用的格式示例为:
test1@test.com admin@test.com
5.Password File
口令字典文件
6.Number of Threads
设置扫描线程个数
7.Generate Pass
点击后显示暴力破解使用的字典
8.Generate Pass Per
点击后生成文件夹 PasswordPerUser,文件夹中生成以每个用户名命名的 txt 文件,内容为口令字典
9.Add to Username Start
产生新的用户,将输入的字符加在用户名前面
测试环境下建议不设置
10.Add to Username End
产生新的用户,将输入的字符加在用户名后面
测试环境下建议不设置
我的测试环境下,配置如下图
暴力破解成功后,生成日志文件 out-year-month-day-hour-minute-second.txt,保存用户名和对应的口令
0x05 同其他开源工具的横向比较
1.Jason
- C#实现
- 对 Exchange 进行暴力破解的位置:
- 支持多线程
- 界面操作
2.MailSniper
- https://github.com/dafthack/MailSniper
- Powershell 实现
- 对 Exchange 进行暴力破解的位置:
- 支持多线程
- 命令行操作
3.Ruler
- https://github.com/sensepost/ruler
- Go 实现
- 对 Exchange 进行暴力破解的位置:
- 不支持多线程
- 命令行操作
对于 Exchange 账户的暴力破解,在原理上大同小异,都是访问 Exchange 的 Web 资源,如果返回 401 表示验证失败,如果获得预期结果代表用户口令正确
对于 Jason,同 MailSniper 和 Ruler 相比,原理和功能基本相同,个人认为该工具不存在被大规模滥用的隐患,也不会导致恶意软件技术的升级
0x06 小结
本文介绍了如何修复 Jason 的 bug,分析其中的技术,同其他开源工具做了横向比较,得出最终结论:个人认为该工具不存在被大规模滥用的隐患,也不会导致恶意软件技术的升级。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: 域渗透——AdminSDHolder
下一篇: Jvm 常量池
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论