国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

內網(wǎng)穿透工具的原理與開(kāi)發(fā)實(shí)戰

發(fā)布時(shí)間:2022-06-16 00:30 來(lái)源:美橙資訊 閱讀:94 作者:美橙資訊 欄目: 網(wǎng)絡(luò )安全

在我國,由于網(wǎng)民眾多,運營(yíng)商無(wú)法保證為每一個(gè)寬帶用戶(hù)提供全球唯一的公網(wǎng)IPv4地址。因此很多用戶(hù)會(huì )發(fā)現通過(guò)路由器端查看到的WAN端IP與百度“IP”關(guān)鍵詞所得到的IP不一致,并且前者的IP為一個(gè)私有IP。

而還有一些情況下,公網(wǎng)IP比較昂貴,企業(yè)雖然本身也持有少量的獨立的公網(wǎng)IP,但是由于成本限制無(wú)法為企業(yè)內每一臺都提供一個(gè)公網(wǎng)IP,或者內網(wǎng)并不是所有服務(wù)都需要暴露到公網(wǎng)中進(jìn)行訪(fǎng)問(wèn),那么企業(yè)有可能就會(huì )使用NAT技術(shù)將大量的內網(wǎng)IP通過(guò)一定規則映射到公網(wǎng)IP上。而最常見(jiàn)的其中一種技術(shù)就是NAPT,也叫“網(wǎng)絡(luò )端口地址轉換”。因為一般一個(gè)服務(wù)都是通過(guò)一個(gè)端口來(lái)提供,因此通過(guò)這種方式可以將特定的服務(wù)通過(guò)特定的規則開(kāi)放到少量的公網(wǎng)IP上。

問(wèn)題

但是有的時(shí)候我們個(gè)人寬帶用戶(hù)也想將自己的服務(wù)發(fā)布到公網(wǎng)IP上。比如說(shuō)我們做了一個(gè)很漂亮的網(wǎng)站想發(fā)布到互聯(lián)網(wǎng)上供大家參觀(guān),在沒(méi)有公網(wǎng)IP的情況下該怎么實(shí)現呢?

還有的時(shí)候我們在對企業(yè)做滲透測試的時(shí)候,發(fā)現企業(yè)某臺公網(wǎng)服務(wù)器只對公網(wǎng)開(kāi)放了常見(jiàn)的80端口,而我們提權時(shí)需要用到的3389等端口沒(méi)有對公網(wǎng)開(kāi)放,這個(gè)時(shí)候又該怎么辦呢?

解決這些問(wèn)題的方式就是內網(wǎng)穿透了。

NAPT原理

簡(jiǎn)單來(lái)說(shuō),在NAT網(wǎng)關(guān)上會(huì )有一張映射表,表上記錄了內網(wǎng)向公網(wǎng)哪個(gè)IP和端口發(fā)起了請求,然后如果內網(wǎng)有向公網(wǎng)設備發(fā)起了請求,內網(wǎng)的請求數據包傳輸到了NAT網(wǎng)關(guān)上,那么NAT網(wǎng)關(guān)會(huì )修改該數據包的源IP地址和源端口為NAT網(wǎng)關(guān)自身的IP地址和任意一個(gè)不沖突的自身未使用的端口,并且把這個(gè)修改記錄到那張映射表上。最后把修改之后的數據包發(fā)送到請求的目標,等目標發(fā)回了響應包之后,再根據響應包里面的目的IP地址和目的端口去映射表里面找到該轉發(fā)給哪個(gè)內網(wǎng)。這樣就實(shí)現了內網(wǎng)在沒(méi)有公網(wǎng)IP的情況下,通過(guò)NAPT技術(shù)借助路由器唯一的一個(gè)公網(wǎng)IP來(lái)訪(fǎng)問(wèn)公網(wǎng)設備。

具體原理我到網(wǎng)上找了一張圖片:

從這里我們可以看到,NAPT只解決了內網(wǎng)在沒(méi)有公網(wǎng)IP的情況下如何訪(fǎng)問(wèn)公網(wǎng)的問(wèn)題,但是并不能解決公網(wǎng)如何主動(dòng)向內網(wǎng)發(fā)起請求的問(wèn)題。

私有地址

在較早以前的 RFC 1918 文檔中對私有地址有相關(guān)的說(shuō)明。

