前面兩天不知道大家看完的想法是什麼,感覺滿硬的!
今天輕鬆的聊聊觀念和基礎知識,不然好像不知道我們做這些實做的用意在哪裡?
首先,我們把整個流程先說明一次,打通一下任督二脈!然後補充一些文章中沒提到的內容,幫大家補血之外也算是給我自己做的筆記。文章篇幅長,你可以先挑你有興趣的小節看一下就好!
這些對於一個駭客或是做滲透測試來說都是非常簡單或甚至可以說是基礎的能力,後面還會再講到「封包」的概念,因為這都是「你如何傳遞訊息給別人的過程,以及怎麼從別人傳遞給你訊息的拆解」,也就是所謂的「網路」。
Windows System for Linux(適用於 Windows 的子系統 Linux) 是一種輕量化的虛擬環境,更快、效率更高、相容性更強。
過去我們在 Windows 系統中如果要架設 Linux 環境需要依賴第三方的虛擬機器,像是:VirtualBox、VMware,這類虛擬機器是完整的模擬了「硬體設備」。
就像前面曾經說過在 Linux 的世界中所有東西都是一個「檔案」也就是說 GPU、顯示卡、記憶體、硬碟、主機板都是一個檔案,它當然很強大,但同時所需要的效能較高、消耗的資源也較多。
所以才會選擇使用 WSL 來架設我們的環境,尤其現在大家應該也都使用 Windows 10/11 以上的版本,而它們都是有支援 WSL,科技日新月異之下,我們當然也要跟著學最新技術囉!
當然,你如果真的對虛擬環境的需求很大,也建議你可以去學習 VirtualBox、VMware,只是我這邊不會提到!給大家打個預防針,避免你花太多時間在我的文章上哈哈。
我們曾經有提到電腦硬體設備包括:GPU、顯示卡、記憶體、硬碟、主機板,還有最重要的「網路介面卡」。電腦到底是怎麼透過「網路」讓你能從台北傳訊息到高雄,甚至傳送到美國的朋友呢?最簡單理解的方式就是:
發送:你的電腦 → 網路線 → 家裡的數據機 → 電線杆 → 中華電信基地台 → 海底電纜
接收:海底電纜 → 美國某電信的基地台 → 電線杆 → 他家的數據機 → 網路線 → 他的電腦
而這個過程僅花費 120 ~ 280 毫秒,幾乎在一秒之內瞬間完成,你的朋友和你聊天都是秒讀秒回,根本感覺不到。有沒有突然覺得跨國傳訊息還這麼快很神奇阿!
那在電腦環境裡面又怎麼看這些訊息傳輸經過哪裡呢?OSI 七層架構中有提到:
22
給 SSH、80
給 HTTP、443
給 HTTPS。我自己以前做全端工程師的時候架設網站就很常用到 80
和 443
,以及 PostgreSQL 資料庫的 5432
。ssh ray@192.168.1.xxx
,幫你維持這個連線狀態。ssh
、scp
指令。網路上的訊息不是「整塊」送出去的,而是被切成一小塊一小塊的封包 (Packet)。
每個封包都像一個包裹,外面有標籤(來源 IP、目的 IP、Port…),裡面才是資料(文字、圖片、影片片段…)。在傳送過程中,TCP 封包會帶有一些控制旗標 (Flags),讓電腦知道「這個封包要怎麼處理」,例如:
縮寫 | 全名 | 中文 | 功能說明 |
---|---|---|---|
URG | Urgent Pointer | 緊急指針 | 不等待前面封包,優先處理。 |
ACK | Acknowledgement | 確認 | 告訴對方「我收到封包了」,標示為 1(預設 0)。 |
PSH | Push | 推送 | 要求資料立即交給應用程式處理(不用等緩衝區排隊)。 |
RST | Reset | 復位 | 中斷連線,如果封包異常或無回應就拒絕。 |
SYN | Synchronisation | 同步 | 建立連線時使用(常見於三向交握)。 |
FIN | Finish | 完成 | 用於結束連線,表示資料傳輸完畢。 |
連接阜就很像你家的信箱,郵差寄信到你家的時候不是直接塞進你家門,而是放在「信箱」暫存,等你有空的時候再去拿出來,所以它只是一個「接口」。而常用的連接阜有:
Port | 協定 / 服務 | 說明 |
---|---|---|
20 / 21 | FTP | 檔案傳輸協定(20 資料傳輸,21 控制) |
22 | SSH / SFTP | 遠端登入、安全檔案傳輸 |
23 | Telnet | 遠端登入(明文傳輸,不安全,幾乎淘汰) |
25 | SMTP | 電子郵件傳送(伺服器之間轉寄郵件) |
53 | DNS | 網域名稱解析服務 |
80 | HTTP | 網頁服務(未加密) |
143 | IMAP | 郵件接收協定(比 POP3 更進階) |
443 | HTTPS | 網頁服務(加密,最常用) |
3306 | MySQL | MySQL 資料庫 |
5432 | PostgreSQL | PostgreSQL 資料庫 |
8080 | HTTP | 常見的 HTTP 替代 port(測試環境常用) |
實際上很多 Port 已被標準協定佔用,0 ~ 1023
是「well-known ports」。
至於子網路遮照應該有學過「網路與通訊」課程的大學生們應該有些印象,簡單來說就很像社區巷子裡面從 1 號一直到 256 號住戶一樣,郵差可以快速的辨識包裹是誰家的?要把包裹丟到哪個信箱裡面?
前兩天的實做中我們很常用到的 IPv4 你可以觀察一下,它的結構是不是「四組三位數」構成的呢?例如:192.168.1.10
、172.37.32.120
。
事實上在「計算機概論」裡面就有提到說:電腦的基礎運算單位是二進制(bit),以 0 和 1 表示。8 個 bit 組成 1 個 byte(位元組),而 IPv4 位址就是由 32 bits(4 個 bytes) 構成。你可以參考這篇文章瞭解數字轉換系統。
以及 「bit」、「byte」、「kilobyte」、「megabyte」位元組,儲存容量單位的關係,可以參考這篇文章。
那 IPv4 使用的是 32 位元(bits),由四個 8-bit 組成,也就是我們常見的四組十進制數字,例如:192.168.1.10
。每組的範圍是 0~255
,所以 IPv4 總共有 2^32 ≈ 4,294,967,296
(大約 42 億)個可能的位址。
子網路遮罩則是用來切割「網路位址」和「主機位址」,以 255.255.255.0
為例:
二進制 = 11111111.11111111.11111111.00000000
# 前 24 個 1 → 表示 網路位址 部分
# 後 8 個 0 → 表示 主機位址 部分
常見的範例有:
子網路遮罩 | CIDR | 可用主機數 | 範例 |
---|---|---|---|
255.0.0.0 | /8 | 16,777,214 | 10.0.0.0 – 10.255.255.255 |
255.255.0.0 | /16 | 65,534 | 172.16.0.0 – 172.16.255.255 |
255.255.255.0 | /24 | 254 | 192.168.1.0 – 192.168.1.255 |
255.255.255.240 | /28 | 14 | 192.168.1.0 – 192.168.1.15 |
255.255.255.255 | /32 | 1 | 192.168.1.10 單一主機 |
所以像 192.168.1.10/24
,後面的 /24
代表「網路位址佔 24 bits,主機位址佔 8 bits」。最多支援 2^8 - 2 = 254
台主機,因為要扣掉「第一個網路位址」和「最後一個廣播位址。
簡單計算一下,一台電腦有 65536
個 port,乘上大約 42 億個 IPv4 位址,那就會有65536 × 4,200,000,000 ≈ 275,251,200,000,000
約 275 兆 個潛在的服務組合。(當然現實世界並不會真的開這麼多服務啦哈哈哈)。
這邊說實在真的太硬核了,牽涉到數學問題。
簡單來說我們 GPG 使用的「非對稱式加密」運用了像 RSA 加密演算法、DSA 數位簽章演算法,邏輯就是我們前面提到的每個人自行產生公鑰、私鑰,然後用這些鑰匙互相加解密的過程。
公鑰就像你的鎖頭,任何人都能用它鎖上信件;私鑰就像你的鑰匙,只有你能打開。
還記得我們在設定 GPG 的時候讓大家前面三題都選擇預設就好嗎?
我們選擇的是 ECC 橢圓曲線密碼學,現今流行的加密貨幣也是使用這種密碼學來做為基礎,甚至還摻雜一些 Hash 雜湊函演算法。
產生的過程非常快,也非常方便,畢竟有很多 function 可以使用,但壞處就是逆向解密的時候就非常困難,即使是超級電腦,也需要極長的時間(可能數百年甚至數千年)才能暴力破解。但它的優勢是密碼長度比 RSA 還短,但是安全性跟 RSA 一樣。
每次要 scp
檔案給對方的時候都不知道前面 username
要填入什麼?沒關係,這是新手最常卡住的地方,但其實很簡單!只要在 Terminal 下 whoami
就會跳出來囉!
以我的 Windows Terminal 來說,我的使用者名稱就是 ray
,那你傳送檔案的時候就用 scp <filename> ray@192.168.1.xxx:/<directory>
就可以囉!
名稱 | 平台 | 特性 |
---|---|---|
cmd | Windows | 老 DOS 風格,輕便簡易 |
PowerShell | Windows | 物件導向、強大 |
Terminal | Windows/Linux/macOS | 視窗介面,裡面可以跑不同 Shell (bash, zsh, pwsh) |
在 Linux 裡面常見的 Shell 是 bash
、zsh
,而在 MacOS 常見的是 zsh
,應該有自己摸索過大概就會知道這個概念。
我們在 Windows 和 Kali Linux 之間傳檔案的時候,常常會遇到一個問題:
明明我可以 ping
到對方,卻沒辦法 ssh
或 scp
進去。這時候最常見的原因就是「防火牆擋住了」。
防火牆就像是你家社區的大門警衛,會檢查「誰能進來、誰不能進來」。
雖然 Windows 和 WSL(Kali Linux)都在同一台電腦上,但它們之間的連線走的是 虛擬網卡 (vEthernet),對 Windows 來說,這就像是一台「外部電腦」要進來,所以它還是會套用防火牆規則。
當我們在 Windows 開啟 OpenSSH Server 的時候,系統會自動幫你加一條防火牆規則,不過預設只允許 Private 網路。
這就導致 WSL 這種虛擬網卡被當成「外部網路」,連線請求自然就被丟掉了。
解法就是:手動新增一條防火牆規則,允許 TCP port 22
在 Any Profile
下都能通過。
這樣 WSL 才能順利透過 SSH 連到 Windows,達成雙系統的互通。
所以防火牆並不是壞東西,它的存在就是為了保護你的系統不被亂連。只是我們在做實驗時,必須調整規則,讓自己的虛擬環境能互相溝通哦!
不知道學資工和資管的同學們有沒有回想起大學時候學的東西呢?感覺很熟悉,但是好像都沒用到,其實這些都是在幫你未來打基礎喔!
我會嘗試去介紹 Nmap、WireShark 這兩個工具,讓你慢慢地學會「什麼是滲透測試」,今天就是先把使用這兩個工具的基礎觀念先釐清!希望對你有幫助~