内网渗透之某后渗透利用
0x01 工具介绍
工具原理
Mimikatz 的主要原理是在 Windows 系统中用户登录后系统会将身份凭证存储于lsass.exe
进程的内存当中,Mimikatz 通过注入lsass.exe
进程读取进程内存,从中获取对应的明文密码。
常见问题
在 Windows Vista 系统之后不再存储 LM HASH,而 Windows 8.1 系统之后内存中也不再存储明文密码,因此在高版本 Windows 系统中无法利用 Mimikatz 直接读取明文密码。Mimikatz 能获取明文密码的关键是 wdigest,这是一个可逆算法,相关注册表存储位置如下:
后续高版本的 Windows 系统不能读取明文是因为关闭了该注册表键,如果想要重新获取明文,只需要开启该注册表后再输入密码重新登录即可。
给小伙伴整理了相对应的学习资料,如果你需要的话,我也可以分享一部分出来(涉密部分分享不了),需要的可以
0x02 基础使用
常见用法
Mimikatz 的启动需要管理员/SYSTEM 权限运行,默认情况下拥有 32 位以及 64 位版本,在 Kali Linux 中默认存放位置为/usr/share/mimikatz
,大多数人使用 Mimikatz 一般只用到两个命令,而对其他命令不太了解,接下来会为大家全面介绍 Mimikatz 这款神器。
也可以使用一句话输出保存
基本语法
使用命令可查看全部功能模块
![](https://static001.geekbang.org/infoq/f2/f20aa63bed351e4c4efd3be07a195132.png)
调试进程修改运行权限为SYSTEM
![](https://static001.geekbang.org/infoq/c9/c9992d16280391c456cc829d981c0054.png)
开启日志记录,保存读取的用户凭证信息
![](https://static001.geekbang.org/infoq/ee/ee205e1ca81dad506ef84b31bf832a7d.png)
0x03 常用模块
Crypto 模块
加密模块主要用于导出可导出的证书,利用 CryptoAPI 函数访问证书,相当于简化版的 certutil。有时候一张合法的证书非常有用,当利用合法证书生成木马程序时可能被杀软认做白名单程序从而不进行查杀。相关参数如下:
/provider #指定提供者/providertype #指定提供类型/cngprovider #CNG 提供者/export #导出密钥 PVK 文件
查看相关密钥的提供者
![](https://static001.geekbang.org/infoq/c9/c92ca04a959530e3035d417774eea1c9.png)
查看当前系统存储信息
![](https://static001.geekbang.org/infoq/f9/f9243695d4ad523c409e95a187ac14c3.png)
常见的系统存储用户名包括:
CURRENT_USER
USER_GROUP_POLICY
LOCAL_MACHINE
LOCAL_MACHINE_GROUP
LOCAL_MACHINE_ENTERPRISE
CURRENT_SERVICE
USERS
SERVICES
指定系统存储为local_machine
进行查看
![](https://static001.geekbang.org/infoq/73/73ba56a72695892768b32ab5c6d124fc.png)
查看用户当前证书
![](https://static001.geekbang.org/infoq/89/892d3c5b7255510557efd8fc42eedbbb.png)
导出 ROOT 根证书
![](https://static001.geekbang.org/infoq/59/59706af20fe996a5fd3e18f10de138d1.png)
导出证书必须配合 store 参数。其中公钥为 DER,私钥为 PFX,密码为 mimikatz
![](https://static001.geekbang.org/infoq/12/1296543a4ad3f83c5ea6dbad8c17fe7a.png)
使用 CryptoAPI 打补丁,有时候证书无法导出可能就是补丁没有打
![](https://static001.geekbang.org/infoq/26/26275d170ece01da8804a983f08499be.png)
使用 CNG 打补丁,用于导出未标记可导出的证书
![](https://static001.geekbang.org/infoq/32/32e7c3c0d688f5f067d983193186bc6e.png)
列出智能读卡器,可能会出现报错
![](https://static001.geekbang.org/infoq/a7/a718370a02a020d23b5df9d4848ea53e.png)
查看相关密钥
![](https://static001.geekbang.org/infoq/3b/3bf21207c5458f2927553470cf7b0d8a.png)
使用 OpenSSL 生成证书
Sekurlsa 模块
Sekurlsa 模块能从lsass.exe
进程中提取 passwords、keys、pin、tickets 等用户凭据信息,是最常用到模块。查看所有身份认证信息,成功拿到用户明文密码
![](https://static001.geekbang.org/infoq/64/643fcc960ab116ca2b94be94a4a635ec.png)
查看用户哈希可能会出现报错,这主要是由于当前权限较低
![](https://static001.geekbang.org/infoq/c2/c295e16ac50ea1bfa0478b4657bf1d7c.png)
解决方法非常简单,只要以系统权限运行即可
在新窗口中再次运行可成功拿到哈希
![](https://static001.geekbang.org/infoq/e0/e01e504cb31dddbab9bd2f9a194e4705.png)
重置用户 NTLM 哈希会把哈希直接写入 SAM 数据库当中,因此执行该操作相当于重置密码,再次登录需要使用新密码进行登录
![](https://static001.geekbang.org/infoq/01/01e798b3c3ca2f47520ab7c825ac0961.png)
转储并导出lsass.exe
进程
通过哈希传递进行横向移动
凭证管理器中可查看 Windows 凭证
![](https://static001.geekbang.org/infoq/52/52109c15b3ae037236487b3c1b0d9e64.png)
Token 模块
Token 模块主要用于查看、假冒现有 token。查看当前 token 信息
![](https://static001.geekbang.org/infoq/eb/ebf0116d938a5ad756c3a58f5bee3abc.png)
查看 token 列表并假冒系统管理员
![](https://static001.geekbang.org/infoq/6c/6caee7c8885bb7938eb237abc15eebf8.png)
还原假冒进程
![](https://static001.geekbang.org/infoq/5d/5d920030ef73ade1225075af22359135.png)
其他模块
一般情况下重复登录远程桌面会导致已登录用户会直接退出或提示有其他用户登录
![](https://static001.geekbang.org/infoq/be/be4045b35ec6411282b77a2a60756d74.png)
配合命令无提示登录远程桌面,该功能在 HW 中非常好用,即使管理员处于登录状态,我们仍能悄悄登录其他用户
![](https://static001.geekbang.org/infoq/1c/1cd1e3c62bd3c5c9ec5442f5c6adf2e2.png)
成功登录原会话不受影响,使用命令查看会话列表
![](https://static001.geekbang.org/infoq/bf/bfe42f1a579c4d64bc76491b74aed74d.png)
虽然目前不会被已登录用户发现,但在事件查看器当中仍会存在登录日志
![](https://static001.geekbang.org/infoq/91/912745657ed1e93e858aee2f1857f597.png)
使用命令一键清除日志
![](https://static001.geekbang.org/infoq/c8/c8bc3fb03db223af8bba395c3f208e86.png)
成功清除日志后蓝队工程师无法通过系统日志来还原攻击过程
![](https://static001.geekbang.org/infoq/68/687fa80521fd9786b7868c4bdf8c49e3.png)
安装/卸载 Mimikatz 服务,帮助我们监听用户输入
![](https://static001.geekbang.org/infoq/2d/2d82e7e52caa7c4ce8e458aa741e3ba7.png)
成功安装 Mimikatz 服务且已自动启动
![](https://static001.geekbang.org/infoq/25/2571f29617fb609f671c9e056b303f45.png)
比如监听粘贴文本
![](https://static001.geekbang.org/infoq/78/7847e76c8ae2ffdf7db22db540bc09db.png)
0x04 免杀利用
Mimikatz 作为最常用的黑客工具早已被各大安全软件标记,比如 360 杀毒、360 安全卫士、卡巴斯基等。使用源码免杀能帮助我们绕过杀毒软件的查杀,这是一种基于特征码的免杀方式,只需定位到源码中的特征代码进行修改就可达到免杀效果,一般会定位三个位置,分别是代码、字符串和输入表。
准备环境
在免杀前需要准备以下三个要素:
Mimikatz 源码
Visual Stdio 2019(C++)
vc 依赖文件
在 Github 中下载最新版的 Mimikatz
下载地址:https://github.com/gentilkiwi/mimikatz
![](https://static001.geekbang.org/infoq/71/719703d658707d4a1b3dcf1fcec343ac.png)
更新 360 杀毒、病毒库为最新版本
![](https://static001.geekbang.org/infoq/f6/f61db015d3b3a359c48b8e7c1330a611.png)
配置问题
点击 Mimikatz 中的启动文件启动 Visual Stdio,在帮助菜单》关于〉查看许可证状态中输入激活证书可成功激活。而在 VS 2012 中如果出现报错信息(error MSB8020),解决方法为进入项目》属性〉常规》平台工作集中,将平台改为 VS 2012(v110)后即可成功运行编译。
![](https://static001.geekbang.org/infoq/29/295733ebc2ca2e497db9a64f7196665d.png)
选择生成出现报错界面,点击工具》获取工具和功能〉C++ 进行桌面开发》C++ Windows XP Support for VS 2017 v141,点击修改即可解决问题
![](https://static001.geekbang.org/infoq/5c/5c11d0a6da08e4be79d428cbfc628815.png)
下载安装完成后修改手工工具集为 2017 版本
![](https://static001.geekbang.org/infoq/8c/8ce704e7d9696495147d3ac954d0eb30.png)
在配置属性中的 C++ 中修改将警告视为错误改为否,否则每当出现错误就无法编译
![](https://static001.geekbang.org/infoq/ed/eddbf56c657141410c3ea66922c219d2.png)
重新生成又出现报错:MSB8036
![](https://static001.geekbang.org/infoq/0c/0c7e0ddacd381d1417edd0daf955bc25.png)
在项目属性页选择已安装的 SDK 版本
![](https://static001.geekbang.org/infoq/d6/d69a65057302f1e7cb6a1ef6b23dd743.png)
点击重新生成后成功编译 32 位 Mimikatz
![](https://static001.geekbang.org/infoq/0e/0e2b8f46d0b4a3b6a33a1f55c924ec06.png)
如果需要生成 64 位程序可在解决方案》配置属性选择平台为 x64
![](https://static001.geekbang.org/infoq/59/59fc0637efd97b1cdfdfde2d039e1206.png)
点击重新生成成功编译 64 位 Mimikatz
![](https://static001.geekbang.org/infoq/89/89b2cc15c42667d46655ddd614f641e7.png)
免杀过程
步入正题选择项目 mimikatz 的编辑》查找和替换》在文件中替换
![](https://static001.geekbang.org/infoq/e9/e904b9222d936221cbc7dc2638dde1d7.png)
把关键字 mimikatz 所有的字符串替换为 macsec,点击全部替换即可
![](https://static001.geekbang.org/infoq/8b/8b818bd9ea4bb25ea58d55f5083a54ff.png)
由于字符串全部被替换,导致引入 mimikatz 的文件名也被替换,因此需修改全部文件名为 macsec
![](https://static001.geekbang.org/infoq/a7/a75c1c76e737d3b89f12dbf675b72430.png)
点击重新生成后输出macsec.exe
![](https://static001.geekbang.org/infoq/c8/c8de66a11d23ba8a7c37c07de7e0c716.png)
虽然目前能够进行静态查杀,但是还是无法绕过动态查杀
![](https://static001.geekbang.org/infoq/9c/9c2305247d09703ed61245ae9b5da627.png)
![](https://static001.geekbang.org/infoq/f7/f7e0b02a1920f3a7e9e15e2abbe76962.png)
进一步删除macsec.c
和macsec.h
的注释信息
![](https://static001.geekbang.org/infoq/1e/1e943a097895bb9a00d561358ae96da7.png)
再次重新生成程序使用 360 测试仍无法绕过动态查杀
![](https://static001.geekbang.org/infoq/95/957288f61130142c97d045a10dbb2036.png)
在macsec.rc
中修改版本信息,把带有 gentilkiwi 的公司名修改为 macsec
![](https://static001.geekbang.org/infoq/aa/aac8b8078bff6911df2e1581158bb3cb.png)
修改图标macsec.ico
为 Office Word 图标后再次点击生成
![](https://static001.geekbang.org/infoq/4e/4ec8aa5aa62d5a7f83e91965c50944ba.png)
放入免杀环境再次运行即可成功绕过
![](https://static001.geekbang.org/infoq/a8/a83fe8e269ba66d45b5be0826565dc68.png)
当然命令也能够成功执行
![](https://static001.geekbang.org/infoq/25/25542f652937b97c9eba46fbac9b5972.png)
完成免杀后可上传至云平台查杀测试,但一般不要这么做,云平台会标记免杀程序
评论