因特網(wǎng)分配組織IANA組織(Internet Assigned Numbers Authority)保留了以下三個(gè)IP地址塊用于私有網(wǎng)絡(luò )。

10.0.0.0 - 10.255.255.255 (10/8比特前綴)

172.16.0.0 - 172.31.255.255 (172.16/12比特前綴)

192.168.0.0 - 192.168.255.255 (192.168/16比特前綴)

我們可以看到其中有1個(gè)A類(lèi)地址塊,32個(gè)B類(lèi)地址塊和256個(gè)C類(lèi)地址塊。主流的家用路由器使用C類(lèi)私有地址作為路由器LAN端的IP地址較多,所以我們可以看到路由器設置頁(yè)面的IP一般都為192.168開(kāi)頭。

原因

先說(shuō)說(shuō)家庭寬帶的情況吧。家庭寬帶如果沒(méi)有公網(wǎng)IP,那么意味著(zhù)你在本機上監聽(tīng)的任何端口,都只能在本機網(wǎng)卡所在的網(wǎng)絡(luò )中訪(fǎng)問(wèn),這個(gè)網(wǎng)絡(luò )一般是路由器LAN端所在的網(wǎng)絡(luò )。如果沒(méi)有做特定的映射規則,那么路由器WAN端所連接到的網(wǎng)絡(luò )將無(wú)法正常訪(fǎng)問(wèn)該提供的服務(wù)。

如果這種情況下想要讓W(xué)AN端(如果運營(yíng)商為你分配了公網(wǎng)IP,那么WAN端所連接到的網(wǎng)絡(luò )通常就是公網(wǎng)),那么需要在路由器上做端口映射。比如說(shuō)路由器的LAN IP為192.168.1.1,WAN IP為23.23.23.23,我想讓內網(wǎng)192.168.1.2的80端口提供的HTTP服務(wù)器直接能夠在公網(wǎng)中通過(guò)http://wap.friendlycc.com.cn/

但是通常情況下,運營(yíng)商是不會(huì )給普通用戶(hù)公網(wǎng)IP的。那么用這種方法映射,在公網(wǎng)仍然是無(wú)法訪(fǎng)問(wèn)的,因為你的路由器WAN端連接的又是運營(yíng)商更上一級的路由器LAN端,嚴重一點(diǎn),甚至是層層連接最后才到公網(wǎng),這種行為稱(chēng)作流量穿透。國內某電,某動(dòng)的寬帶就有大量這種行為。通過(guò)流量穿透的方式來(lái)提供的寬帶服務(wù),看似便宜,實(shí)則影響很大,由于大家公用一個(gè)IP,可能會(huì )導致很多網(wǎng)站的反SPAM策略傷及無(wú)辜,或者內部為了節省帶寬,使用緩存,導致一些不該緩存的敏感安全頁(yè)面被緩存起來(lái),甚至導致部分網(wǎng)站緩存失效完全打不開(kāi)。

有的人發(fā)現,即使自己有公網(wǎng)IP,但是仍然無(wú)法通過(guò)常規方法架設服務(wù)器,這是怎么回事呢?這是運營(yíng)商為了防止個(gè)人隨意開(kāi)設各種非法服務(wù),也防止黑客通過(guò)掃描器進(jìn)行抓雞和批量掃描,將一些常用端口進(jìn)行了封禁,比如說(shuō)我們這的中國電信就將80,8080等端口封禁了。這樣封禁,雖然一定程度上保證了我們的網(wǎng)絡(luò )安全,比如說(shuō)前段時(shí)間的勒索病毒正因為國內大部分用戶(hù)沒(méi)有獨立的公網(wǎng)IP,并且操作系統最容易爆發(fā)漏洞的一些,135,139等端口被運營(yíng)商封禁了,使得國內個(gè)人家庭電腦中招的概率小了很多;但是導致即使有公網(wǎng)IP,也無(wú)法使用常用端口向外網(wǎng)提供服務(wù),只能更換到其他端口。這樣有什么不好呢?比較典型的問(wèn)題就是WEB網(wǎng)站默認使用80端口,那么在輸入網(wǎng)址的時(shí)候可以不用帶上端口號,顯得比較美觀(guān)。

解決方案

如果遇到了上述情況,我們該如何解決呢?

如果我們沒(méi)有一臺公網(wǎng)服務(wù)器,我們可以使用國內大名鼎鼎的“花生殼”,“nat123”等服務(wù)來(lái)實(shí)現,但是他們背后的原理是什么呢?

