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

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

    TheHackerWorld官方

在Mimikatz使用SSP


风尘剑心

推荐的帖子

0x00 前言

Mimikatz中的Mimilib(ssp)和misc:memssp具有与sekurlsa:wdigest相同的功能,它们可以从lsass进程中提取凭据,并且通常可以获取登录用户的明文密码(在Windows Server 2008 R2及更高版本的系统中默认无法获取)。但是实现原理不同,所以绕过高版本限制的方法也不同。

我研究了XPN的第二篇文章,对这项技术有了新的认识,所以我试着总结一下这项技术,补充一些个人的理解。

XPN的博客:

https://blog.xpnsec.com/exploring-mimikatz-part-2/

0x01 简介

本文将介绍以下内容:

SSP简介

如何发展SSP

如何枚举和删除ssp

添加SSP的三种方式

memssp修改内存的方法

0x02 SSP简介

参考资料:

https://docs . Microsoft . com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/dn 751052(v=ws . 11)

SSP,安全支持提供程序的全名,也称为安全包

SSPI,全称安全支持提供者接口,是Windows系统用来执行身份验证操作的API。

简单理解就是SSPI是SSP的API接口。

默认情况下,SSP包括以下内容:

Kerberos安全支持提供程序

NTLM安全支持提供商

摘要式安全支持提供商

Schannel安全支持提供商

协商安全支持提供商

凭据安全支持提供程序

协商扩展安全支持提供程序

PKU2U安全支持提供程序

用户可以自行开发和添加SSP,并可以操作系统中的一些认证和授权事件。

本文只讨论如何添加SSP来从lsass进程中提取明文凭证。

0x03 如何开发SSP

SSP是一个dll,不同的函数对应不同的导出函数

mimikatz中的Mimilib不仅可以作为SSP使用,还可以包含其他功能。

从lsass进程中提取凭证的导出函数是SpLsaModeInitialize。

要提取此函数,您可以删除其他导出函数。修改后的mimilib.def内容如下:

图书馆

出口

spl samode initialize=kssp _ spl samode initialize

mimilib从lsass进程中提取明文凭证的实现代码:

https://github . com/gentili kiwi/mimikatz/blob/master/Mimi lib/kssp . c

实现代码中包含以下四个函数:

spin initialize

用于初始化SSP并提供函数指针列表。

SpShutDown

叫做卸载SSP。

SpGetInfo

提供有关SSP的信息,包括版本、名称和描述。

当枚举ssp时显示该信息(稍后将描述该方法)

SpAcceptCredentials

SSP接收并缓存LSA传送的明文凭证。

这里,mimilib实现了将明文凭证保存在文件C: \ Windows \ System32 \ kiwisp.log中。

0x04 如何枚举和删除SSP

1. 枚举SSP

测试代码:

#定义安全性_WIN32

#包括

#包括

#包括

#pragma注释(lib,' Secur32.lib ')

int main(int argc,char **argv) {

ULONG package count=0;

PSecPkgInfoA包;

if(EnumerateSecurityPackagesA(package count,packages)==SEC_E_OK) {

for(int I=0;I包数;i ) {

printf('名称:%s\n注释:%s\n\n ',包[i]。名称,包[i]。评论);

}

}

}

注:

该代码引自XPN的文章

默认结果如下

2-1.png

2. 删除SSP

测试代码:

#定义安全性_WIN32

#包括

#包括

#包括

#pragma注释(lib,' Secur32.lib ')

int main(int argc,char **argv) {

SECURITY _ STATUS SEC _ entry ret=DeleteSecurityPackageA(argv[1]);

printf('DeleteSecurityPackageA返回0x%X\n ',SEC _ entryret);

}

经过测试,任何一个SSP都无法删除,总是给出错误,提示0x80090302。

搜索后,查找具有相同结果的文章:

http://cybernigma . blogspot . com/2014/03/using-ss pap-lsass-proxy-to-remedie . html

