這是今天要談的題目
我們先來談談甚麼是netcat,他是一個小巧但功能非常強的網路工具,被叫做網路上的瑞士刀。它可以在TCP或 UDP上讀寫資料流,等於把標準輸入輸出stdin/stdout接到一個網路socket。因為無需額外協議,所以常被用來做測試、偵錯亦可用作資安測試。
功能:
1.連線到遠端服務
nc host port:連到指定 host 與 port,然後你可以直接輸入/接收資料。
2.當作簡單的伺服器
nc -l -p 1234:在本機開 1234 port 等人連。常用來接收檔案或做簡單聊天。
3.banner grabbing
連到某個 port 看伺服器回傳的字串例如:HTTP header、SMTP。
4.檔案傳輸(不用 FTP)
例如:nc -l -p 1234 > recv.bin(接收端)與 nc host 1234 < send.bin(傳送端)。
5.簡單的 port scanning
nc -vz host 1-1000:快速看哪些 port open。
6.建立反向/正向 shell
可以把shell的stdin/stdout綁到socket。 !
還有更詳細的描述我們可以到https://linux.die.net/man/1/nc 來
學習。
回到題目我們只要連上他給的伺服器就可以了
https://ithelp.ithome.com.tw/upload/images/20250928/20178623RUmZLVmwTA.png
心得:
第一次接觸 netcat 的時候,老實說我覺得它看起來很陽春,畢竟就是一行指令就能連上某個主機加上port,好像沒有什麼特別的地方。但真的在CTF題目裡使用後才發現,它的威力就在於簡單直接。不像瀏覽器或curl幫你處理一堆協議細節,netcat幾乎是把最原始的網路連線簡單化,伺服器回什麼你就看到什麼,你輸入什麼它就直接送過去。這種互動方式,反而讓我更快理解了TCP/UDP的基本運作,也更能抓到題目要我和服務端交換訊息的邏輯。
在練習過程中,我也踩過不少坑,例如一開始把host和port寫在一起,結果老是出現Unknown host,後來才懂得要用空格分開。這看似小小的錯誤,卻讓我體會到命令行工具對格式的嚴格,以及DNS與連線的細節。還有當輸出的內容不是單純文字,而是二進位檔案時,學會用 > out.bin 把資料存下來再分析,也是一種實際操作中才會有的體悟。
學netcat不只是學一個指令,而是學會用最基礎的方式和網路服務打交道。它讓我意識到,有些工具雖然功能多,但會替你包裝很多細節。netcat則是反過來,逼你直接面對最底層的輸入與輸出。對我來說,這種經驗不僅幫助我在CTF裡解題,也讓我對網路傳輸更有實感,而不只是書本上的抽象概念。我也在黑客python這本書上看到自己寫netcat功能的工具方式,那未來完成這30天的解題後,我會嘗試自己去寫建立這類工具的程式。