正向 Shell 和反向 Shell 的区别
正向 Shell (Bind Shell)
工作原理
- 攻击者在目标主机上执行恶意代码,该代码会开启一个端口并监听,等待连接
- 攻击者随后从自己的机器上,向目标主机的这个监听端口发起连接
- 一旦连接建立,攻击者就可以通过这个连接发送命令,并在自己的终端上接收目标主机的输出
A[攻击者] --主动发起连接--> B[目标主机: 监听端口]
B --命令输出--> A
优点
- 简单:一旦端口在目标主机上打开,攻击者就可以直接连接。
缺点
- 防火墙限制:这是正向 Shell 最大的问题。许多企业和家庭网络都部署了防火墙,会阻止来自外部的入站连接。目标主机的端口通常是关闭的,或者被严格限制
- IP 地址不确定:如果目标主机的 IP 是动态的,攻击者很难持续连接
反向 Shell (Reverse Shell)
工作原理
- 攻击者首先在自己的机器上,开启一个端口并监听,等待连接
- 攻击者在目标主机上执行恶意代码,该代码会主动连接攻击者的监听端口
- 一旦连接建立,攻击者就可以通过这个连接向目标主机发送命令,并接收命令输出
A[攻击者: 监听端口] --等待连接--> B[目标主机]
B --主动发起连接--> A
A --命令--> B
B --命令输出--> A
优点
- 绕过防火墙:这是反向 Shell 最大的优势。防火墙通常只阻止入站连接,但允许内部主机向外部发起出站连接。这使得反向 Shell 能够轻松穿透大多数防火墙
- IP 地址不确定:即使目标主机的 IP 是动态的,只要它能主动连接到攻击者的固定 IP 地址,连接就可以成功建立
缺点
- 复杂性:攻击者需要有一个公网 IP 或能够通过端口转发,才能在自己的机器上成功监听