我們如果在自己擁有一臺具有公網(wǎng)IP服務(wù)器的情況下,我們可以借助這臺公網(wǎng)IP服務(wù)器提供服務(wù)。而具體又該怎么操作呢?

解決方案的實(shí)現

先假設我們自己有一臺公網(wǎng)服務(wù)器,他的IP為45.45.45.45。我們又有一臺內網(wǎng)服務(wù)器IP為23.23.23.23.我們現在想把23.23.23.23:80,即內網(wǎng)服務(wù)器上的HTTP服務(wù)開(kāi)放到45.45.45.45上。

最簡(jiǎn)單粗暴的方式就是,我們可以直接將整個(gè)內網(wǎng)服務(wù)器環(huán)境在公網(wǎng)服務(wù)器上重新搭建一遍。

但是這樣做很麻煩,我們有的時(shí)候并不想這樣做,我們只是想簡(jiǎn)單的借助公網(wǎng)服務(wù)器的網(wǎng)絡(luò )來(lái)發(fā)布一個(gè)內網(wǎng)服務(wù)。

前面我們通過(guò)NAPT原理得知:NAPT實(shí)現了內網(wǎng)在沒(méi)有公網(wǎng)IP的情況下訪(fǎng)問(wèn)公網(wǎng)。那么我們可以這樣做:假設公網(wǎng)IP為23.23.23.23,內網(wǎng)IP為192.168.1.2。公網(wǎng)先監聽(tīng)80端口,監聽(tīng)這個(gè)端口是用于向外部提供一個(gè)HTTP服務(wù),80是WEB服務(wù)器的默認端口。同時(shí)其他任意一個(gè)端口(這里我們假設為7777),監聽(tīng)這個(gè)端口是用于讓內網(wǎng)服務(wù)器主動(dòng)連接進(jìn)來(lái)打通一個(gè)隧道。接著(zhù)內網(wǎng)再主動(dòng)向公網(wǎng)的7777發(fā)起一個(gè)請求,這樣內網(wǎng)就成功與公網(wǎng)建立了一個(gè)連接通道。然后當有任何客戶(hù)端主動(dòng)連接公網(wǎng)的80端口時(shí),公網(wǎng)接收到連接請求之后馬上把這連接請求通過(guò)先前建立好的隧道轉發(fā)到內網(wǎng),內網(wǎng)接收到來(lái)自隧道的數據包后再主動(dòng)連接內網(wǎng)自身的80端口,連接成功之后將數據包原封不動(dòng)地轉發(fā)數據包給80端口,待HTTP服務(wù)器程序處理完這個(gè)數據包,生成了響應報文之后再原路轉發(fā)回去,最終到達公網(wǎng)的80端口,然后返回給最開(kāi)始請求公網(wǎng)服務(wù)器80端口的客戶(hù)端。

看起來(lái)是不是比較繞呢?事實(shí)上大名鼎鼎的花生殼內網(wǎng)版以及nat123等內網(wǎng)穿透工具的原理基本就是如此,但是并不完全是這樣。因為一個(gè)運輸層端口只能同時(shí)提供一種服務(wù),但是我們會(huì )發(fā)現花生殼這種內網(wǎng)穿透服務(wù)是借助一個(gè)公網(wǎng)IP同時(shí)給很多用戶(hù)提供了服務(wù),這是因為花生殼在流量轉發(fā)這一層上并不是像我之前所說(shuō)的原封不動(dòng)的將報文進(jìn)行轉發(fā),而是在轉發(fā)之前加了一些控制協(xié)議的內容,用于指明該轉發(fā)到哪個(gè)花生殼客戶(hù)端所在的內網(wǎng)上。前者這種原封不動(dòng)的轉發(fā)方式通常叫做透明傳輸或者透明代理。

穿透防火墻

為了安全起見(jiàn),通常會(huì )在網(wǎng)絡(luò )中加入防火墻,防火墻有入站規則和出站規則。如果不是非常嚴格的安全管控,通常是不會(huì )設置出站規則的,但是入站規則一般都會(huì )設置的,比如說(shuō)外部可以通過(guò)80端口傳入內網(wǎng)的WEB服務(wù)器訪(fǎng)問(wèn)網(wǎng)頁(yè),但是不能通過(guò)3389端口登陸內網(wǎng)的遠程桌面。

