【技术原创】渗透技巧——Exchange Powershell的Python实现
2023-5-18 12:0:0 Author: www.4hou.com(查看原文) 阅读量:50 收藏

导语:本文将要介绍通过Python实现远程执行Exchange Powershell命令的细节,分享使用Python实现TabShell利用的心得。

0x00 前言

远程执行Exchange Powershell命令可以通过Powershell建立powershell session 实现。而在渗透测试中,我们需要尽可能避免使用Powershell,而是通过程序去实现。本文将要介绍通过Python实现远程执行Exchange Powershell命令的细节,分享使用Python实现TabShell利用的心得。

0x01 简介

本文件将介绍以下内容:

执行 Exchange Powershell 命令的实际方法

开发细节

TabShell利用细节

0x02 执行 Exchange Powershell 命令的实际方法

1.使用Powershell连接Exchange服务器,执行Exchange Powershell命令

命令示例:

1.png

需要注意以下问题:

需要域内主机上执行

需要fqdn,不支持IP

连接url可以选择http或者https

认证方式可以选择Basic或者Kerberos

2.使用Python连接Exchange服务器,执行Exchange Powershell命令

这里需要使用pypsrp

命令示例:

2.png

0x03 开发细节

这里需要了解具体的通信格式,我采用的方法是使用pypsrp,打开调试信息,查看具体发送的数据格式

1.启动调试信息

将调试信息写到文件,代码如下:

3.png

2.增加调试输出内容

修改文件pypsrp/wsman.py,在def send(self, message: bytes)中添加调试输出信息

具体代号位置:

https://github.com/jborean93/pypsrp/blob/master/src/pypsrp/wsman.py#L834,添加代码:

4.pnghttps://github.com/jborean93/pypsrp/blob/master/src/pypsrp/wsman.py#L841,添加代码:

5.png输出结果显示如下图

6.png

3.数据包数据结构

可参考之前的文章《渗透技巧——远程访问Exchange Powershell》

经过对比分析,在编写程序上还需要注意以下细节:

(1)Kerberos认证的实际情况

示例代码:

7.png

(2)通信数据格式

类型为POST

header需要包裹:'Accept-Encoding': 'identity'

(3)认证流程

需要先进行Kerberos认证,返回长度为0

再次发送数据,进行通信,返回正常内容

(4)数据编码

发送和接收的数据平均做了编码

发送过程序的代码显示示例代码:

8.png

注:

hostname必须为小写字符

接收过程序的解码示例代码:

9.png完整展示示例代码如下:

10.png11.png完整代码的输出结果如下图

12.png

0x04 TabShell利用细节

TabShell的公开POC使用Powershell连接取接Exchange服务器,执行特殊构造的Exchange Powershell命令接触,为便于分析中间的通信数据,可以采用以下方法擦拭中间:

1.通过Flask构建本地代理服务器

方法可参考之前的文章《ProxyShell利用分析3——添加用户和文件写入》

2.通过Flask实现SSRF

SSRF漏洞可选择CVE-2022-41040或CVE-2022-41080

3.在Flask中输出中间的通信数据

关键字代码示例:

13.png根据通信数据,我们可以很容易地写出TabShell的Python现代代码,完整代码的输出结果如下图

14.png

0x05 小结

本文件介绍了通过 Python 实现远程执行 Exchange Powershell 命令的细节,分享使用 Python 实现 TabShell 使用的心得。

本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址

  • 分享至

取消 嘶吼

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟


文章来源: https://www.4hou.com/posts/AO03
如有侵权请联系:admin#unsafe.sh