Bash Shell 指令碼是 Linux 系統管理和自動化任務的重要工具。初學者可以從簡單的輸出訊息指令碼開始,逐步學習 Shell 的基礎語法和執行方式。瞭解如何賦予指令碼執行許可權以及使用 ./ 執行指令碼是入門的關鍵。接著,可以透過變數和使用者輸入讓指令碼更具互動性,例如取得使用者名稱和章節號等資訊。進一步,結合 Nmap 等工具,可以編寫更實用的指令碼,例如進行埠掃描。透過掃描目標主機的開放埠,可以瞭解其執行的服務,這對於安全評估和測試至關重要。文章中以掃描 MySQL 資料函式庫埠為例,展示瞭如何編寫一個簡單的埠掃描指令碼,並逐步改進其功能,使其更具彈性和實用性。最終,讀者可以瞭解如何編寫一個可以接受使用者輸入 IP 範圍和埠號的進階掃描器,並將其應用於實際的網路環境中。

使用 Bash 讓你的第一個 Shell 指令碼動起來

玄貓認為,在學習 Linux 基礎知識的過程中,撰寫 Shell 指令碼是一個非常實用且有意思的步驟。這不僅能幫助你更深入瞭解命令列操作,還能讓你在日後進行自動化任務時得心應手。接下來,玄貓將帶領你完成第一個簡單的 Shell 指令碼,並逐步新增功能。

基本指令碼撰寫

首先,玄貓會指導你如何撰寫一個最簡單的 Shell 指令碼。這個指令碼只會輸出一條訊息「Hello, HackersArise!」。接著,玄貓會解釋如何給予指令碼執行許可權並執行它。

基本指令碼範例

#!/bin/bash
echo "Hello, HackersArise!"

內容解密:

這段程式碼是一個最基本的 Bash 指令碼。第一行 #!/bin/bash 是一個「剪頭」(shebang),告訴系統這個指令碼應該使用哪個直譯器來執行。這裡使用的是 Bash。接著 echo "Hello, HackersArise!" 命令會將「Hello, HackersArise!」這段文字輸出到終端機。

新增執行許可權

要讓這個指令碼能夠執行,我們需要先給予它執行許可權。這可以透過 chmod 命令來完成。

chmod 755 HelloHackersArise

內容解密:

chmod 755 HelloHackersArise 命令將 HelloHackersArise 檔案的許可權設定為所有者有讀、寫和執行許可權,而群組和其他使用者僅有讀和執行許可權。

執行指令碼

現在我們可以執行這個指令碼了。要在當前目錄中執行一個指令碼,我們需要在指令碼名稱前加上 ./

./HelloHackersArise

內容解密:

./HelloHackersArise 命令告訴系統要在當前目錄中執行名為 HelloHackersArise 的檔案。這樣可以避免與其他目錄中的同名檔案產生混淆。

新增變數和使用者輸入

接下來,我們來增加一些功能。我們會讓這個指令碼能夠提示使用者輸入名字和章節號,並將這些輸入儲存在變數中。

較複雜的指令碼範例

#!/bin/bash
# 這是你的第二個 bash 指令碼。在這個指令碼中,你會提示使用者輸入資訊,將輸入儲存在變數中,並顯示變數內容。
echo "請問你的名字是什麼?"
read name
echo "請問你目前正在閱讀《Linux基礎與駭客技術》第幾章?"
read chapter
echo "歡迎 $name 到《Linux基礎與駭客技術》第 $chapter 章!"

內容解密:

  1. #! /bin/bash:告訴系統使用 Bash 直譯器來執行這個指令碼。
  2. # ...:這些是註解,用來描述指令碼的功能。
  3. echo "請問你的名字是什麼?":輸出提示訊息。
  4. read name:從標準輸入讀取使用者的輸入並儲存到變數 name 中。
  5. echo "請問你目前正在閱讀《Linux基礎與駭客技術》第幾章?":再次輸出提示訊息。
  6. read chapter:從標準輸入讀取使用者的輸入並儲存到變數 chapter 中。
  7. echo "歡迎 $name 到《Linux基礎與駭客技術》第 $chapter 章!":使用 echo 命令顯示歡迎訊息,其中包含了使用者輸入的名字和章節號。

執行複雜版指令碼

儲存這個新的指令碼為 WelcomeScript.sh ,然後像之前一樣給予它執行許可權並執行:

chmod 755 WelcomeScript.sh
./WelcomeScript.sh

實務應用:掃描開放埠

現在我們已經掌握了基本的 Shell 指令碼撰寫技巧,接下來玄貓會介紹如何應用這些技巧進行一些更實際且有用的任務。例如掃描開放埠。

玄貓認為這是一個非常實用且有趣的主題。掃描開放埠可以幫助我們瞭解目標系統上哪些服務正在運作,進而進行進一步的安全評估或測試。

掃描開放埠範例