而在內網(wǎng)滲透的過(guò)程中碰到這種情況,我們也可以借助上面內網(wǎng)傳統的方式實(shí)現穿透防火墻的入站規則。因為防火墻通常只攔截了入站,沒(méi)有攔截出站,那么我們可以讓內網(wǎng)服務(wù)器主動(dòng)出站(主動(dòng)連接到黑客的服務(wù)器),與黑客自己的服務(wù)器打通隧道,最終繞過(guò)防火墻連上3389遠程桌面。

還有一種情況就是我們已經(jīng)拿下了內網(wǎng)其中一臺并沒(méi)有做任何防火墻規則的白名單服務(wù)器,但是我們想連上內網(wǎng)另一臺做了入站規則的目標服務(wù)器,那么我們可以讓這臺白名單服務(wù)器作為一個(gè)跳板,讓他先監聽(tīng)自身任意一個(gè)端口,然后在有任何用戶(hù)連上這個(gè)端口之后,白名單服務(wù)器就主動(dòng)連上內網(wǎng)的目標服務(wù)器,然后借助這臺白名單服務(wù)器打通黑客和目標服務(wù)器的連接隧道。

而在黑客工具中大名鼎鼎的lcx原理也就是如此,前者的實(shí)現是lcx的listen和slave命令,后者的實(shí)現是lcx的tran命令。

代碼實(shí)現

知道了原理之后,具體該怎么實(shí)現呢?

我這里選擇了使用Go語(yǔ)言編程實(shí)現了這樣一個(gè)內網(wǎng)穿透工具。

Golang本身提供了非常多的網(wǎng)絡(luò )庫,并且Golang本身內置的Goroutine能夠很方便的處理網(wǎng)絡(luò )編程中的異步IO,而且最重要的是,Golang開(kāi)發(fā)的程序是可以跨平臺運行的,意味著(zhù)寫(xiě)了一份代碼,我們可以在任何一個(gè)操作系統上編譯并使用。

http://wap.friendlycc.com.cn/

初始運行時(shí)根據情況輸出歡迎信息已經(jīng)語(yǔ)法提示(這里要重點(diǎn)注意printWelcome函數末尾調用了time.Sleep阻塞一秒,這是因為fmt包輸出是非線(xiàn)程安全的,而log包下的輸出都是線(xiàn)程安全的,因此為了防止后面執行流中打的日志會(huì )穿插到提示信息中而使用該函數休息一秒鐘)。

首先通過(guò)判斷傳入參數決定當前使用何種轉發(fā)策略。

然后再判斷傳入參數是否正確,通過(guò)正則表達式等方式驗證IP的合法性以及端口范圍。

通過(guò)port2port函數實(shí)現了兩個(gè)端口同時(shí)監聽(tīng)雙向并且轉發(fā)數據。

在port2host操作中實(shí)現了跳板中轉。

在host2host中實(shí)現了主動(dòng)連接打通隧道的功能。

看代碼便可以知道,在Golang中進(jìn)行socket操作的net包要比C語(yǔ)言中的socket.h操作簡(jiǎn)單很多。

轉發(fā)功能的核心就在于forward函數部分。

先輸出一個(gè)日志說(shuō)明是對哪兩個(gè)連接進(jìn)行雙向轉發(fā),然后通過(guò)sync包下的WaitGroup實(shí)現一個(gè)條件阻塞功能,防止在Goroutine還未執行完,主線(xiàn)程就已經(jīng)退出了。

然后發(fā)射兩個(gè)Goroutine,分別處理連接1到連接2的IO數據包拷貝以及連接2到連接1的IO數據包拷貝。因為要保證兩個(gè)端口間的通信是全雙工的,也就是兩邊同時(shí)都要能夠互相交換數據,所以要用Goroutine來(lái)實(shí)現這兩個(gè)操作的并發(fā)。

而IO數據包的拷貝核心代碼在connCopy函數中,根據是否要記錄流量日志判斷是否要使用io.MultiWriter這個(gè)多路寫(xiě)數據流的函數。

如果打開(kāi)日志文件的文件流成功,則通過(guò)io.MultiWriter函數生成一個(gè)多路寫(xiě)入流,這里這個(gè)多路寫(xiě)入流的變量名為w,任何寫(xiě)入到w這個(gè)寫(xiě)入流的數據都會(huì )同時(shí)寫(xiě)入先前參與執行多路寫(xiě)入流創(chuàng )建函數io.MultiWriter的參數中,在這里參數為conn1和logFile,即為端口1和日志文件流。

