當前位置:
首頁 > 最新 > Linux下幾種反彈Shell方法的總結與理解

Linux下幾種反彈Shell方法的總結與理解

之前在網上看到很多師傅們總結的linux反彈shell的一些方法,為了更熟練的去運用這些技術,於是自己花精力查了很多資料去理解這些命令的含義,將研究的成果記錄在這裡,所謂的反彈shell,指的是我們在自己的機器上開啟監聽,然後在被攻擊者的機器上發送連接請求去連接我們的機器,將被攻擊者的shell反彈到我們的機器上,下面來介紹分析幾種常用的方法。


實驗環境

CentOS 6.5:192.168.0.3

kali2.0:192.168.0.4


反彈shell命令如下:

首先,使用nc在kali上監聽埠:

然後在CentOS6.5下輸入:

可以看到shell成功反彈到了kali上面,可以執行命令:

在解釋這條反彈shell的命令原理之前,首先需要掌握幾個點。

linux文件描述符:linux shell下有三種標準的文件描述符,分別如下:

還有就是>&這個符號的含義,最好的理解是這樣的:

也有師傅把&這個符號解釋為是取地址符號,學過C語言的小夥伴們都知道&這個符號代表取地址符,在C++中&符號還代表為引用,這樣做是為了區分文件描述符和文件,比如查看一個不存在的文件,要把標準錯誤重定向到標準輸出,如果直接的話,則會將1看作是一個文件,將標準錯誤輸出輸出到1這個文件里而不是標準輸出,而&的作用就是為了區分文件和文件描述

符:

理解了上面這些知識,下面來解釋一下這一條反彈shell的命令首先,bash -i代表在本地打開一個bash,然後就是,是Linux中的一個特殊設備,打開這個文件就相當於發出了一個socket調用,建立一個socket連接,>&後面跟上這個文件代表將標準輸出和標準錯誤輸出重定向到這個文件,也就是傳遞到遠程上,如果遠程開啟了對應的埠去監聽,就會接收到這個bash的標準輸出和標準錯誤輸出,這個時候我們在本機CentOS輸入命令,輸出以及錯誤輸出的內容就會被傳遞顯示到遠程。

在本地輸入設備(鍵盤)輸入命令,在本地看不到輸入的內容,但是鍵盤輸入的命令已經被輸出到了遠程,然後命令的執行結果或者錯誤也會被傳到遠程,查看遠程,可以看到標準輸出和標準錯誤輸出都重定向到了遠程:

下面在該命令後面加上,代表將標準輸入重定向到標準輸出,這裡的標準輸出已經重定向到了這個文件,也就是遠程,那麼標準輸入也就重定向到了遠程,這樣的話就可以直接在遠程輸入了:

那麼,0>&2也是可以的,代表將標準輸入重定向到標準錯誤輸出,而標準錯誤輸出重定向到了這個文件,也就是遠程,那麼標準輸入也就重定向到了遠程:

為了更形象的理解,下面給出了整個過程的數據流向,首先是本地的輸入輸出流向:

執行後

執行或者後:


使用python反彈,反彈shell命令如下:

首先,使用nc在kali上監聽埠:

在CentOS下使用python去反向連接,輸入:

可以看到kali上成功反彈到了shell,可以執行一些命令:

在已經深入理解了第一種方法的原理後,下面來解釋一下python反彈shell的原理。

首先使用socket與遠程建立起連接,接下來使用到了os庫的dup2方法將標準輸入、標準輸出、標準錯誤輸出重定向到遠程,dup2這個方法有兩個參數,分別為文件描述符fd1和fd2,當fd2參數存在時,就關閉fd2,然後將fd1代表的那個文件強行複製給fd2,在這裡可以把fd1和fd2看作是C語言里的指針,將fd1賦值給fd2,就相當於將fd2指向於s.fileno(),fileno()返回的是一個文件描述符,在這裡也就是建立socket連接返回的文件描述符,經過測試可以看到值為3。

於是這樣就相當於將標準輸入(0)、標準輸出(1)、標準錯誤輸出(2)重定向到遠程(3),接下來使用os的subprocess在本地開啟一個子進程,傳入參數「-i」使bash以交互模式啟動,標準輸入、標準輸出、標準錯誤輸出又被重定向到了遠程,這樣的話就可以在遠程執行輸入命令了。


使用nc反彈shell,需要的條件是被反彈shell的機器安裝了nc,CentOS6.5安裝nc方法如下:

之後在kali上使用nc監聽埠:

在CentOS上使用nc去反向連接,命令如下:

這裡的-e後面跟的參數代表的是在創建連接後執行的程序,這裡代表在連接到遠程後可以在遠程執行一個本地shell(),也就是反彈一個shell給遠程,可以看到遠程已經成功反彈到了shell,並且可以執行命令。

注意之前使用nc監聽埠反彈shell時都會有一個警告:,根據nc幫助文檔的提示加上-n參數就可以不產生這個警告了,-n參數代表在建立連接之前不對主機進行dns解析。

如果nc不支持-e參數的話,可以利用到linux中的管道符,首先在kali上開啟監聽:

之後在CentOS上使用nc去反向鏈接:

這裡通過在kali上監聽兩個埠,然後在使用CentOS進行反向連接的時候使用到了管道符,管道符的作用是把管道符前的輸出作為管道符後的輸入,這樣的話就可以在遠程的6666埠的輸入設備(鍵盤)輸入命令,將命令輸出傳遞至本地的,通過本地shell解釋執行命令後,將命令執行的結果以及錯誤輸入到遠程的7777埠。


使用php反彈shell,方法如下 。

首先最簡單的一個辦法,就是使用php的exec函數執行方法1反彈shell的命令:

還有一個是之前烏雲知識庫上的一個姿勢,使用php的fsockopen去連接遠程:

這個姿勢看起來有一些難以理解,尤其是還出現了

有了之前的基礎,我們知道3代表的是使用fsockopen函數建立socket返回的文件描述符,這裡將標準輸入,標準輸出和標準錯誤輸出都重定向到了遠程

在CentOS上反向連接,輸入:

注意php反彈shell的這些方法都需要php關閉safe_mode這個選項,才可以使用exec函數。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 瘋貓網路 的精彩文章:

如何使用Cron Jobs實現Linux提權
高級加密標準分析

TAG:瘋貓網路 |