【技术原创】pypsrp在Exchange Powershell下的优化 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

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

3gstudent 技术 2023-02-21 12:00:00
75613
收藏

导语: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执行命令返回完整输出结果的解决方法。

如若转载,请注明原文地址
  • 分享至
取消

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

扫码支持

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

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务