#!/bin/bash
# 這是一個簡單的 Nmap 掃描指令碼,用於掃描目標主機上的開放埠。
# target_ip 是你要掃描的目標 IP 地址。
target_ip="192.168.1.1"
echo "開始掃描目標 IP: $target_ip"
nmap -sS $target_ip

內容解密:

  1. #! /bin/bash:告訴系統使用 Bash 直譯器來執行這個指令碼。
  2. # ...:註解部分描述了這個指令碼的功能。
  3. target_ip="192.168.1.1":設定一個變數 target_ip ,儲存目標 IP 地址。
  4. echo "開始掃描目標 IP: $target_ip":顯示開始掃描目標 IP 的訊息。
  5. nmap -sS $target_ip:使用 Nmap 工具進行 SYN 掃描(半開放掃描),檢視目標主機上開放的埠。

執行 Nmap 指令碼

儲存這個指令碼為 scan_ports.sh ,然後給予它執行許可權並執行:

chmod 755 scan_ports.sh
./scan_ports.sh

透過以上步驟,玄貓希望你能夠對 Shell 指令碼有更深入的瞭解並學會如何將其應用到實際操作中。接下來,玄貓還會帶領你探索更多高階主題和實戰技巧。

Nmap 工具深入解析與實戰應用

在資安及系統管理領域中,Nmap 是一個非常強大的網路掃描工具。透過 Nmap,玄貓可以輕鬆地發現目標系統上執行的服務,這對於任何駭客或系統管理員來說都是一項至關重要的技能。

Nmap 基本語法及 TCP 掃描

Nmap 的基本語法非常簡單:

nmap <掃描型別> <目標 IP> <選擇性:目標埠>

其中最簡單且可靠的 Nmap 掃描方式是 TCP Connect 掃描,使用 -sT 開關。例如,若要掃描 IP 地址 192.168.181.1 進行 TCP 掃描,可以使用以下命令:

nmap -sT 192.168.181.1

若要進一步指定掃描特定埠(例如 MySQL 的預設埠 3306),可以使用 -p 開關:

nmap -sT 192.168.181.1 -p 3306

此命令會檢查 IP 地址 192.168.181.1 上的 3306 埠是否開放。

駭客案例:Max Butler 與 MySQL 洞察

Max Butler(亦稱為 Max Vision),是一名著名的灰帽駭客。白天他是矽谷的 IT 安全專業人士,晚上則在黑市上窮盡心力地盜取並出售信用卡號碼。他在某次發現 Aloha Point of Sale(POS)系統存在技術支援後門,透過埠 5505 進入系統並盜取了大量信用卡號碼。

玄貓要完成的任務是撰寫一個類別似 Max Butler 的指令碼,但這次我們將掃描 MySQL 資料函式庫。MySQL 是一種廣泛使用的開源資料函式庫系統,預設埠為 3306。資料函式庫內通常包含大量敏感資訊,如信用卡號碼和個人識別資訊(PII),這對於駭客來說是極具價值的目標。

建立簡單的掃描指令碼

首先,我們要建立一個簡單的指令碼來掃描本地網路內是否有 MySQL 資料函式庫在執行。這樣可以確保我們的指令碼能夠正常運作。以下是指令碼範例:

#!/bin/bash
# 本指令碼設計用來查詢 MySQL 安裝的主機
nmap -sT 192.168.181.0/24 -p 3306 >/dev/null -oG MySQLscan
cat MySQLscan | grep open > MySQLscan2
cat MySQLscan2

內容解密:

  • #!/bin/bash:這行稱為「Shebang」,告訴系統該指令碼應該使用 Bash 命令直譯器執行。
  • nmap -sT 192.168.181.0/24 -p 3306 >/dev/null -oG MySQLscan:這行命令執行 TCP 掃描(-sT)於 IP 範圍 192.168.181.0/24 上查詢開放的埠 3306(MySQL 預設埠)。結果會被重定向到 /dev/null(即丟棄掉),同時儲存到可供 grep 搜尋的格式中並命名為 MySQLscan
  • cat MySQLscan | grep open > MySQLscan2:這行命令顯示 MySQLscan 中包含「open」關鍵字的行,並將結果儲存到 MySQLscan2 中。
  • cat MySQLscan2:最後一行命令顯示 MySQLscan2 的內容,只包含有開放埠 3306 的主機資訊。

儲存此指令碼為 MySQLscanner.sh,並賦予執行許可權:

chmod 755 MySQLscanner.sh

然後執行指令碼:

./MySQLscanner.sh

預期結果會顯示本地網路中開放了 3306 埠且執行 MySQL 的主機。

改進 MySQL 掃描器

接下來我們要改進此指令碼使其能夠應用於更大範圍。我們希望它能提示使用者輸入要掃描的 IP 範圍及埠號碼,從而提高其靈活性與效率。

#!/bin/bash
# 本指令碼設計用來查詢指定範圍內具有指定埠開放的主機

