最新動(dòng)態(tài)

黑客最偏愛的腳本之一BASH(初級(jí))

2025-05-14

面向黑客的 Linux,第 7 部分:BASH 腳本入門

我認(rèn)為黑客和 Linux 管理員都必須掌握編寫腳本的能力。隨著 Windows PowerShell 的引入,越來越多的 Windows 管理員也需要使用腳本來執(zhí)行自動(dòng)化任務(wù)并提升效率。我們經(jīng)常需要自動(dòng)化使用多個(gè)命令,有時(shí)還涉及多種工具。為了成為一名合格的黑客,您不僅需要精通高級(jí) shell 腳本編寫技巧,還需要掌握至少一種廣泛應(yīng)用的腳本語言,如 Ruby (Metasploit 漏洞利用就是用 Ruby 編寫的)、Python(很多黑客工具都是 Python 腳本)或 Perl(Perl 是最優(yōu)秀的文本操作腳本語言)。

我們將從基礎(chǔ)的 shell 腳本開始,逐步過渡到高級(jí) shell 腳本,然后再深入學(xué)習(xí)這些腳本語言,最終目標(biāo)是開發(fā)出適合自己的工具。

第 1 步:了解各種 shell 類型

shell 是用戶和操作系統(tǒng)之間的接口。這使我們能夠運(yùn)行命令、實(shí)用程序、程序、操作文件等。Linux 提供了許多不同類型的 shell,包括 Korn shell、Z shell、C shell 和 Bourne again shell(或 BASH)。

由于幾乎所有的 Linux 和 UNIX 發(fā)行版(包括 Mac OS X 和 Kali)都支持 BASH shell,因此我們將在此處重點(diǎn)使用 BASH shell。

第 2 步:BASH 腳本的基礎(chǔ)知識(shí)

要?jiǎng)?chuàng)建一個(gè) shell 腳本,我們首先要選擇一個(gè)文本編輯器。Linux 中有很多文本編輯器可供選擇,如 vi、vim、emacs、gedit、kate 等,但我將在這套教程中使用 Leafpad。

第 3 步:BASH 內(nèi)置命令

除了可以運(yùn)行任何系統(tǒng)命令和應(yīng)用程序外,BASH shell 還包含了一些內(nèi)置命令。這些命令包括:

:, ., break, cd, continue, eval, exec, exit, export, getopts, hash, pwd,

readonly, return, set, shift, test, [, times, trap, umaskunset, alias, bind, builtin, command, declare, echo, enable, help, let, local, logout, printf, read, shopt, type, typeset, ulimitunalias。

在后續(xù)教程中我們會(huì)詳細(xì)介紹這些命令。這些命令已經(jīng)內(nèi)置在 BASH shell 中。

第 4 步:添加注釋

就像任何編程一樣,我們可能希望添加注釋。注釋是用于對(duì)我們自己或任何閱讀代碼的人的說明,說明我們?cè)噲D通過腳本或腳本的某一部分實(shí)現(xiàn)什么。解釋器不會(huì)讀取或執(zhí)行這些注釋或“注釋”。

BASH shell 使用在一行前面加上“#”來啟用注釋。在我的第一個(gè)腳本中,我可以在我喜歡的文本編輯器中編寫:

#這是我的第一個(gè)腳本!

解釋器將忽略 “#” 后面的所有內(nèi)容,然后移至下一行。

第 5 步:“Hello,Hackers-Arise!”

我們將從一個(gè)簡(jiǎn)單的腳本開始,該腳本會(huì)在屏幕上顯示一條消息:“Hello,Hackers-Arise!”。

我們首先輸入 shebang 或“#!”。這告訴操作系統(tǒng),shebang 后面的任何內(nèi)容都是我們要用于腳本的解釋器。

然后我們?cè)?shebang 后面加上 /bin/bash,表示我們希望操作系統(tǒng)使用 BASH shell 解釋器。我們可以使用其他解釋器,如 PERL 或 Python,但這里我們要使用 BASH 解釋器。

#!/bin/bash

接下來,我們輸入 echo,這是 Linux 中的一個(gè)命令,它告訴系統(tǒng)簡(jiǎn)單地重復(fù)或“回顯”到我們的監(jiān)視器 (stdout) 后面的內(nèi)容。在這種情況下,我們希望系統(tǒng)向我們回顯“ Hello Hackers-Arise !”。請(qǐng)注意,我們要“回顯”的文本或消息是用雙引號(hào)括起來的。

echo "Hello,Hackers-Arise!"

我們將此文件保存為 HelloHackersArise 并退出文本編輯器。

第 6 步:設(shè)置執(zhí)行權(quán)限

當(dāng)我們創(chuàng)建一個(gè)文件時(shí),默認(rèn)情況下它并不是可執(zhí)行的。讓我們通過在目錄中輸入 ls -l 查看新文件的權(quán)限。

我們的新文件具有 rw-r--r-- (644) 權(quán)限。該文件的所有者只有讀 (r) 和寫 (w) 權(quán)限,但沒有執(zhí)行 (x) 權(quán)限。該組和所有人都只有讀取權(quán)限。我們需要修改它以賦予我們執(zhí)行權(quán)限才能運(yùn)行此腳本。我們使用 chmod 命令執(zhí)行此操作。要授予所有者、組和所有人的執(zhí)行權(quán)限,我們鍵入:

