Good in study, attitude and health

  • Mimikatz中sekurlsa::wdigest的实现

    0x00 前言 Mimikatz中sekurlsa::wdigest是渗透测试中经常会用到的功能,它能够从lsass进程中提取凭据,通常可获得已登录用户的明文口令(Windows Server 2008 R2及更高版本的系统默认无法获得,需要修改注册表等待用户再次登录才能获得) XPN在他的博客中记录了对WDigest的研究心得,开源了一个POC,通过C++实现了在Win10_1809 x64下从lsass进程中提取凭据 本文将会对XPN的POC进行扩展,使其支持Win7/Win8/Windows Server2008/Windows Server2008 R2/Windows Server2012/Windows Server2012 R2,记录程序实现的细节与过程 XPN的博客: https://blog.xpnsec.com/exploring-mimikatz-part-1/ POC: https://gist.github.com/xpn/12a6907a2fce97296428221b3bd3b394 0x02 简介 本文将要介绍以下内容: 实现思路 程序实现细节 0x03 实现思路 提升至Debug权限 获得lsass进程句柄 枚举lsass进程中全部模块的句柄,定位wdigest.dll和lsasrv.dll在内存中的位置 从lsasrv.dll中获得InitializationVector,AES和3DES的值,用于解密 从wdigest.dll中获得每条凭据的信息,判断加密算法,解密获得明文口令 具体说明如下: 1. 提升至Debug权限 代码可直接使用之前的代码: https://github.com/3gstudent/Homework-of-C-Language/blob/master/CheckCriticalProess.cpp#L14-L29 2. 获得lsass进程句柄 通过CreateToolhelp32Snapshot创建进程快照 遍历进程列表 搜索进程lsass.exe,获得pid 获得lsass进程句柄 3. 枚举lsass进程中全部模块的句柄,定位wdigest.dll和lsasrv.dll在内存中的位置 通过EnumProcessModules枚举lsass进程中全部模块的句柄 4. 从lsasrv.dll中获得InitializationVector,AES和3DES的值,用于解密 不同系统的偏移位置不同,详细可参考mimikatz的源码: https://github.com/gentilkiwi/mimikatz/blob/68ac65b426d1b9e1354dd0365676b1ead15022de/mimikatz/modules/sekurlsa/crypto/kuhl_m_sekurlsa_nt6.c#L8-L32 偏移不同的位置有以下四个:...

  • Use COM Object hijacking to maintain persistence——Hijack Outlook

    0x00 前言 APT组织Trula使用的一个后门利用方法,通过COM劫持实现在Outlook启动时加载dll,特点是只需要当前用户的权限即可实现。 本文将参考公开的资料对这个方法进行测试,编写一个自动化利用脚本,扩展用法,分享多个可用的劫持位置,结合利用思路给出防御建议 参考资料: https://www.welivesecurity.com/wp-content/uploads/2018/08/Eset-Turla-Outlook-Backdoor.pdf 0x01 简介 本文将要介绍以下内容: 利用方法 Powershell脚本实现细节 扩展用法 防御建议 0x02 利用方法 Outlook在启动时会加载多个COM对象,我们可以通过修改注册表的方式劫持Outlook的启动过程,用来加载DLL 这里的利用方法需要添加两个注册表,修改两个COM对象 由于是修改HKCU的注册表,所以使用当前用户权限即可 (1)COM对象1,用来加载第二个COM对象 添加如下注册表: HKCU\Software\Classes\CLSID\{84DA0A92-25E0-11D3-B9F7-00C04F4C8F5D}\TreatAs = {49CBB1C7-97D1-485A-9EC1-A26065633066} 通过命令行实现的命令如下: reg add HKCU\Software\Classes\CLSID\{84DA0A92-25E0-11D3-B9F7-00C04F4C8F5D}\TreatAs /t REG_SZ /d "{49CBB1C7-97D1-485A-9EC1-A26065633066}" /f (2)COM对象2,用来加载DLL 添加如下注册表: HKCU\Software\Classes\CLSID\{49CBB1C7-97D1-485A-9EC1-A26065633066} = Mail Plugin HKCU\Software\Classes\CLSID\{49CBB1C7-97D1-485A-9EC1-A26065633066}\InprocServer32 = [Path to the backdoor DLL] HKCU\Software\Classes\CLSID\{49CBB1C7-97D1-485A-9EC1-A26065633066}\InprocServer32\ThreadingModel = Apartment 通过命令行实现的命令如下: reg...

  • 域渗透——利用dnscmd在DNS服务器上实现远程加载Dll

    0x00 前言 由Shay Ber公开的一个利用方法,在域环境中,使用DNSAdmin权限能够在DNS服务器上实现远程加载Dll。这不算漏洞,但可以作为一个域渗透的技巧,本文将结合自己的经验整理这个利用技巧,添加自己的理解,对照利用思路给出防御建议。 参考资料: https://medium.com/@esnesenon/feature-not-bug-dnsadmin-to-dc-compromise-in-one-line-a0f779b8dc83 0x01 简介 本文将要介绍以下内容: 详细利用方法 防御思路 0x02 详细利用方法 利用条件: 已获得域内DnsAdmins,Domain Admins或者Enterprise Admins组内用户的口令或者hash 注: 默认配置下,不仅仅是DnsAdmins组内的用户,Domain Admins或者Enterprise Admins组内的用户也可以 1、查看关键组内的用户 查看所有的组: net group /domain 查看DnsAdmins组内的用户: 无法使用net group命令查看,可以使用PowerView查看 import-module .\PowerView.ps1 Get-NetGroupMember -GroupName "DNSAdmins" 查看Domain Admins组内的用户: net group "Domain Admins" /domain 查看Enterprise Admins组内的用户: net group "Enterprise Admins" /domain 2、获得关键用户的口令或者hash 需要获得DnsAdmins,Domain...

  • 渗透技巧——获得Powershell命令的历史记录

    0x00 前言 我在最近的学习过程中,发现Powershell命令的历史记录有时会包含系统敏感信息,例如远程服务器的连接口令,于是我对Powershell的历史记录功能做了进一步研究,总结一些渗透测试中常用导出历史记录的方法,结合利用思路,给出防御建议。 0x01 简介 本文将要介绍以下内容: 两种Powershell命令的历史记录 导出Powershell命令历史记录的方法 防御建议 0x02 两种Powershell命令的历史记录 记录Powershell命令的历史记录有两种方式,可分别使用Get-History和Get-PSReadlineOption读取 1、Get-History 参考文档: https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Core/Get-History?view=powershell-3.0 默认Powershell v2及以上支持 能够记录当前会话中输入的命令,多个Powershell进程之间不共享,Powershell进程退出后自动清除所有记录 1. 常用命令 获得历史记录的完整信息: Get-History | Format-List -Property * 包括: Id CommandLine ExecutionStatus StartExecutionTime EndExecutionTime 测试如下图 删除所有历史记录: Clear-History 按ID号删除命令: Clear-History -Id 3 2. 利用思路 获得了一台Windows系统的权限,发现后台有Powershell进程,想要读取Powershell进程中的历史记录 (1)Powershell进程无法接收键盘输入命令 例如Powershell加载了一个在后台运行的脚本:Powershell -ep bypass -f 1.ps1 此时无法向Powershell进程发送键盘消息,这时可以通过读取进程的命令行参数获得有用的信息,开源代码: https://github.com/3gstudent/Homework-of-C-Language/blob/master/GetProcessCommandLine.cpp...

  • SILENTTRINITY利用分析

    0x00 前言 SILENTTRINITY是由byt3bl33d3r开源的一款C2工具,通过C#实现,利用IronPython引擎来执行Python代码,十分值得研究。这款工具通过Python实现payload,不仅提高了效率,而且利用IronPython引擎从内存加载payload,更为隐蔽。 本文将要站在技术研究的角度,分析SILENTTRINITY的原理并进行扩展,最后给出防御检测的建议 地址: https://github.com/byt3bl33d3r/SILENTTRINITY 0x01 简介 本文将要介绍以下内容: SILENTTRINITY的简单使用 SILENTTRINITY的实现细节 C#利用IronPython调用Python的方法 防御检测的建议 0x02 SILENTTRINITY的简单使用 操作方法同meterpreter相似 1、安装 git clone https://github.com/byt3bl33d3r/SILENTTRINITY.git cd SILENTTRINITY python3 -m pip install -r requirements.txt python3 st.py 2、开启teamserver python3 teamserver.py <teamserver_ip> <teamserver_password> 3、连接teamserver python3 st.py wss://username:@:5000 4、开启监听 listeners use http options start 5、生成payload stagers list use msbuild...

  • 域渗透——普通用户权限获得DNS记录

    0x00 前言 在之前的文章《域渗透——DNS记录的获取》介绍了域渗透中获得DNS管理员权限后获取DNS记录的方法,而更普遍的情况是只有域普通用户的权限,也需要获得DNS记录。 本文将会参考公开的资料,整理域普通用户获得DNS记录的方法,修复dns-dump.ps1在高版本Windows系统下的bug 0x01 简介 本文将要介绍以下内容: 实现原理 开源的工具和方法 0x02 实现原理 1.SharpAdidnsdump的实现原理 先通过LDAP查询获得域内计算机的名称,再通过DNS查询获得对应的IP 详细实现细节可参考: https://github.com/b4rtik/SharpAdidnsdump 测试环境: test.com (1)通过LDAP查询获得域内计算机的名称 对应LDAP的查询参数如下: LDAP://test.com/DC=test.com,CN=microsoftdns,DC=DomainDnsZones,DC=test,DC=com (&(!(objectClass=DnsZone))(!(DC=@))(!(DC=*arpa))(!(DC=*DNSZones))) (2)通过DNS查询获得域内计算机对应的IP 使用Dns.GetHostEntry方法,参考资料: https://docs.microsoft.com/en-us/dotnet/api/system.net.dns.gethostentry?redirectedfrom=MSDN&view=netframework-3.5#System_Net_Dns_GetHostEntry_System_String_ 2.dns-dump的实现原理 先通过LDAP查询获得DNS记录,对二进制的DNS记录进行解码,获得实际内容 DNS记录解码的细节可参考: https://github.com/mmessano/PowerShell/blob/master/dns-dump.ps1#L483 0x03 开源的工具和方法 测试环境: test.com Server2012 R2 1.先通过LDAP查询获得域内计算机的名称,再通过DNS查询获得对应的IP (1)SharpAdidnsdump https://github.com/b4rtik/SharpAdidnsdump C#实现,用于查询DNS记录 用法: SharpAdidnsdump test.com 获得的结果完整,同dnscmd的结果一致 注: dnscmd的用法可以参考之前的文章《域渗透——DNS记录的获取》 (2)adidnsdump https://github.com/dirkjanm/adidnsdump https://dirkjanm.io/getting-in-the-zone-dumping-active-directory-dns-with-adidnsdump/ Python实现,用于查询DNS记录 适用于Linux,由于需要安装impacket,因此无法直接在Windows系统下使用 安装方法:...

  • 《Lateral Movement — SCM and DLL Hijacking Primer》的利用扩展

    0x00 前言 《Lateral Movement — SCM and DLL Hijacking Primer》介绍了三个dll(wlbsctrl.dll、TSMSISrv.dll和TSVIPSrv.dll)可以通过SCM(Service Control Manager)实现远程执行。本文将要扩展这三个dll的用法,分别介绍提权和后门利用的方法 文章链接: https://posts.specterops.io/lateral-movement-scm-and-dll-hijacking-primer-d2f61e8ab992 0x01 简介 本文将要介绍以下内容: 利用wlbsctrl.dll实现的提权 利用TSMSISrv.dll和TSVIPSrv.dll实现的后门 利用MF.dll实现的后门 0x03 wlbsctrl.dll的利用 1、原文中的用法 IKEEXT(IKE and AuthIP IPsec Keying Modules)服务在启动时会加载wlbsctrl.dll,但Windows系统默认配置下该dll不存在,如果我们将自己的dll放在这个位置,在服务启动时就能加载该dll POC: https://github.com/djhohnstein/wlbsctrl_poc 测试系统: Win7 x64 这里使用的dll不需要指定导出函数,所以可以直接使用之前我的测试dll: https://github.com/3gstudent/test/raw/master/calc_x64.dll 本地执行的用法: (需要管理员权限) copy calc_x64.dll C:\Windows\System32\wlbsctrl.dll sc query IKEEXT sc stop IKEEXT sc start IKEEXT 远程执行的用法: copy...

  • 对APT34泄露工具的分析——HighShell和HyperShell

    0x00 前言 最近APT34的6款工具被泄露,本文作为分析文章的第二篇,仅在技术角度对其中的HighShell和HyperShell进行分析 参考资料: https://malware-research.org/apt34-hacking-tools-leak/amp/ 0x01 简介 本文将要介绍以下内容: 对HighShell的分析 对HyperShell的分析 小结 0x02 对HighShell的分析 对应泄露文件的名称为Webshells_and_Panel中的HighShell 其中的文件为HighShell.aspx,是针对Windows服务器的webshell 默认访问页面如下图 Login框为红色,需要输入连接口令 正确的口令为Th!sN0tF0rFAN 输入正确的口令后,点击Do it,刷新页面,成功登录,如下图 Login框变为绿色 该工具的公开线索: https://unit42.paloaltonetworks.com/unit42-twoface-webshell-persistent-access-point-lateral-movement/ HighShell同paloaltonetworks在文中提到的TwoFace的页面相同 0x03 对HyperShell的分析 对应泄露文件的名称为Webshells_and_Panel中的HyperShell 下面包含7个文件夹: ExpiredPasswordTech HyperShell Image Libraries packages ShellLocal StableVersion 1.ExpiredPasswordTech 包括3个文件: error4.aspx,功能与HighShell.aspx相同,但登录口令未知 ExpiredPassword.aspx,适用于Exchange的webshell MyMaster.aspx,生成字符串:NxKK<TjWN^lv-$*UZ|Z-H;cGL(O>7a 2.HyperShell 包含多个文件,是各个webshell的源码文件 其中包含另一个可用的webshell,相对路径:.\Webshells_and_Panel\HyperShell\HyperShell\Shell\simple.aspx 连接口令:MkRg5dm8MOk 如下图 3.Image 图片文件夹 4.Libraries 包含多个依赖文件 5.packages...

  • 对APT34泄露工具的分析——PoisonFrog和Glimpse

    0x00 前言 最近APT34的6款工具被泄露,本文仅在技术角度对其中的PoisonFrog和Glimpse进行分析 参考资料: https://malware-research.org/apt34-hacking-tools-leak/amp/ 0x01 简介 本文将要介绍以下内容: 对PoisonFrog的分析 对Glimpse的分析 小结 0x02 对PoisonFrog的分析 对应泄露文件的名称为posion frog 包括两部分文件: agent,包含文件poisonfrog.ps1,是通过powershell实现的木马程序 server side,对应木马控制端,使用Node.js开发 1、agent实现的功能 1. 在%public%\Public文件夹下释放三个文件 dUpdater.ps1 hUpdater.ps1 UpdateTask.vbs 释放文件的具体功能如下: (1)dUpdater.ps1 生成一个当前系统的专有标志 读取当前系统的代理设置 通过HTTP协议从c2服务器下载文件 根据下载文件的内容进行下一步操作,包括执行命令,上传文件和下载文件 (2)hUpdater.ps1 生成一个当前计算机的专有标志 创建以下文件夹 %public%\Public<id> %public%\Public<id>\reveivebox %public%\Public<id>\sendbox %public%\Public<id>\done 通过DNS A记录从c2服务器接收控制命令 执行命令并回传结果 (3)UpdateTask.vbs 内容如下: command0 = "Powershell.exe -exec bypass -file C:\Users\Public\Public\hUpdater.ps1"...

  • 渗透测试中的Node.js——利用C++插件隐藏真实代码

    0x00 前言 在之前的文章《渗透测试中的Node.js——Downloader的实现》开源了一个使用Node.js实现Downloader的代码,简要分析在渗透测试中的利用思路。 Node.js的语法简单易懂,所以Node.js代码也很容易被分析。 为了增加Node.js代码被分析的难度,我的思路是利用Node.js的一个功能,将payload以C++插件的形式进行封装。 这样不但能够增加Node.js代码被分析的难度,而且可以用C++代码来实现payload,已有的C++代码经过简单的修改即可使用,减小二次开发的成本。 0x01 简介 本文将要介绍以下内容: C++插件简介 搭建C++插件的开发环境 C++插件代码实例 利用思路 防御建议 0x02 C++插件简介 Node.js C++插件是用C++编写的动态链接库,可以使用require()函数加载到Node.js中。利用V8提供的API,可以实现JavaScript和C++的互相调用,打通JavaScript和C++之间的接口。 官方文档: https://nodejs.org/api/addons.html 使用实例: 编译成功一个C++插件,导出方法为:hello 使用Node.js调用C++插件导出方法的代码如下: const addon = require('./addon.node'); addon.hello(); 执行代码 node.exe test.js 0x03 搭建C++插件的开发环境 1、Windows开发环境 测试系统:Win7sp1 x64 需要安装以下工具: .NET Framework 4.5.1或更高版本 Python 2.7 Visual Studio 2015或更高版本 具体搭建流程如下: 1.安装.NET Framework 4.5.1 https://www.microsoft.com/en-US/download/details.aspx?id=5842...