接著(zhù)調用io.Copy將第二參數的讀取流中讀取到的數據源源不斷地拷貝到第一個(gè)參數的寫(xiě)入流中。

這里要注意io.Copy函數是同步阻塞的,意味著(zhù)只要連接沒(méi)有斷開(kāi),那么程序執行流將一直卡在這個(gè)函數。如果拷貝出錯,那么io.Copy函數就會(huì )返回,也就是執行他下面的代碼??截惓鲥e意味著(zhù)可能連接已斷開(kāi),那么先把寫(xiě)入流的連接斷掉。

這里要重點(diǎn)注意,為什么是斷開(kāi)寫(xiě)入流而不是讀寫(xiě)流全部斷開(kāi)呢。因為我們前面發(fā)射了兩個(gè)Goroutine,如果盲目全部斷開(kāi),將會(huì )導致另一個(gè)Goroutine中可能還有未寫(xiě)完的數據丟失。具體可以根據TCP四次揮手來(lái)分析。

實(shí)際執行

如果沒(méi)有Golang環(huán)境的朋友可以直接下載編譯好的可執行文件,下載地址:http://wap.friendlycc.com.cn/

我們先來(lái)看看代碼編譯之后實(shí)際運行,上圖左邊為虛擬機跑的內網(wǎng)服務(wù)器,他已經(jīng)設置了入站規則,通過(guò)直接連接192.168.2.112:3389是無(wú)法連上遠程桌面的。

此時(shí)此刻右圖開(kāi)始通過(guò)listen命令監聽(tīng)7777和9999端口。

接著(zhù)內網(wǎng)服務(wù)器再通過(guò)slave命令開(kāi)始雙向連接黑客的(右圖的192.168.2.101:7777)以及本地的127.0.0.1:3389。

然后黑客的上連接本地監聽(tīng)的另一個(gè)端口127.0.0.1:9999即可連接上內網(wǎng)服務(wù)器的遠程桌面。

大家可以根據netstat -an的結果以及控制臺日志輸出來(lái)綜合理解這個(gè)過(guò)程。

寫(xiě)在最后

這個(gè)工具現在實(shí)現的仍然只是簡(jiǎn)單的透明傳輸,并且存在諸多問(wèn)題。比如說(shuō)本地主動(dòng)連接內網(wǎng)服務(wù)是一開(kāi)始就預連接好的,這樣會(huì )導致一些服務(wù)如果在連上之后長(cháng)期沒(méi)有數據傳輸,會(huì )主動(dòng)斷掉連接,導致公網(wǎng)端偶爾出現無(wú)法連接上,要重新斷開(kāi)重連后才能連上的小BUG,具體在HTTP服務(wù)器要多刷新幾次頁(yè)面,遠程桌面則可能要連接上然后又取消,然后再連才能連上。而且在并發(fā)連接上處理還有一些細節沒(méi)有做好。并且目前還僅僅支持TCP連接的轉發(fā)等等,當然要實(shí)現UDP的轉發(fā)也不是很困難稍加改進(jìn)即可。大家也可以點(diǎn)個(gè)star,提個(gè)pull request一起來(lái)改進(jìn)這些問(wèn)題。目前相關(guān)的開(kāi)源項目也有做的比較成熟的,比如說(shuō)Golang寫(xiě)的ngork,大家也可以參考參考。

文章來(lái)源:https://news.cndns.com/article/8018

相關(guān)推薦

【上云季-1折驚爆價(jià)】香港/美國性能云服務(wù)器27元起秒殺專(zhuān)場(chǎng),上云必備,火爆開(kāi)搶>>點(diǎn)擊查看詳情<<

【全球云-高性能限量搶】高性能主機好用能省,高性能高配置高儲存,輕松解鎖云端場(chǎng)景>>點(diǎn)擊查看詳情<<

【服務(wù)器-特價(jià)服務(wù)器】新購指定配置可享受限時(shí)特惠7折。每個(gè)用戶(hù)不限臺數 低至280元月>>點(diǎn)擊查看詳情<<

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系QQ:712375056。

人妻aⅴ无码一区二区三区| 好男人社区在线影视WWW| WWW免费视频在线观看播放| 精品国产A∨无码一区二区三区| 高清不卡二卡三卡四卡免费| 中文字幕无码专区人妻系列|