【技术原创】pypsrp在Exchange Powershell下的优化

admin 2023年2月23日01:16:48评论69 views字数 1324阅读4分24秒阅读模式

【技术原创】pypsrp在Exchange Powershell下的优化

【技术原创】pypsrp在Exchange Powershell下的优化
0x00 前言

pypsrp是用于PowerShell远程协议(PSRP)服务的Python客户端。我在研究过程中,发现在Exchange Powershell下存在一些输出的问题,本文将要介绍研究过程,给出解决方法。

【技术原创】pypsrp在Exchange Powershell下的优化
0x01 简介

Exchange PowerShell Remoting

pypsrp的使用

pypsrp存在的输出问题

解决方法

【技术原创】pypsrp在Exchange Powershell下的优化
0x02 Exchange PowerShell Remoting

参考资料:

https://docs.microsoft.com/en-us/powershell/module/exchange/?view=exchange-ps

默认设置下,需要注意以下问题:

所有域用户都可以连接Exchange PowerShell

需要在域内主机上发起连接

连接地址需要使用FQDN,不支持IP

通过Powershell连接Exchange PowerShell的命令示例:

【技术原创】pypsrp在Exchange Powershell下的优化

通过pypsrp连接Exchange PowerShell的命令示例:

【技术原创】pypsrp在Exchange Powershell下的优化

如果想要加入调试信息,可以添加以下代码:

【技术原创】pypsrp在Exchange Powershell下的优化

【技术原创】pypsrp在Exchange Powershell下的优化

0x03 pypsrp存在的输出问题

我们在Exchange PowerShell下执行命令的完整返回结果如下图

【技术原创】pypsrp在Exchange Powershell下的优化

但是通过pypsrp连接Exchange PowerShell执行命令时,输出结果不完整,无法获得命令的完整信息,如下图

【技术原创】pypsrp在Exchange Powershell下的优化

【技术原创】pypsrp在Exchange Powershell下的优化

0x04 解决方法

1.定位问题

通过查看源码,定位到代码位置:https://github.com/jborean93/pypsrp/blob/704f6cc49c8334f71b12ce10673964f037656782/src/pypsrp/messages.py#L207

我们可以在这里添加输出message_data的代码,代码示例:

【技术原创】pypsrp在Exchange Powershell下的优化

返回结果:

【技术原创】pypsrp在Exchange Powershell下的优化
【技术原创】pypsrp在Exchange Powershell下的优化
【技术原创】pypsrp在Exchange Powershell下的优化
【技术原创】pypsrp在Exchange Powershell下的优化

在调用serializer.deserialize(message_data)提取输出结果时,这里只提取到了一组数据,忽略了完整的结果

经过简单的分析,发现标签内包含完整的输出结果,所以这里可先通过字符串截取提取出标签内的数据,示例代码:

【技术原创】pypsrp在Exchange Powershell下的优化


进一步分析提取出来的数据,发现每个标签分别对应一项属性,为了提高效率,这里使用xml.dom.minidom解析成xml格式并提取元素,示例代码:

【技术原创】pypsrp在Exchange Powershell下的优化

经测试,以上代码能够输出完整的结果

按照pypsrp的代码格式,得出优化pypsrp输出结果的代码:

【技术原创】pypsrp在Exchange Powershell下的优化

使用修改过的pypsrp连接Exchange PowerShell执行命令时,能够返回完整的输出结果,如下图

【技术原创】pypsrp在Exchange Powershell下的优化

经测试,在测试ProxyShell的过程中,使用修改过的pypsrp也能得到完整的输出结果

补充:

如果使用原始版本pypsrp测试ProxyShell,可通过解析代理的返回结果实现,其中需要注意的是在作Base64解密时,由于存在不可见字符,无法使用.decode('utf-8')解码,可以换用.decode('ISO-8859-1'),还需要考虑数据被分段的问题,实现的示例代码如下:

【技术原创】pypsrp在Exchange Powershell下的优化

【技术原创】pypsrp在Exchange Powershell下的优化
0x05 小结

本文介绍了通过pypsrp连接Exchange PowerShell执行命令返回完整输出结果的解决方法。

【技术原创】pypsrp在Exchange Powershell下的优化

【技术原创】pypsrp在Exchange Powershell下的优化

原文始发于微信公众号(嘶吼专业版):【技术原创】pypsrp在Exchange Powershell下的优化

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月23日01:16:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【技术原创】pypsrp在Exchange Powershell下的优化http://cn-sec.com/archives/1563891.html

发表评论

匿名网友 填写信息