【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

admin 2023年5月23日16:17:35评论31 views字数 1882阅读6分16秒阅读模式

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
0x00 前言

利用TabShell可以使用普通用户逃避沙箱并在Exchange Powershell中执行任意cmd命令,本文将要介绍利用TabShell执行cmd命令并获得返回结果的方法,分享通过Python编写脚本的细节。

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
0x01 简介

本文将要介绍以下内容:

执行cmd命令并获得返回结果的方法

Python实现

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
0x02 执行cmd命令并获得返回结果的方法

testanull公开了一个利用的POC,地址如下:https://gist.github.com/testanull/518871a2e2057caa2bc9c6ae6634103e

为了能够支持更多的命令,POC需要做简单修改,细节如下:

某些命令无法执行,例如netstat -ano或者systeminfo

解决方法:

去掉命令:$ps.WaitForExit()

执行cmd命令并获得返回结果的方法有以下两种:

1.使用Powershell连接Exchange服务器,实现TabShell

Powershell命令示例:

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

需要注意以下问题:

需要域内主机上执行

需要fqdn,不支持IP

连接url可以选择http或https

认证方式可以选择Basic或Kerberos

2.通过SSRF漏洞调用Exchange Powershell,实现TabShell

这里需要通过Flask建立本地代理服务器,方法可参考之前的文章《ProxyShell利用分析3——添加用户和文件写入》

Powershell命令示例:

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
0x03 Python实现

这里需要考虑两部分,一种是通过SSRF漏洞调用Exchange Powershell实现TabShell的Python实现,另一种是通过Powershell Session实现TabShell的Python实现,后者比前者需要额外考虑通信数据的编码和解码,具体细节如下:

1.通过SSRF漏洞调用Exchange Powershell实现TabShell的Python实现

为了分析中间的通信数据,抓取明文数据的方法可参考上一篇文章《渗透技巧——Exchange Powershell的Python实现》中的0x04,在Flask中输出中间的通信数据

关键代码示例:

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

通过分析中间的通信数据,我们可以总结出以下通信过程:

(1)creationXml

初始化,构造原始数据

(2)ReceiveData

循环多次执行,返回结果中包含"RunspaceState"作为结束符

(3)执行命令;../../../../Windows/Microsoft.NET/assembly/GAC_MSIL/Microsoft.PowerShell.Commands.Utility/v4.0_3.0.0.0__31bf3856ad364e35/Microsoft.PowerShell.Commands.Utility.dllInvoke-Expression

在返回数据中获得CommandId

(4)读取输出结果

通过CommandId读取命令执行结果

(5)执行命令$ExecutionContext.SessionState.LanguageMode='FullLanguage'

在返回数据中获得CommandId

(6)读取输出结果

通过CommandId读取命令执行结果

(7)执行命令并获得返回结果

依次执行以下命令:

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

在返回数据中获得CommandId,并通过CommandId读取命令执行结果,这些命令的格式相同,发送数据的格式如下:

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

(8)执行命令并获得最终返回结果

发送数据的格式同(7)一致,执行的命令为: $Out,在返回数据中获得CommandId,并通过CommandId读取最终的命令执行结果,提取执行结果的示例代码:

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

2.通过Powershell Session实现TabShell的Python实现

这里可以借鉴上一篇文章《渗透技巧——Exchange Powershell的Python实现》得出的经验:两者通信过程一致,只是通过Powershell Session实现TabShell的Python实现需要额外考虑通信数据的编码和解码

通信数据的编码和解码可参考上一篇文章《渗透技巧——Exchange Powershell的Python实现》中的0x03

数据的编码和解码示例代码如下:

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

完整代码的输出结果如下图

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果
0x04 小结

本文介绍了利用TabShell执行cmd命令并获得返回结果的方法,改进POC,分享通过Python编写脚本的细节。

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

原文始发于微信公众号(嘶吼专业版):【技术原创】TabShell利用分析——执行cmd命令并获得返回结果

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月23日16:17:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【技术原创】TabShell利用分析——执行cmd命令并获得返回结果https://cn-sec.com/archives/1753768.html

发表评论

匿名网友 填写信息