【技术原创】pypsrp在Exchange Powershell下的优化
2023-2-21 12:0:0 Author: www.4hou.com(查看原文) 阅读量:16 收藏

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

0x00 前言

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

0x01 简介

Exchange PowerShell Remoting

pypsrp的使用

pypsrp存在的输出问题

解决方法

0x02 Exchange PowerShell Remoting

参考资料:

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

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

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

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

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

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

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

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

WX20221201-104743@2x.png

0x03 pypsrp存在的输出问题

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

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

5.png

0x04 解决方法

1.定位问题

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

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

6.png返回结果:

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

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

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

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

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

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

18.png

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

补充:

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

19.png0x05 小结

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

如若转载,请注明原文地址

  • 分享至

取消 嘶吼

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

扫码支持

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


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