风尘剑心 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 Pupy在Windows平台下的后期穿透模块包含了一个实用的功能:屏幕控制。该功能不仅可以查看屏幕内容,还可以发送鼠标和键盘消息。本文将对该功能的实现方法进行分析,寻找另一种方式实现类似的功能,便于二次开发。 0x01 简介 本文将介绍以下内容: 皮氏屏幕控制模块测试 Pupy的实现方法 另一种实现方法 0x02 Pupy的屏幕控制模块测试 Pupy的基本用法可以参考前面的文章《Pupy利用分析——Windows平台下的功能》。 获取会话后,进入rdesktop加载屏幕控制模块,如下图所示 浏览器可以通过访问url来查看和操作屏幕,如下图所示 这里支持输入键盘消息和鼠标点击。 用普通用户权限操作时注意UAC的问题(UAC的弹匣不能操作)。 当consent.exe驱逐UAC时,将会创建一个进程。 您需要系统权限来关闭此进程。关闭后会弹出一个对话框提示存储控制块地址无效。 如下图 注: Cmd命令关闭UAC项目符号框提示: REG add HKLM \软件\微软\ Windows \当前版本\策略\系统/v consentpromptbhavioradmin/t REG _ DWORD/d 0/f Cmd命令打开UAC弹出提示: REG add HKLM \软件\微软\ Windows \当前版本\策略\系统/v consentpromptbhavioradmin/t REG _ DWORD/d 5/f 0x03 Pupy的实现方法 rdesktop模块的实现代码:3359 github . com/n1 NJ 4 sec/pupy/blob/unstable/pupy/modules/rdeesktop . py。 实施分为以下三个部分: 1.Client 与目标屏幕交互,包括以下功能: 返回目标的当前屏幕内容。 从服务器接收鼠标和键盘消息并执行它们。 实施代码: https://github . com/n1 NJ 4 sec/pupy/blob/unstable/pupy/packages/all/rdesktop . py 2.transfer 客户端和服务器之间的通信桥,包括以下功能: 客户端收到的消息被解码并转发到本地指定端口供浏览器访问。 对浏览器的鼠标和键盘消息进行编码,并发送给客户端 实施代码: https://github . com/n1 NJ 4 sec/pupy/blob/unstable/pupy/network/lib/transports/web socket . py https://github . com/n1 NJ 4 sec/pupy/blob/unstable/pupy/network/transports/ws/conf . py 3.Server 通过浏览器控制目标屏幕,包括以下功能: 在浏览器中显示客户端的屏幕内容 获取当前浏览器的鼠标和键盘信息并发送给transfer。 实施代码: https://github . com/n1 NJ 4 sec/pupy/blob/unstable/pupy/webstatic/rdesktop/index . html https://github . com/n1 NJ 4 sec/pupy/blob/unstable/pupy/webstatic/rdesktop/rdesktop . js 在实现上,Pupy通过传输处理客户端和服务器之间的数据,并用RSA AES加密,这样做的好处是增加了恢复通信数据的难度。 为了直观地读取通信数据,方便屏幕控制功能的二次开发,本文试图摆脱传递函数,实现客户端与服务器的直接通信。 0x04 另一种实现方法 介绍基于HTTP-Remote-Desktop-Server 1.HTTP-Remote-Desktop-Server的环境搭建 HTTP-Remote-Desktop-Server的Run.py使用Python2下的PyGtk库(import gtk.gdk)。 最新的PyGtk库不再支持Python2,而是Python3。 为了能够编译代码,这里需要注意以下问题: (1)需要安装32位Python2 64位系统还需要安装32位Python2,否则PyGtk库无法使用。 (2)下载Python2下的PyGtk库 地址: http://FTP . GNOME . org/pub/GNOME/binaries/win32/pygtk/2.24/pygtk-all-in-one-2 . 24 . 0 . win32-py 2.7 . MSI (3)安装其他软件包 pip install -U wxPython pip安装pyautogui 2.HTTP-Remote-Desktop-Server的测试 修改run.py中的ip,设置为当前操作系统的IP,如下图所示 开始运行. py 在另一个系统上,通过浏览器访问指定的url来获取屏幕内容,如下图所示 注: 使用时,需要打开防火墙规则,对应的cmd命令如下: netsh advfirewall防火墙添加规则名称='test '协议=TCP目录=in localport=9010操作=允许 3.HTTP-Remote-Desktop-Server的实现 (1)客户 与目标屏幕交互,包括以下功能: 捕捉当前屏幕,并将其保存为screenshot.png。 从服务器接收鼠标和键盘消息并执行它们。 实施代码: https://github . com/BernardoGO/HTTP-Remote-Desktop-Server/blob/master/run . py (2)服务器 通过浏览器控制目标屏幕,包括以下功能: 在浏览器中显示screenshot.png 获取当前浏览器的鼠标和键盘信息并发送给客户端。 实施代码: https://github . com/BernardoGO/HTTP-Remote-Desktop-Server/blob/master/index . html https://github . com/BernardoGO/HTTP-Remote-Desktop-Server/blob/master/scripts . js 在实际操作中,HTTP-Remote-Desktop-Server是通过截屏(screen capture . png)来显示和发送命令的,所以不能连续显示,需要刷新才能获得新的屏幕内容。 支持键盘输入,但需要刷新才能获得新的屏幕内容。 4.HTTP-Remote-Desktop-Server的优化 我叉了原代码,修改后的代码地址: https://github.com/3gstudent/HTTP-Remote-Desktop-Server 优化如下: (1)将jQuery在index.html的地址改为相对路径。 (2)修改run.py,通过参数传入监控器的IP和端口。 (3)将Python代码编译成独立的exe文件 对于Pyinstaller,命令如下: c:\ python 27 \ Scripts \ py installer . exe-F run . py 编译文件地址: https://github . com/3g student/HTTP-Remote-Desktop-Server/releases/download/v 1.0/run . exe 为了支持鼠标双击操作,可以修改run.py并添加以下代码: pyautogui.click(点击次数=2) 二次开发应注意以下问题: (1)通信数据是不编码的,可以选择压缩算法提高效率。 (2)访问url:port/screenshot.png获取截屏。 (3)使用时,需要开启防火墙规则。相应的cmd示例命令如下: netsh advfirewall防火墙添加规则名称='test '协议=TCP目录=in localport=9010操作=允许 0x05 小结 分析了Pupy的实现方法,介绍了以HTTP-Remote-Desktop-Server为模板的第二种实现方法,便于二次开发。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子