Good in study, attitude and health

  • GadgetToJScript利用分析

    0x00 前言 GadgetToJScrip能够将.Net程序封装在js或vbs脚本中,相比于James Forshaw开源的DotNetToJScript,修改了反序列化调用链,能够绕过AMSI,添加了绕过.Net 4.8+阻止Assembly.Load的功能 本文用来记录研究细节,分析利用思路,简要修改原工程,更便于测试Payload,分享同SILENTTRINITY结合的方法 0x01 简介 本文将要介绍以下内容: GadgetToJScript的代码分析和实现逻辑 为了便于测试Payload的修改方法 利用分析 同SILENTTRINITY结合的方法 0x02 GadgetToJScript的代码分析和实现逻辑 1.代码分析 (1)templates文件夹 保存有js、vbs和hta的模板 模板文件同DotNetToJScript基本相同,区别如下: 添加了一些对.Net版本的判断,读取注册表HKLM\\SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319\\,如果成功,版本为4.0.30319,否则为2.0.50727 做了两次反序列化,第一次是禁用ActivitySurrogateSelector类型检查,用来绕过.Net 4.8+阻止Assembly.Load的功能,第二次用来加载.Net程序 (2)Program.cs 主程序,替换模板中的变量,计算长度,生成最终的js、vbs和hta脚本 (3)TestAssemblyLoader.cs Payload以字符串的形式保存,使用CompileAssemblyFromSource对其进行动态编译,编译结果保存在内存(results.CompiledAssembly)中 关键函数:CompileAssemblyFromSource 其中,GenerateInMemory属性默认为true,表示把编译生成的程序集保留在内存中,通过CompilerResults实例的CompiledAssembly可以获取,如果设置为false,可以将编译生成的程序集保存在本地硬盘 参考资料: https://docs.microsoft.com/en-us/dotnet/api/system.codedom.compiler.codedomprovider.compileassemblyfromsource?view=netframework-4.8 (4)_ASurrogateGadgetGenerator.cs 构建一个链来映射字节数组以创建类的实例: byte[] -> Assembly.Load -> Assembly -> Assembly.GetType -> Type[] -> Activator.CreateInstance -> Win! 该段代码应该来自于:https://github.com/pwntester/ysoserial.net/blob/master/ysoserial/Generators/ActivitySurrogateSelectorGenerator.cs#L50 可以理解为TestAssemblyLoader.cs实现将编译结果保存在内存(results.CompiledAssembly)中,_ASurrogateGadgetGenerator.cs用来读取这段内存并实现对.Net程序的调用 (5)_DisableTypeCheckGadgetGenerator.cs 用来绕过.Net 4.8+阻止Assembly.Load的功能...

  • 渗透基础——从Exchange服务器上搜索和导出邮件

    0x00 前言 在渗透测试中,如果我们获得了Exchange服务器的管理权限,下一步就需要对Exchange服务器的邮件进行搜索和导出,本文将要介绍常用的两种方法,开源4个powershell脚本,分享脚本编写细节。 0x01 简介 本文将要介绍以下内容: 管理Exchange服务器上邮件的两种方法 导出邮件的两种方法 搜索邮件的两种方法 注: 本文介绍的方法均为powershell命令 0x02 管理Exchange服务器上邮件的两种方法 1.先使用PSSession连接Exchange服务器,进而远程管理邮件 使用PSSession连接Exchange服务器的命令: $User = "test\administrator" $Pass = ConvertTo-SecureString -AsPlainText DomainAdmin123! -Force $Credential = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Pass $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://Exchange01.test.com/PowerShell/ -Authentication Kerberos -Credential $Credential Import-PSSession $Session -AllowClobber 补充: 查看PSSession: Get-PSSession 断开PSSession: Remove-PSSession $Session...

  • 域渗透——使用Exchange服务器中特定的ACL实现域提权

    0x00 最近学到的一个域环境下的提权技巧,在域环境中,安装Exchange后会添加一个名为Microsoft Exchange Security Groups的OU,其中包括两个特殊的组:Exchange Trusted Subsystem和Exchange Windows Permission,如果获得了这两个组内任意用户的控制权限,就能够继承该组的WriteDACL权限,进而修改域对象的ACL,最终实现利用DCSync导出域内所有用户hash。接下来可以使用域用户krbtgt的hash制作Golden Ticket,登录域控制器,获得对整个域的控制权限。 学习资料: https://github.com/gdedrouas/Exchange-AD-Privesc 本文将会记录复现过程,介绍利用这个机制建立提权后门的方法,详细介绍使用PowerView对域对象ACL的操作方法,最后给出检测和防御建议。 0x01 简介 本文将要介绍以下内容: 提权方法复现 建立提权后门的方法 检测和防御建议 0x02 提权方法复现 测试环境: Server2012R2 x64 Exchange 2013 前置知识 1.常用缩写词 DN:Distinguished Name CN:Common Name OU:Organizational Unit DC:Domain Component ACE:Access Control Entries ACL:Access Control List LDAP连接服务器的连接字串格式为:ldap://servername/DN 其中DN有三个属性,分别是CN、OU和DC 2.安装Exchange后默认会自动添加一个名为Microsoft Exchange Security Groups的OU 如下图 其中包括两个特殊的组:Exchange...

  • SharpSniper利用分析

    0x00 前言 SharpSniper用于在域环境中找到指定域用户的IP地址,需要具有读取域控制器日志的权限,地址:https://github.com/HunnicCyber/SharpSniper 本文将要对SharpSniper的实现原理进行分析,扩展用法,分别介绍如何使用wevtutil.exe和powershell脚本实现相同的功能,分享其中需要注意的细节。 0x01 简介 本文将要介绍以下内容: SharpSniper实现原理 使用wevtutil实现 使用powershell实现 0x02 SharpSniper实现原理 通过查询域控制器上的用户登录日志(Event ID:4624),获得域用户使用过的IP地址 具体实现如下: 1.通过查询日志获得域用户使用过的IP XPath查询条件(以查询用户testb为例): "Event[System[(EventID=4624)] and EventData[Data[@Name='TargetUserName']='testb']]" 对应代码地址: https://github.com/HunnicCyber/SharpSniper/blob/master/QueryDC.cs#L16 2.通过正则表达式过滤出域用户使用过的IP 正则表达式: "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" \b表示单词的前或后边界 \d{1,3}表示字符个数在1到3位之间 .表示匹配字符”.” 对应代码地址: https://github.com/HunnicCyber/SharpSniper/blob/master/Program.cs#L54 0x03 使用wevtutil实现 1.查询指定用户(以查询用户testb为例)的登录日志 cmd命令如下: wevtutil qe security /format:text /q:"Event[System[(EventID=4624)] and EventData[Data[@Name='TargetUserName']='testb']]" 包括每条日志的详细信息,如下图 2.从详细信息中提取出ip 这里可以借助find命令进行筛选 cmd命令如下: wevtutil qe security /format:text /q:"Event[System[(EventID=4624)]...

  • GookitBankingTrojan中的后门利用分析

    0x00 前言 Gootkit Banking Trojan在2014年被首次发现,最近Daniel Bunce(@ 0verfl0w_)介绍了一些对于Gootkit Banking Trojan的分析,文章地址如下: https://www.sentinelone.com/blog/gootkit-banking-trojan-persistence-other-capabilities/ 其中,Gootkit Banking Trojan使用的后门启动方法是独有的,所以本文仅在技术研究的角度复现Gootkit Banking Trojan使用的后门启动方法,分析利用思路,给出防御和检测的建议。 0x01 简介 本文将要介绍以下内容: 原理介绍 inf文件的基础知识 复现后门启动方法 分析利用方法 检测和防御建议 0x02 原理介绍 explorer.exe在运行时会加载特定的组策略对象(GPO),其中包括Internet Explorer Administration Kit(IEAK)的GPO 如果通过添加注册表的方式为IKAK创建一个Pending GPO,指向一个inf文件,那么在explorer.exe启动时,就会加载这个Pending GPO,执行inf文件中的内容 这个方法的优点是不需要管理员权限 0x03 inf文件的基础知识 inf全称Device INFormation File,是Microsoft为硬件设备制造商发布其驱动程序推出的一种文件格式 对大小写不敏感 文件格式: 由多个节组成,节名用方括号括起来 值得注意的节: 1.Version节 inf文件都包含这个节,用来描述支持的设备类型和适用的操作系统 signature="$CHICAGO$表示该inf文件适用于Windows98之后的所有操作系统 signature="$Windows NT$"表示该inf文件适用于Windows 2000/XP/2003操作系统 2.DefaultInstall节 默认情况下首先执行该节内的内容,通常包括文件拷贝、删除,注册表键值的更新,子键删除等功能,还支持执行命令:...

  • 《MiniDumpWriteDump via COM+ Services DLL》的利用测试

    0x00 前言 最近学习了odzhan文章中介绍的一个技巧,使用C:\windows\system32\comsvcs.dll的导出函数MiniDump能够dump指定进程的内存文件。 文章地址: https://modexp.wordpress.com/2019/08/30/minidumpwritedump-via-com-services-dll/ 本文将要结合自己的经验,补充在测试过程中需要注意的地方,扩展方法,分析利用思路。编写powershell脚本,实现自动化扫描系统目录下所有dll的导出函数,查看是否存在其他可用的dll,介绍脚本实现的细节。 0x01 简介 本文将要介绍以下内容: dump指定进程内存文件的常用方法 使用comsvcs.dll实现dump指定进程内存文件的方法 编写脚本实现自动化扫描dll的导出函数 利用分析 0x02 dump指定进程内存文件的常用方法 在渗透测试中,最常用的方法是通过dump进程lsass.exe,从中获得明文口令和hash 在原理上都是使用API MiniDumpWriteDump,参考资料: https://docs.microsoft.com/en-us/windows/win32/api/minidumpapiset/nf-minidumpapiset-minidumpwritedump 常用的实现方法如下: 1.procdump 参数如下: procdump.exe -accepteula -ma lsass.exe lsass.dmp 2.c++实现 https://github.com/killswitch-GUI/minidump-lib 3.powershell实现 https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Out-Minidump.ps1 4.c#实现 https://github.com/GhostPack/SharpDump 0x03 使用comsvcs.dll实现dump指定进程内存文件的方法 odzhan在文中给出了三种方法 1.通过rundll32 示例参数如下: rundll32 C:\windows\system32\comsvcs.dll, MiniDump 808 C:\test\lsass.dmp full 示例中lsass.exe的pid为808 注: 此处需要注意权限的问题,在dump指定进程内存文件时,需要开启SeDebugPrivilege权限 管理员权限的cmd下,默认支持SeDebugPrivilege权限,但是状态为Disabled,如下图 所以说,直接在cmd下执行rundll32的命令尝试dump指定进程内存文件时,由于无法开启SeDebugPrivilege权限,所以会失败 这里给出我的一个解决方法:...

  • Webmin<=1.920-Unauthenticated_RCE(CVE-2019-15107)利用测试

    0x00 前言 2019年8月10日,Ozkan(@ehakkus)在DEFCON AppSec Village公开了一个0 day,1.930以下版本的Webmin存在远程代码执行漏洞,文章地址如下: https://pentest.com.tr/exploits/DEFCON-Webmin-1920-Unauthenticated-Remote-Command-Execution.html 我对这个漏洞进行了跟踪研究,本文将要记录测试过程,根据漏洞原理使用Python编写一个POC,并给出防御建议 0x01 简介 本文将要介绍以下内容: 漏洞简介 搭建测试环境 使用Burp Suite复现漏洞 使用Python编写POC 0x02 漏洞简介 Webmin是基于Web的Unix系统管理工具,简单理解:使用Webmin能够通过浏览器远程管理Unix系统的主机 1.930以下版本的Webmin存在远程代码执行漏洞,当Webmin的Password expiry policy设置为Prompt users with expired passwords to enter a new one时(默认设置为Always deny users with expired passwords),通过构造特殊格式的POST包,能够实现远程代码执行 0x03 搭建测试环境和漏洞复现 测试系统: Centos7 x64 IP:192.168.112.181 1.安装perl和依赖库 yum -y install perl yum -y install...

  • 利用IIS的端口共享功能绕过防火墙

    0x00 前言 我最近在思考这样一个问题: Windows服务器开启了IIS服务,防火墙仅允许80或443端口进行通信,那么如何在不使用webshell的前提下,实现对该服务器的远程管理?更进一步,如果只有低权限,有没有办法呢? 0x01 简介 本文将要介绍以下内容: HTTP.sys和端口共享 WinRM服务 HTTP Server API 针对80和443端口的利用方法 针对高权限和低权限的利用方法 检测方法 0x02 基本概念 1.HTTP.sys和端口共享 微软在Windows 2003 Server加入了内核驱动程序(Http.sys),用于侦听http流量并根据URL进行处理,允许任意用户进程共享专用于HTTP流量的TCP端口 也就是说,通过HTTP.sys,多个进程将能够侦听同一端口上的HTTP流量 可以使用Netsh命令来查询和配置HTTP.sys设置和参数,参考资料如下: https://docs.microsoft.com/en-us/windows/win32/http/netsh-commands-for-http 列出所有URL的DACL,命令如下: netsh http show urlacl 系统默认包括10个DACL,其中的两个对应WinRM服务,具体信息如下: Reserved URL : http://+:5985/wsman/ User: NT SERVICE\WinRM Listen: Yes Delegate: No User: NT SERVICE\Wecsvc Listen: Yes Delegate: No SDDL: D:(A;;GX;;;S-1-5-80-569256582-2953403351-2909559716-1301513147...

  • 对APT34泄露工具的分析——Jason

    0x00 前言 Jason是由Lab Dookhtegan在2019年6月3日泄露的另一款工具,用于Exchange账户的暴力破解 然而,泄露的这款工具虽然包括源码,但存在一些bug,无法正常使用 本文不会分析Jason和APT34之间的关联,仅在技术研究的角度,修复Jason的bug,恢复Jason的功能,分析使用的技术,同其他开源工具做横向比较 注: 之前关于APT34的分析文章: 《对APT34泄露工具的分析——PoisonFrog和Glimpse》 《对APT34泄露工具的分析——HighShell和HyperShell》 0x01 简介 本文将要介绍以下内容: Jason的开源资料 修复Jason的bug 实际测试Jason 同其他开源工具的横向比较 0x02 Jason的开源资料 Jason最早泄露于Telegram的频道:https://t.me/lab_dookhtegana p3pperp0tts将其上传至Github,地址如下: https://github.com/p3pperp0tts/APT34/tree/master/Jason 文件夹decompiled_code内为Jason的源码 Jason采用EWS Managed API来实现对Exchange资源的访问 注: 关于EWS Managed API的使用细节可参考之前的文章《Exchange Web Service(EWS)开发指南》 经过简单的修复,我在VS2015下能够编译成功 但在测试环境中,Jason无法识别正确的邮箱用户名和口令,所有测试结果均失败 0x03 修复Jason的bug 编译环境: VS2015 为了恢复正常功能,源代码需要修改以下4个位置 1.添加Microsoft.Exchange.WebServices.dll的引用 我这里是将Microsoft.Exchange.WebServices.dll放在工程的同级目录下,并做了引用 2.证书信任策略的bug修正 位置:Form1.cs 原代码: ServicePointManager.ServerCertificateValidationCallback = ((object <p0>, X509Certificate <p1>,...

  • 域渗透——AdminSDHolder

    0x00 前言 AdminSDHolder是一个特殊的AD容器,具有一些默认安全权限,用作受保护的AD账户和组的模板 Active Directory将采用AdminSDHolder对象的ACL并定期将其应用于所有受保护的AD账户和组,以防止意外和无意的修改并确保对这些对象的访问是安全的 如果能够修改AdminSDHolder对象的ACL,那么修改的权限将自动应用于所有受保护的AD账户和组,这可以作为一个域环境权限维持的方法 本将要参考公开资料,结合自己的理解,介绍利用方法,补全清除ACL的方法,分析检测方法 0x01 简介 本文将要介绍以下内容: 利用思路 如何枚举受保护的AD账户和组中的信息 如何查询AdminSDHolder对象的ACL 如何向AdminSDHolder对象添加ACL 删除AdminSDHolder中指定用户的ACL 完整利用方法 检测建议 0x02 利用思路 1.枚举受保护的AD账户和组中的信息 通常为域内高权限用户,在我的Server2008R2下包含以下组: Administrators Print Operators Backup Operators Replicator Domain Controllers Schema Admins Enterprise Admins Domain Admins Server Operators Account Operators Read-only Domain Controllers Organization Management Exchange Trusted Subsystem 2.向AdminSDHolder对象添加ACL 例如,添加用户testa对AdminSDHolder的完全管理权限,默认60分钟以后会自动推送权限配置信息,testa随即获得对所有受保护帐户和组的完全管理权限 3.获得对整个域的控制权限...