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 章!"
內容解密:
#! /bin/bash:告訴系統使用 Bash 直譯器來執行這個指令碼。# ...:這些是註解,用來描述指令碼的功能。echo "請問你的名字是什麼?":輸出提示訊息。read name:從標準輸入讀取使用者的輸入並儲存到變數name中。echo "請問你目前正在閱讀《Linux基礎與駭客技術》第幾章?":再次輸出提示訊息。read chapter:從標準輸入讀取使用者的輸入並儲存到變數chapter中。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
內容解密:
#! /bin/bash:告訴系統使用 Bash 直譯器來執行這個指令碼。# ...:註解部分描述了這個指令碼的功能。target_ip="192.168.1.1":設定一個變數target_ip,儲存目標 IP 地址。echo "開始掃描目標 IP: $target_ip":顯示開始掃描目標 IP 的訊息。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
變數與提示的使用
在這個指令碼中,我們使用了三個變數:FirstIP、LastOctetIP 和 port。這些變數分別用來儲存起始 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//
這個範例顯示了指令碼如何根據使用者的輸入進行掃描並傳回結果。
