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。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,所以就能对接上解密算法了。https://github.com/rapid7/metasploit-framework/pull/17009