kali > chmod 755 HelloHackersArise

現(xiàn)在,當(dāng)我們對(duì)文件進(jìn)行長(zhǎng)列表(ls -l)時(shí),我們可以看到我們具有執(zhí)行權(quán)限。

kali > ls -l

第 7 步:運(yùn)行 HelloHackersArise

要運(yùn)行我們的簡(jiǎn)單腳本,我們只需鍵入:

kali > ./HelloHackersArise

文件名前的 ./ 告訴系統(tǒng)我們?cè)诋?dāng)前目錄中執(zhí)行這個(gè)腳本。這意味著系統(tǒng)不會(huì)查看該文件的 PATH 變量中的目錄,而是只查看我的當(dāng)前目錄,并運(yùn)行 HelloHackersArise。當(dāng)我們按下回車鍵時(shí),我們非常簡(jiǎn)單的腳本會(huì)返回到我們的屏幕。

第 8 步:使用變量

現(xiàn)在我們有了一個(gè)簡(jiǎn)單的腳本。它所做的只是回顯一條消息。如果我們想創(chuàng)建更高級(jí)的腳本,我們可能需要添加一些變量。

變量只是我們?cè)趦?nèi)存中保存某些內(nèi)容的存儲(chǔ)區(qū)域。這可能是字母或單詞(字符串)或數(shù)字。變量可以幫助我們?cè)谀_本中添加具有可變值的功能。

此演示腳本是為了掃描打開了 5505 端口的計(jì)算機(jī)。然后創(chuàng)建一個(gè)報(bào)告,其中包含打開此端口的所有 IP 地址。

如果我們想修改這個(gè)腳本,讓它提示我們或任何用戶輸入要掃描的 IP 地址范圍和要查找的端口,該怎么辦?如果只是提示我們輸入這些值,然后將它們輸入到腳本中,使用起來會(huì)不會(huì)更容易?

讓我們看看我們?nèi)绾巫龅竭@一點(diǎn)。

第 9 步:向我們的腳本添加提示和變量

首先,我們可以用 IP 范圍替換指定的子網(wǎng)。我們可以使用名為“FirstIP”的變量和名為“LastIP”的第二個(gè)變量來完成此操作(變量的名稱無關(guān)緊要,但最佳實(shí)踐是使用有助于記住它所包含內(nèi)容的變量名稱)。

接下來,我們可以將端口號(hào)替換為名為“port”的變量。這些變量將只是存儲(chǔ)區(qū)域,用于保存用戶在運(yùn)行掃描之前輸入的信息。

接下來,我們需要提示用戶輸入這些值。我們可以使用上面在編寫 HelloHackersArise 腳本時(shí)學(xué)到的 echo 命令來做到這一點(diǎn)。

因此,我們可以簡(jiǎn)單地回顯“輸入起始 IP 地址:”,這將出現(xiàn)在屏幕上,要求用戶在他們的掃描中輸入第一個(gè) IP 地址。

echo "輸入起始IP地址:"

現(xiàn)在,在屏幕上看到此提示的用戶將輸入第一個(gè) IP 地址。然后我們需要一種方法來捕獲用戶的輸入。我們可以通過在 echo 行后面加上 read 命令和變量名來做到這一點(diǎn)。read 命令獲取在鍵盤 (stdin) 上輸入的值并將其放入后面的變量中。

read FirstIP

上述命令會(huì)將用戶輸入的 IP 地址放入變量 FirstIP 中。然后我們可以在整個(gè)腳本中使用 FirstIP 中的該值。

當(dāng)然,我們可以對(duì)每個(gè)變量做同樣的事情,首先提示用戶輸入信息,然后使用 read 命令來捕獲它。

接下來,我們只需要在腳本中編輯 nmap 命令以使用我們剛剛創(chuàng)建和填充的變量。當(dāng)我們想要將值存儲(chǔ)在變量中時(shí),我們可以簡(jiǎn)單地在變量名稱前加上 $,例如 $port。因此,要使用 nmap 掃描從第一個(gè)用戶輸入 IP 到第二個(gè)用戶輸入 IP 的 IP 地址范圍并查找用戶輸入的端口,我們可以像這樣重寫 nmap 命令:

nmap -sT $FirstIP-$LastIP -p $port

現(xiàn)在,在編寫腳本時(shí),它將掃描從 FirstIP 開始并以 LastIP 結(jié)束的 IP 地址范圍,以查找用戶輸入的端口?,F(xiàn)在讓我們保存我們的腳本文件并將其命名為 Scannerscript。

第 10 步:使用用戶輸入變量運(yùn)行它

現(xiàn)在我們可以運(yùn)行簡(jiǎn)單的掃描程序腳本,其中的變量告訴腳本要掃描的 IP 地址范圍和端口,而無需編輯腳本。

kali > ./Scannerscript

它會(huì)提示我們輸入第一個(gè) IP 地址,然后是最后一個(gè) IP 地址和我們要掃描的端口。收集這些信息后,它會(huì)進(jìn)行 nmap 掃描并生成一份報(bào)告,其中包含我們指定的開放端口范圍內(nèi)的所有 IP 地址。