One-liners like the following are often used in offensive security contexts to establish shell access via netcat
and named pipes:
rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc -l 0.0.0.0 9001 > /tmp/f
This clever construct creates a bind shell—a shell that listens on a port and grants access to whoever connects. Let's understand how it works, then dig into its security implications.
🧠 Command Breakdown
1. rm -f /tmp/f
Removes any previous file or FIFO named /tmp/f
to avoid conflicts.
2. mkfifo /tmp/f
Creates a named pipe (FIFO) for inter-process communication.
3. Shell Pipeline
cat /tmp/f | /bin/sh -i 2>&1 | nc -l 0.0.0.0 9001 > /tmp/f
-
cat /tmp/f
: feeds input from the attacker into the shell. -
/bin/sh -i
: starts an interactive shell. -
2>&1
: merges standard error into standard output. -
nc -l 0.0.0.0 9001
: starts a listener; any client connecting to this port receives shell output. -
> /tmp/f
: sends input from the client back into the FIFO to be read by the shell.
This creates a loop where shell input and output are redirected over the network.
🔥 Use Case: Bind Shell
The script sets up a bind shell, which waits for a connection. It's the opposite of a reverse shell, where the target connects to the attacker.
To connect to it:
nc 9001
🚨 Security Risks
Despite its simplicity, this method introduces serious vulnerabilities. Let’s break down the risks.
1. Unauthenticated Access
Anyone who can reach the port (9001 in this case) can connect and gain shell access. There's no authentication, making it a major security hole.
If this is run on a public-facing server, it becomes an open backdoor.
2. Bypassing Security Controls
This technique can:
-
Evade detection by using legitimate tools (
nc
,mkfifo
,sh
) - Bypass firewalls (if outbound/inbound port 9001 is open)
- Avoid EDRs that don't monitor named pipe activity or shell redirections
3. Persistence Opportunities
An attacker could:
- Embed this command into startup scripts (
/etc/rc.local
, cronjobs, or user.bashrc
) - Mask it under a legitimate-looking process name
4. Difficult Forensics
Because it uses native tools and pipes, there's:
- No binary drop (no malware files)
- Minimal footprint on disk
- Obfuscated activity in logs (unless audit logging is enabled)
5. Privilege Escalation
If run as root
, the attacker gets root shell access. Even if run by a low-privileged user, it can be used as a foothold for lateral movement or privilege escalation.
🛡️ Mitigation Strategies
✅ System Hardening
- Disable or restrict
nc
(especially versions withe
support) - Use AppArmor/SELinux to restrict use of named pipes or unauthorized shells
✅ Monitoring
-
Watch for FIFO creation in
/tmp
:
auditctl -w /tmp -p wa
Alert on
nc -l
usage or strange ports listening
✅ Network Controls
- Use firewalls to limit access to uncommon ports
- Block outbound/inbound traffic not explicitly needed
✅ File Integrity Monitoring
- Watch for changes in startup files (
.bashrc
, crontab,/etc/init.d/
)
⚖️ Ethical Considerations
This technique is powerful but dangerous. It is often used by red teamers, penetration testers, and attackers alike. Use it only with authorization and in controlled environments.
Unauthorized use is illegal and unethical, potentially violating computer crime laws like the Computer Fraud and Abuse Act (CFAA) or equivalents in other countries.
🧾 Conclusion
This compact netcat FIFO shell is a brilliant piece of Unix ingenuity—but also a potent security risk. It illustrates how native tools can be misused to create stealthy, backdoor access to a system. Understanding it is crucial for both attackers and defenders.