跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

Pupy分析——Windows平台下的屏幕控制


风尘剑心

推荐的帖子

0x00 前言

Pupy在Windows平台下的后期穿透模块包含了一个实用的功能:屏幕控制。该功能不仅可以查看屏幕内容,还可以发送鼠标和键盘消息。本文将对该功能的实现方法进行分析,寻找另一种方式实现类似的功能,便于二次开发。

0x01 简介

本文将介绍以下内容:

皮氏屏幕控制模块测试

Pupy的实现方法

另一种实现方法

0x02 Pupy的屏幕控制模块测试

Pupy的基本用法可以参考前面的文章《Pupy利用分析——Windows平台下的功能》。

获取会话后,进入rdesktop加载屏幕控制模块,如下图所示

2-1.png

浏览器可以通过访问url来查看和操作屏幕,如下图所示

2-2.png

这里支持输入键盘消息和鼠标点击。

用普通用户权限操作时注意UAC的问题(UAC的弹匣不能操作)。

当consent.exe驱逐UAC时,将会创建一个进程。

您需要系统权限来关闭此进程。关闭后会弹出一个对话框提示存储控制块地址无效。

如下图

2-3.png

注:

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,如下图所示

3-1.png

开始运行. py

在另一个系统上,通过浏览器访问指定的url来获取屏幕内容,如下图所示

3-2.png

注:

使用时,需要打开防火墙规则,对应的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为模板的第二种实现方法,便于二次开发。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...