# 提示使用者輸入 IP 範圍及埠號碼
read -p "請輸入 IP 範圍(例如:192.168.181.0/24):" ip_range
read -p "請輸入要掃描的埠(例如:3306):" port

# 執行 nmap 掃描並將結果儲存至檔案中
nmap -sT $ip_range -p $port >/dev/null -oG MySQLscan

# 提取具有開放埠的主機資訊並顯示結果
cat MySQLscan | grep open > MySQLscan2
cat MySQLscan2

內容解密:

  • read -p "請輸入 IP 範圍(例如:192.168.181.0/24):" ip_range:這行命令提示使用者輸入要掃描的 IP 範圍。
  • read -p "請輸入要掃描的埠(例如:3306):" port:這行命令提示使用者輸入要掃描的埠號碼。
  • nmap -sT $ip_range -p $port >/dev/null -oG MySQLscan:利用之前提供的 IP 範圍與埠號碼進行 TCP 掃描,將結果儲存到檔案中。
  • cat MySQLscan | grep open > MySQLscan2:從檔案中提取具有開放埠的主機資訊。
  • cat MySQLscan2:顯示包含開放埠資訊的主機清單。

測試與驗證

在實際環境中測試此改進後的指令碼非常重要。可以嘗試在不同網路環境下執行它,確保其能夠正確識別目標系統上的開放埠。

未來改進與趨勢分析

未來可以考慮在指令碼中加入更多功能,例如錯誤處理、日誌記錄等。此外,隨著網路安全技術的不斷發展,可能需要定期更新並增強掃描工具以應對新型攻擊手法。

進階 MySQL 掃描器指令碼

在這篇文章中,玄貓將帶領讀者深入瞭解如何在 Bash 指令碼中新增提示(prompts)和變數(variables),並以一個進階的 MySQL 掃描器為例進行說明。這個指令碼不僅能夠掃描指定的 IP 範圍,還能夠根據使用者的輸入自動化地變更掃描範圍和埠號碼。

指令碼基礎架構

首先,讓我們來看一下這個進階 MySQL 掃描器的指令碼結構。以下是完整的指令碼:

#! /bin/bash
echo "請輸入起始 IP 地址:"
read FirstIP
echo "請輸入最後一位 IP 地址:"
read LastOctetIP
echo "請輸入要掃描的埠號:"
read port
nmap -sT $FirstIP.$LastOctetIP -p $port > /dev/null -oG MySQLscan
cat MySQLscan | grep open > MySQLscan2
cat MySQLscan2

變數與提示的使用

在這個指令碼中,我們使用了三個變數:FirstIPLastOctetIPport。這些變數分別用來儲存起始 IP 地址、最後一位 IP 地址和要掃描的埠號。以下是每一步的詳細說明:

提示使用者輸入起始 IP 地址

echo "請輸入起始 IP 地址:"
read FirstIP

這兩行指令碼會先顯示一個提示訊息,要求使用者輸入起始 IP 地址。然後使用 read 命令將使用者輸入的值儲存到 FirstIP 變數中。

提示使用者輸入最後一位 IP 地址

echo "請輸入最後一位 IP 地址:"
read LastOctetIP

同樣地,這兩行指令碼會顯示提示訊息並要求使用者輸入最後一位 IP 地址,然後將值儲存到 LastOctetIP 變數中。

提示使用者輸入要掃描的埠號

echo "請輸入要掃描的埠號:"
read port

這兩行指令碼會顯示提示訊息並要求使用者輸入要掃描的埠號,然後將值儲存到 port 變數中。

nmap 命令的使用

接下來,我們需要編輯 nmap 命令來使用剛剛建立和填充的變數。以下是相關部分:

nmap -sT $FirstIP.$LastOctetIP -p $port > /dev/null -oG MySQLscan

這行指令碼會使用 nmap 命令掃描從起始 IP 地址到最後一位 IP 地址之間的所有 IP 地址,並檢查指定的埠號是否開放。掃描結果會被重定向到 /dev/null,這意味著結果不會顯示在螢幕上。同時,結果也會以可供 grep 命令處理的格式儲存在 MySQLscan 檔案中。

整理掃描結果

接下來兩行指令碼用於過濾和顯示掃描結果:

cat MySQLscan | grep open > MySQLscan2
cat MySQLscan2

第一行會將 MySQLscan 檔案中的內容傳遞給 grep 命令,過濾出包含關鍵字 open 的行並儲存在 MySQLscan2 檔案中。第二行則直接顯示 MySQLscan2 檔案中的內容。

指令碼執行範例

以下是指令碼執行時的一個範例:

kali> ./MySQLscannerAdvanced.sh
請輸入起始 IP 地址:
192.168.181.0
請輸入最後一位 IP 地址:
192.168.181.255
請輸入要掃描的埠號:
3306
Host: 192.168.181.254 () Ports: 3306/open/tcp//mysql//

這個範例顯示了指令碼如何根據使用者的輸入進行掃描並傳回結果。