Metasploit模块获取MobaXterm密码
Metasploit模块获取MobaXterm密码 前言
配置文件
MobaXterm.ini的配置文件;安装版会在我的文档目录下创建一个MobaXterm目录,里面存放着MobaXterm.ini,同时还会对注册表进行操作,如果用户不人为设置,默认将配置保存在注册表,注册表的位置为:HKEY_USERS\\SID\\Software\\Mobatek\\MobaXterm。
解密流程
已知明文主密码

1234567经过SHA512取数据摘要后截前32位作为AES-256-ECB的Key,对\x00" * 16进行加密后得到一个新的iv,继续使用AES-256-CFB8对密文的base64解码后的数据进行解密操作,AES-256-CFB8的Key还是上面主密码的SHA512数据摘要的前32位,iv为上面AES-256-ECB加密得到的新iv。 已知主密码Hash
BEGIN XXX然后在最后END XXX,所以我们直接搜索MasterPassword主密码关键字,找到BEGIN TryToGetSavedMasterPasswordHash,大概意思就是尝试获取保存的主密码Hash,那获取到Hash之后肯定会利用这个Hash做某些操作把配置文件里的密文解密为明文。

Sesspass和SessionP都传进了WinDecryptPassword函数,继续跟进去。CryptUnprotectData解密的函数,下面是CryptUnprotectData的定义,一般只要pDataIn一个参数就够了,但是这里还要用到pOptionalEntropy,经过调试发现pOptionalEntropy为传进来的SessionP,现在就只剩下pDataIn未知。DPAPI_IMP BOOL CryptUnprotectData(
DATA_BLOB *pDataIn,
LPWSTR *ppszDataDescr,
DATA_BLOB *pOptionalEntropy,
PVOID pvReserved,
CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
DWORD dwFlags,
DATA_BLOB *pDataOut
);

GetDataIn函数,发现只是在主密码Hash的前面加上了一段固定的20位字节码,目前发现前20位是硬编码。
CryptUnprotectData解密后的数据为,4T78mRqb9Eu7Tah827clJAGEWFzK8nBSMXDgCM8qO4X0X4bD2mR/aXgPuelxyvVDez0G1Bg1WmjJdgxwox0Fxw==。
4T78mRqb9Eu7Tah827clJAGEWFzK8nBSMXDgCM8qO4X0X4bD2mR/aXgPuelxyvVDez0G1Bg1WmjJdgxwox0Fxw==进行Base64编码后得到的前32位刚好是上面已知明文主密码Sha512后的Key,所以就能对接上解密算法了。
使用演示



参考