估计微软没有开通这个功能,也就是说不重启系统就不能删除SSP。

补充:

以下代码可用于卸载进程中的dll:

https://github . com/3g student/home-of-C-Language/blob/master/freedll . CPP

0x05 添加SSP的三种方法

以mimilib.dll为例。

方法1:

(1)复制文件

将mimilib.dll复制到c:\windows\system32

64位mimilib.dll用于64位系统,32位mimilib.dll用于32位系统。

(2)修改注册表。

位置HKEY _本地_机器\系统\当前控制集\控制\ LSA

安全性薪资包的值设置为mimilib.dll。

(3)等待系统重启。

系统重启后,在c:\windows\system32中生成文件kiwissp.log,记录当前用户的明文密码。

方法2:使用API AddSecurityPackage

(1)复制文件

与方法1相同

(2)修改注册表。

与方法1相同

调用AddSecurityPackage

测试代码如下:

#定义安全性_WIN32

#包括

#包括

#包括

#pragma注释(lib,' Secur32.lib ')

int main(int argc,char **argv) {

安全_包_选项选项;

选项。Size=sizeof(可选);

选项。标志=0;

选项。TYPE=sec pkg _ OPTIONS _ TYPE _ LSA;

选项。signature size=0;

选项。签名=空;

SECURITY _ STATUS SEC _ entry ret=AddSecurityPackageA(' mimilib ',option);

printf(' AddSecurityPackage return with0x % X \ n ',SEC _ entry ret);

}

已成功添加。如果此时输入新的凭证(例如,runas,或者用户在锁定屏幕后再次登录),将生成文件kiwissp.log。

方法2的自动实现:

https://github . com/Empire project/Empire/blob/e 37 FB 2 eef 8 ff 8 F5 a 0 a 689 f 1589 f 424906 Fe 13055/data/module _ source/persistence/Install-ssp . PS1

方法3:使用RPC控制lsass加载SSP

Xp开放源代码:

https://gist.github.com/xpn/c7f6d15bf15750eae3ec349e7ec2380e

我在VS2015下使用,代码需要简单修改。

测试下图

2-2.png

添加成功。

注意:

如果xp开源代码编译为使用静态库中的MFC,需要添加以下代码:#pragma comment(lib,' Rpcrt4.lib ')

如果不再修改XPN开源代码,调用的dll需要使用绝对路径(我截图中的代码已经修改,所以支持相对路径)

返回了错误代码0x6c6,如果dll load返回false则表明dll加载成功,这是预期的。

这是一个很好的方法,具有以下优点:

不需要写注册表。

不要调用API AddSecurityPackage

没有必要写入lsass进程的内存。

lasss进程中不存在加载的dll。

0x06 memssp修改内存的方法

这是mimikatz中的一个函数。该命令如下所示:

misc:memssp

通过修改lsass进程的内存,可以从lsass进程中提取凭证。

命令执行后,如果此时输入了新的凭证(比如runas,或者用户锁屏后再次登录),就会在c:\windows\system32下生成文件mimilsa.log。

XPN以mimikatz的代码为模板,以dll的形式实现同样的功能,可以通过RPC(0x 05中的方法3)或者LoadLibrary加载。

代码地址:

https://gist.github.com/xpn/93f2b75bf086baf2c388b2ddd50fb5d0

代码适用于WIN_BUILD_10_1703x64和WIN_BUILD_10_1809x64。

其他系统需要修改相应的变量。请参考:

https://github . com/gentili kiwi/mimikatz/blob/72b 83 ABC 297 f 50758 b 0 ce 1 de 33 f 722 e 70 f 476250/mimikatz/modules/kuhl _ m _ misc . c # L483

0x07 小结

结合XPN的文章,介绍了Mimikatz中mimilib(ssp)和misc:memssp从lsass进程中提取凭证的方法,并整理了相关技巧,包括ssp和内存补丁的开发、添加和枚举。

留下回复

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

黑客攻防讨论组

黑客攻防讨论组

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

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