GoSecure/pyrdp
GitHub: GoSecure/pyrdp
基于 Python 的 RDP 中间人攻击框架,集凭据窃取、会话录制、实时监控与取证分析于一体。
Stars: 1768 | Forks: 272
# PyRDP
[](https://github.com/GoSecure/pyrdp/actions/workflows/ci.yml)
[](https://www.blackhat.com/us-19/arsenal/schedule/index.html)
[](https://www.blackhat.com/us-21/arsenal/schedule/index.html)
[](https://www.blackhat.com/us-22/arsenal/schedule/index.html#pyrdp-remote-desktop-protocol-mitm-for-purple-teamers-28021)
PyRDP 是一个用 Python 编写的远程桌面协议 (RDP) 中间人 (MITM) 工具和库。

它具有以下一些工具:
- RDP 中间人
- 记录连接时使用的明文凭据或 NetNTLM 哈希
- 窃取复制到剪贴板的数据
- 保存通过网络传输的文件副本
- 在后台抓取共享驱动器并将其保存在本地
- 保存连接的重播记录,以便您以后查看
- 在新连接建立时自动运行控制台命令或 PowerShell payloads
- RDP 播放器:
- 查看来自 MITM 的实时 RDP 连接
- 查看 RDP 连接的重播
- 在隐藏您操作的同时接管活跃的 RDP 会话
- 列出客户端映射的驱动器并在活动会话期间从中下载文件
- 转换工具:
- 将 RDP 重播转换为视频以便于分享
- 将 RDP 重播转换为以 JSON 格式序列化的低级别事件序列
- 将 PCAP 转换为重播、视频或 JSON 事件
- 将解密的 PCAP (L7 PDUs) 转换为重播、视频或 JSON 事件
- RDP 证书克隆器:
- 创建一个自签名的 X509 证书,其字段与 RDP 服务器证书的字段相同
PyRDP 于 [2018 年被介绍](https://www.gosecure.net/blog/2018/12/19/rdp-man-in-the-middle-smile-youre-on-camera),在文中我们[演示了如何捕捉真实威胁行为者的操作](https://www.youtube.com/watch?v=eB7RC9FmL6Q)。该工具的开发同时考虑了渗透测试和恶意软件研究的用例。

## 目录
* [支持的系统](#supported-systems)
* [安装](#installing)
* [使用 pipx](#using-pipx)
* [使用 Docker 镜像](#using-the-docker-image)
* [使用 PyRDP](#using-pyrdp)
* [使用 PyRDP 中间人](#using-the-pyrdp-monster-in-the-middle)
* [使用 PyRDP 播放器](#using-the-pyrdp-player)
* [使用 PyRDP 证书克隆器](#using-the-pyrdp-certificate-cloner)
* [使用 PyRDP 转换](#using-pyrdp-convert)
* [配置 PyRDP](#configuring-pyrdp)
* [高级用法](#advanced-usage)
* [Docker 特定使用说明](#docker-specific-usage-instructions)
* [PyRDP 轶事](#pyrdp-lore)
* [为 PyRDP 贡献](#contributing-to-pyrdp)
* [致谢](#acknowledgements)
## 支持的系统
PyRDP 应支持在 x86-64、ARM 和 ARM64 平台上的 Python 3.7 及更高版本。
该工具已在 Linux (Ubuntu 20.04, 22.04)、Raspberry Pi 和 Windows 上的 Python 3.7 环境中测试通过。尚未在 macOS 上进行过测试。
## 安装
推荐通过 `pipx` 或使用 docker 容器这两种安装方式。
从源代码安装或自行构建 docker 容器的方法在[开发文档](docs/devel.adoc)中有所介绍。
### 使用 pipx
#### 依赖项
##### Linux
首先,请确保安装了前置软件包(以下针对 Ubuntu 22.04 列出,您可能需要针对其他发行版进行调整)。我们提供了两种类型的安装:完整安装和精简安装。请根据您的用例安装相应的依赖项。
```
# 完整安装(GUI,将 captures 转换为 video)
sudo apt install python3 python3-pip python3-venv \
build-essential python3-dev openssl \
libegl1 libxcb-cursor0 libxkbcommon-x11-0 libxcb-icccm4 libxcb-keysyms1 \
libnotify-bin \
libavcodec58 libavdevice58
# 精简安装(无 GUI,无法转换为 video)
sudo apt install python3 python3-pip python3-venv \
build-essential python3-dev git openssl
```
这应该会安装运行 PyRDP 所需的依赖项。如果您选择在没有 GUI 或视频转换依赖项的情况下进行安装,将无法在不使用无头模式 (`--headless`) 的情况下使用 `pyrdp-player`,或者无法使用 `pyrdp-convert` 生成视频输出。
确保您已安装 `pipx`。在 Ubuntu 22.04 上:
```
python3 -m pip install --user pipx
python3 -m pipx ensurepath
```
##### Windows
确保您已安装 Python。
Windows Store 版本的 Python 在 Windows 11 上对我不起作用。
我们推荐通过 [Scoop](https://scoop.sh/) 安装 Python。
```
scoop install python # if not installed already
scoop install pipx
pipx ensurepath
```
注销并重新登录(以更新您的 PATH)。
##### 其他操作系统
要在其他操作系统上安装 `pipx`,请参见此处:
#### 安装
要获得带有 QT GUI 并能将捕获内容转换为视频的完整 PyRDP 体验:
```
pipx install pyrdp-mitm[full]
```
适用于在无头环境(服务器、RaspberryPi)中运行的精简版本:
```
pipx install pyrdp-mitm
```
您已准备就绪!请参阅[使用说明](#using-pyrdp)。
### 使用 Docker 镜像
如果您已经安装并运行了 docker,这是最简单的安装方法。
```
docker pull gosecure/pyrdp:latest
```
作为替代,我们提供了一个不带 GUI 和 ffmpeg 依赖的更精简镜像。
这是 ARM 平台上唯一提供的镜像。
```
docker pull gosecure/pyrdp:latest-slim
```
您可以在 [gosecure/pyrdp DockerHub 页面](https://hub.docker.com/r/gosecure/pyrdp/tags) 上找到我们所有的 Docker 镜像列表。
`latest` 标签指的是最新发布的版本,而 `devel` 标签是根据我们的 `main` 分支构建的 docker 镜像。
## 使用 PyRDP
### 使用 PyRDP 中间人
使用 `pyrdp-mitm ` 或 `pyrdp-mitm :` 来运行 MITM。
假设您有一个运行在 `192.168.1.10` 上并监听 3389 端口的 RDP 服务器,您可以运行:
```
pyrdp-mitm 192.168.1.10
```
首次运行 MITM 时,会在相对于当前工作目录的位置创建一个名为 `pyrdp_output/` 的目录。
以下是该目录的布局示例:
```
pyrdp_output/
├── certs
│ ├── WinDev2108Eval.crt
│ └── WinDev2108Eval.pem
├── files
│ ├── e91c6a5eb3ca15df5a5cb4cf4ebb6f33b2d379a3a12d7d6de8c412d4323feb4c
│ ├── b14b26b7d02c85e74ab4f0d847553b2fdfaf8bc616f7c3efcc4771aeddd55700
├── filesystems
│ ├── romantic_kalam_8214773
│ │ └── device1
│ │ └── clipboard
| └── priv-esc.exe -> ../../../files/b14b26b7d02c85e74ab4f0d847553b2fdfaf8bc616f7c3efcc4771aeddd55700
│ └── happy_stonebraker_1992243
│ ├── device1
│ └── device2
| └── Users/User/3D Objects/desktop.ini -> ../../../../../../e91c6a5eb3ca15df5a5cb4cf4ebb6f33b2d379a3a12d7d6de8c412d4323feb4c
├── logs
│ ├── crawl.json
│ ├── crawl.log
│ ├── mitm.json
│ ├── mitm.log
│ ├── mitm.log.2021-08-26
│ ├── ntlmssp.log
│ ├── player.log
│ └── ssl.log
└── replays
├── rdp_replay_20231214_01-20-28_965_happy_stonebraker_1992243.pyrdp
└── rdp_replay_20231214_00-42-24_295_romantic_kalam_8214773.pyrdp
```
* `certs/` 包含生成的证书,并使用证书的 `CN` 作为文件名进行存储
* `files/` 包含所有捕获的文件,通过使用内容的 SHA-256 哈希作为文件名保存来进行去重
* `filesystems/` 包含按会话 ID 分类重建的目标文件系统。
为了节省相似会话的空间,文件是指向 `files/` 下实际文件的符号链接。
* `logs/` 包含所有各种日志,大多数同时采用 JSON 和纯文本格式:
* `crawl`:文件抓取器日志
* `mitm`:主要 MITM 日志
* `ntlmssp.log`:捕获的 NetNTLM 哈希
* `player.log`:播放器日志
* `ssl.log`:以与 Wireshark 兼容的格式存储的 TLS 主密钥
* `replays/` 包含所有以前录制的 PyRDP 会话,文件名中带有时间戳和会话 ID
#### 指定私钥和证书
如果密钥生成失败或者您想使用自定义的密钥和证书,您可以使用 `-c` 和 `-k` 参数来指定它们:
```
pyrdp-mitm 192.168.1.10 -k private_key.pem -c certificate.pem
```
##### 中间人网络级别身份验证 (NLA) 连接
网络级别身份验证 (NLA) 是自 Windows Vista 以来可用的一项安全功能,可增强 RDP 连接的安全性。
NLA 依赖于新的安全支持提供程序 CredSSP,有时也用此名称来指代。
强制使用 NLA 的服务器更难被攻击。
可以使用三种不同的策略:
* 获取服务器的证书和私钥
* 使用主机重定向功能
* 捕获客户端的 NetNTLMv2 哈希并破解它
###### 中间人 NLA
如果我们拥有服务器的证书和私钥的访问权限,即使强制使用了 NLA,我们也能成功地对 RDP 进行 MITM。
我们在我们的 [1.0 版本发布博客文章中记录了此攻击](https://www.gosecure.net/blog/2020/10/20/announcing-pyrdp-1-0/)。
有关[提取 RDP 证书和私钥](https://github.com/GoSecure/pyrdp/blob/main/docs/cert-extraction.md)的说明可在我们的 GitHub 上找到。
在可以访问证书和私钥的情况下,您只需在 `pyrdp-mitm` 命令行中添加此参数将身份验证设置为 `ssp`:
```
--auth ssp -c -k
```
这将启用拦截强制 NLA 连接的可能性。
###### 当服务器强制使用 NLA 时的替代主机重定向

当 PyRDP 连接到目标 RDP 服务器 (1) 时,如果该服务器强制使用 NLA,那么 PyRDP (2) 将把连接替换为转到您选择的另一台主机 (3)。
例如,这可用于重定向到已知不强制使用 NLA 的服务器,甚至可以重定向到受攻击者控制的虚拟机。
要启用此功能,请按如下方式指定备用主机的地址和端口:
```
--nla-redirection-host 192.168.1.12 --nla-redirection-port 3389
```
此功能在 PyRDP 1.1.0 中引入。
###### 捕获 NetNTLMv2 哈希
NetNTLMv2 哈希对攻击者很有用,因为它们相对容易被破解,从而允许攻击者利用合法的 RDP 访问权限或尝试撞库。
从 1.1.0 版本开始,PyRDP 能够通过 NLA (CredSSP) 连接捕获客户端的 NetNTLMv2 哈希,其方式是进行协商并捕获 NTLMSSP 身份验证消息。
在 1.2.0 版本中,该支持被扩展为即使我们没有服务器的证书和私钥也能工作,这意味着连接将不会被成功进行 MITM。
这与 [Responder](https://github.com/lgandx/Responder) 处理 RDP 的方式类似。
捕获到的 NetNTLMv2 哈希可以在 `ntlmssp.log` 日志文件中找到,并且其格式已调整为可供 [John The Ripper](https://www.openwall.com/john/) 或 [hashcat](https://hashcat.net/hashcat/) 等破解工具直接读取。
此技术已在博客文章:[捕获 RDP NetNTLMv2 哈希:攻击细节和技术操作指南](https://www.gosecure.net/blog/2022/01/17/capturing-rdp-netntlmv2-hashes-attack-details-and-a-technical-how-to-guide/) 中进行了详细描述。
此功能与 `--auth ssp` 兼容,但与 `--nla-redirection-host` 不兼容。
#### 连接到 PyRDP 播放器
如果您想通过 PyRDP 播放器查看实时的 RDP 连接,您需要使用 `-i` 和 `-d` 参数指定播放器正在监听的 IP 地址和端口。注意:端口参数是可选的,默认端口为 3000。
```
pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 3000
```
##### 当 MITM 在服务器上运行时连接到 PyRDP 播放器
如果您在服务器上运行 MITM 并且仍然希望看到实时的 RDP 连接,您应该使用 [SSH 远程端口转发](https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/)
将您服务器上的某个端口转发到您机器上播放器的端口。完成此操作后,将 `127.0.0.1` 和转发的端口作为参数传递给 MITM。例如,如果服务器上的端口 4000 被转发到您机器上播放器的端口,则应使用的命令如下:
```
pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 4000
```
#### 在新连接上运行 payloads
PyRDP 支持在建立新连接时自动运行控制台命令或 PowerShell payloads。
由于 RDP 的特性,该过程有些取巧,并非总是 100% 可靠。其工作原理如下:
1. 等待用户通过身份验证。
2. 阻塞客户端的输入/输出以隐藏 payload 并防止干扰。
3. 发送伪造的 Windows+R 组合键序列并运行 `cmd.exe`。
4. 将 payload 作为控制台命令运行并退出控制台。如果配置了 PowerShell payload,它将使用 `powershell -enc ` 运行。
5. 等待一小段时间以允许 payload 完成。
6. 恢复客户端的输入/输出。
为此,您需要设置 3 个参数:
- payload
- payload 启动前的延迟
- payload 的持续时间
##### 设置 payload
您可以使用以下参数之一来设置要运行的 payload:
- `--payload`,包含控制台命令的字符串
- `--payload-powershell`,包含 PowerShell 命令的字符串
- `--payload-powershell-file`,PowerShell 脚本的路径
##### 选择何时启动 payload
目前,PyRDP 尚未检测用户何时登录。
您必须为其设定一个等待时间,然后再运行 payload。
这段时间过去后,它将发送伪造的按键序列并期望 payload 能正常运行。
为此,您可以使用 `--payload-delay` 参数。延迟时间以毫秒为单位。
例如,如果您期望用户在最初的 5秒内登录,您将使用以下参数:
```
--payload-delay 5000
```
可以通过利用 RDPDR 初始化期间交换的一些消息来使其更准确。
如果您有兴趣使其工作得更好,请参阅[此 issue](https://github.com/GoSecure/pyrdp/issues/98)。
##### 选择何时恢复正常活动
由于没有直接的方法可以知道控制台何时停止运行,您必须告诉 PyRDP 您希望阻塞客户端输入/输出多长时间。我们建议您将其设置为您预期运行 payload 的控制台可见的最大时间量。换言之,即您预期 payload 完成所需的时间量。
要设置 payload 持续时间,请使用带有毫秒时间量的 `--payload-duration` 参数。
例如,如果您预期 payload 完成最多需要 5 秒钟,您将使用以下参数:
```
--payload-duration 5000
```
这将在 5 秒钟内阻塞客户端的输入/输出,以隐藏控制台并防止干扰。
5 秒后,输入/输出将恢复正常。
#### 其他 MITM 参数
运行 `pyrdp-mitm --help` 以获取完整的参数列表。
##### `--no-downgrade`
此参数在 Honeypot 场景中运行 PyRDP 以避免扫描器指纹识别时非常有用。
启用此开关后,PyRDP 将不会降级不受支持的扩展,并让流量透明通过。
播放器可能无法成功重播视频流量,但以下支持的通道应该仍然可以访问:
- 击键记录
- 鼠标位置更新
- 剪贴板访问(被动)
- 驱动器访问(被动)
此功能仍在开发中,为了允许建立连接,目前某些降级是不可避免的。以下各项目前不受此开关影响,仍将被禁用:
- FIPS 加密
- 非 TLS 加密协议
- ClientInfo 压缩
- 虚拟通道压缩
**注意**:如果最终能够重播完整会话很重要,一个好的解决方案是使用 Wireshark 记录原始 RDP 流量并保留 TLS 主密钥。每当 PyRDP 添加对额外扩展的支持时,就可以从原始网络捕获中提取有效的 RDP 重播文件。
##### `--transparent`
告诉 PyRDP 尝试伪造客户端的源 IP 地址,以便服务器看到真实的 IP 地址而不是 MITM 的地址。
此选项仅在 MITM 在物理上是客户端和服务器之间的网关并能看到所有流量的特定场景中才有用。
[具体示例可以在此处找到。](docs/transparent-proxy.md)
**注意**:这需要 root 权限,仅适用于 Linux,并且需要手动配置防火墙以确保流量被正确路由。
##### `--no-gdi`:禁用加速图形管道
PyRDP 将视频降级到其支持的最新图形管道。此开关明确告诉 MITM 不要使用 [图形设备接口加速][gdi] 扩展来流式传输视频。这种模式的优点是显著减少了高分辨率连接所需的带宽。
请注意,某些 GDI 绘图命令目前尚未实现,因为它们似乎未被使用。如果您有包含任何不受支持或未测试命令的重播,请毫不犹豫地与项目维护人员分享,以便根据需要添加支持。(请确保跟踪记录中不包含敏感信息)
### 使用 PyRDP 播放器
使用 `pyrdp-player` 来运行播放器。
#### 播放重播文件
您可以使用菜单打开一个新的重播文件:File > Open。
您也可以在启动播放器时打开重播文件:
```
pyrdp-player ...
```
#### 监听实时连接
播放器始终在监听实时连接。默认情况下,监听端口为 3000,但可以更改:
```
pyrdp-player -p
```
#### 更改监听地址
默认情况下,播放器只监听来自本地机器的连接。我们不建议将播放器开放给其他机器。如果您仍想更改监听地址,可以使用 `-b`:
```
pyrdp-player -b
```
#### 其他播放器参数
运行 `pyrdp-player --help` 以获取完整的参数列表。
### 使用 PyRDP 证书克隆器
注意:使用此工具是可选的。
自 1.0 版本起,PyRDP 会像此工具那样动态生成证书。
PyRDP 证书克隆器通过使用现有 RDP 服务器证书中的值来创建一个全新的 X509 证书。它连接到 RDP 服务器,下载其证书,生成新的私钥,并使用新私钥替换证书的公钥和签名。这可以在渗透测试中使用,例如,如果您试图诱骗合法用户通过您的 MITM。使用看起来合法的证书可以提高您的成功率。
#### 克隆证书
您可以使用 `pyrdp-clonecert` 克隆证书:
```
pyrdp-clonecert 192.168.1.10 cert.pem -o key.pem
```
`-o` 参数定义了用于生成私钥的路径名。
#### 使用自定义私钥
如果您想使用自己的私钥而不是生成新的私钥:
```
pyrdp-clonecert 192.168.1.10 cert.pem -i input_key.pem
```
#### 其他克隆器参数
运行 `pyrdp-clonecert --help` 以获取完整的参数列表。
### 使用 PyRDP 转换
`pyrdp-convert` 是一个辅助脚本,可执行从各种输入格式到各种输出格式的多次有用转换。
由于未被拦截的连接中可能会使用不受支持的 RDP 协议特性,因此该脚本对 PyRDP 捕获的流量具有最大的处理成功率。
支持以下输入:
- 带有 TLS 主密钥的网络捕获 (PCAP)(可靠性较低)
- 以 Exported PDUs Layer 7 格式导出的网络捕获 (PCAP)(可靠性较高)
- 由 PyRDP 生成的重播文件
支持以下输出:
- MP4 视频文件
- JSON:以 JSON 格式序列化的低级别事件序列
- 与 `pyrdp-player` 兼容的重播文件
加密 (TLS) 的网络捕获需要使用 `--secrets ssl.log` 提供 TLS 主密钥。
```
# 将来自客户端 10.2.0.198 的会话导出为 .pyrdp 文件。
pyrdp-convert --src 10.2.0.198 --secrets ssl.log -o path/to/output capture.pcap
# 或导出为 MP4 视频
pyrdp-convert --src 10.2.0.198 --secrets ssl.log -o path/to/output -f mp4 capture.pcap
# 列出网络 trace 中的会话,以及可解密的会话。
pyrdp-convert --list-only capture.pcap
```
请注意,MP4 转换需要 libavcodec 和 ffmpeg,因此在 Windows 上可能需要额外的步骤。
手动解密的网络跟踪可以通过在 Wireshark 中选择 `File > Export PDUs` 并选择 `OSI Layer 7` 来导出。
首先,确保您已将 wireshark 配置为加载 TLS 密钥:

接下来,导出 OSI Layer 7 PDUs:

或者,通过应用显示过滤器并点击 `File > Export Specified Packets...`,将跟踪记录向下过滤为仅包含您感兴趣的对话。

现在这个跟踪记录可以直接在 `pyrdp-convert` 中使用了。
### 配置 PyRDP
PyRDP 的大部分配置是通过命令行开关完成的,但也可以将配置文件用于某些设置,例如日志配置。
PyRDP 使用的默认配置文件位于 [mitm.default.ini](pyrdp/mitm/mitm.default.ini)
和 [player.default.ini](pyrdp/player/player.default.ini)。这两个文件都有详尽的注释,可以作为进一步配置的基础。
未来有计划通过这些配置文件支持 PyRDP 配置的其他方面。
### 高级用法
#### 将 PyRDP 作为库使用
如果您有兴趣试验 RDP 并制作您自己的工具,请前往我们的[文档部分](docs/README.md)了解更多信息。
#### 在 twistd 中使用 PyRDP
PyRDP 的 MITM 组件也被实现为 twistd 插件。
这允许您在调试模式下运行它,并允许在您向 twistd 进程发送 `SIGUSR2` 信号时获得一个交互式调试 repl (pdb)。
有关更多信息,请参阅 [twistd 文档](docs/twistd.md)。
#### 在 Bettercap 中使用 PyRDP
我们开发了自己的 Bettercap 模块 `rdp.proxy`,用于对给定 LAN 上的所有 RDP 连接进行中间人攻击。请查看[此文档](docs/bettercap-rdp-mitm.md)了解更多信息。
### Docker 特定使用说明
由于 docker 限制了与主机系统(文件系统和网络)的交互,PyRDP docker 镜像必须根据您的用况使用某些参数运行。本节记录了这些参数。
我们参考了公开提供的 docker 镜像,但如果您[构建了自己的镜像](docs/devel.adoc),请将 `gosecure/pyrdp` 替换为您本地构建的镜像名称。
#### 映射监听端口
在大多数中间人情况下,您需要将主机的某个端口映射到 docker 镜像中。这是通过应用于 `docker run` 的 `--publish` (`-p`) 参数来实现的。
例如,要在所有接口上监听 3389(RDP 的默认端口),请使用:
```
docker run -p 3389:3389 gosecure/pyrdp pyrdp-mitm 192.168.1.10
```
#### 日志和工件存储
要永久存储 PyRDP 输出(日志、文件等),请将 `--volume` (`-v`) 选项添加到前面的命令中。在此示例中,我们将文件存储在当前目录的 `pyrdp_output` 中:
```
docker run -v $PWD/pyrdp_output:/home/pyrdp/pyrdp_output -p 3389:3389 gosecure/pyrdp pyrdp-mitm 192.168.1.10
```
确保您的目标目录由 UID 为 1000 的用户拥有,否则您将遇到权限拒绝错误。
如果您是系统上唯一的非 root 用户,通常您的用户会被分配 UID 1000。
#### 记录主机 IP 地址
如果您希望 PyRDP 在其日志中记录主机 IP 地址,您可以在使用 `docker run` 时设置 `HOST_IP` 环境变量:
```
docker run -p 3389:3389 -e HOST_IP=192.168.1.9 gosecure/pyrdp pyrdp-mitm 192.168.1.10
```
#### 在 Docker 中使用 GUI 播放器
使用播放器需要您将 `DISPLAY` 环境变量从主机导出到 docker。
这会将播放器的 GUI 重定向到主机屏幕。
您还需要公开主机的网络并阻止 Qt 使用 MIT-SHM X11 共享内存扩展。
为此,请将 `-e` 和 `--net` 选项添加到运行命令中:
```
docker run -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 --net=host gosecure/pyrdp pyrdp-player
```
请记住,将主机网络公开给 docker 可能会破坏容器与主机之间的隔离。
如果您打算使用播放器,通过 SSH 连接进行 X11 转发将是一种更安全的方式。
#### 在 Docker 中转换视频
视频转换过程依赖于 PyAV、ffmpeg 和 QT,因此您需要常规的 docker 镜像而不是精简版。
您需要一个卷挂载 (`-v`) 来与容器共享文件。
在这里,我们将本地目录映射到容器中的 `/shared/`。
```
docker run -e QT_QPA_PLATFORM=offscreen -v $PWD/:/shared gosecure/pyrdp pyrdp-convert -f mp4 -o /shared/
```
`QT_QPA_PLATFORM=offscreen` 环境变量是必需的,[原因请参考此处记录的错误](https://github.com/GoSecure/pyrdp/issues/428)。
它告诉 QT 没有可用的显示环境是正常的。
## PyRDP 轶事
* [介绍博客文章](https://www.gosecure.net/blog/2018/12/19/rdp-man-in-the-middle-smile-youre-on-camera),其中我们[演示了如何捕捉真实威胁行为者的操作](https://www.youtube.com/watch?v=eB7RC9FmL6Q)
* [NorthSec 2019 演讲](https://docs.google.com/presentation/d/1avcn8Sh2b3IE7AA0G9l7Cj5F1pxqizUm98IbXUo2cvY/edit#slide=id.g404b70030f_0_581),其中进行了两项演示:
* [第一项演示](https://youtu.be/5JztJzi-m48):凭据记录、剪贴板窃取、客户端文件浏览和会话接管
* [第二项演示](https://youtu.be/bU67tj1RkMA):当客户端成功验证时执行 cmd 或 powershell payloads
* [PyRDP Logo](/docs/pyrdp-logo.png) 采用 CC-BY-SA 4.0 许可。
* [BlackHat USA Arsenal 2019 幻灯片](https://docs.google.com/presentation/d/17P_l2n-hgCehQ5eTWilru4IXXHnGIRTj4ftoW4BiX5A/edit?usp=sharing)
* [DerbyCon 2019 幻灯片](https://docs.google.com/presentation/d/1UAiN2EZwDcmBjLe_t5HXB0LzbNclU3nnigC-XM4neIU/edit?usp=sharing)([视频](https://www.youtube.com/watch?v=zgt3N6Nrnss))
* [博客:PyRDP on Autopilot](https://www.gosecure.net/blog/2020/02/26/pyrdp-on-autopilot-unattended-credential-harvesting-and-client-side-file-stealing/)
* [博客:PyRDP 1.0](https://www.gosecure.net/blog/2020/10/20/announcing-pyrdp-1-0/)
* [DefCon 2020 Demo Labs](https://www.youtube.com/watch?v=1q2Eo3x3u0g)
* [博客:捕获 RDP NetNTLMv2 哈希:攻击细节和技术操作指南](https://www.gosecure.net/blog/2022/01/17/capturing-rdp-netntlmv2-hashes-attack-details-and-a-technical-how-to-guide/)
* [BlackHat USA Arsenal 2021 幻灯片](https://gosecure.github.io/presentations/2021-08-05_blackhat-usa/BlackHat-USA-21-Arsenal-PyRDP-OlivierBilodeau.pdf)
* [演讲:I Watched You Roll the Die: Unparalleled RDP Monitoring Reveal Attackers' Tradecraft](http://i.blackhat.com/BH-US-23/Presentations/US-23-Bilodeau-I-Watched-You-Roll-the-Die-Unparalleled-RDP-Monitoring.pdf) at BlackHat USA 2023
## 为 PyRDP 贡献
请参阅我们的[贡献指南](CONTRIBUTING.md)。
## 致谢
PyRDP 使用了以下开源软件的代码:
- [RC4-Python](https://github.com/bozhu/RC4-Python),用于 RC4 实现。
- [rdesktop](https://github.com/rdesktop/rdesktop),用于位图解压缩。
- [rdpy](https://github.com/citronneur/rdpy),用于 RC4 密钥、位图解压缩绑定以及 PyRDP 播放器的基础 GUI 代码。
- [FreeRDP](https://github.com/FreeRDP/FreeRDP),用于扫描码枚举。
标签:Elastic Stack, MITM, OpenCanary, PCAP分析, PyRDP, RDP, X509证书, 中间人攻击, 会话劫持, 凭据窃取, 剪贴板监控, 反取证, 安全测试工具, 安全评估, 流量重放, 电源外壳, 紫队工具, 网络嗅探, 网络安全, 蓝队检测, 请求拦截, 远程桌面协议, 逆向工具, 隐私保护