Kali Linux Web 滲透測試秘籍 第二章 偵查

來源:互聯網
上載者:User

標籤:

第二章 偵查

Gilberto Najera-Gutierrez

譯者:飛龍

協議:CC BY-NC-SA 4.0

簡介

在每個滲透測試中,無論對於網路還是 Web 應用程式,都有一套流程。其中需要完成一些步驟,來增加我們發現和利用每個影響我們目標的可能的漏洞的機會。例如:

  • 偵查

  • 枚舉

  • 利用

  • 維持訪問

  • 清理蹤跡

在 Web測試情境中,偵查是一個層面,其中測試者必須識別網路、防火牆和入侵偵測系統中所有可能組件。它們也會收集關於公司、網路和僱員的最大資訊。在我們的例子中,對於 Web 應用程式滲透測試,這個階段主要關於瞭解應用、資料庫、使用者、伺服器以及應用和我們之間的關係。

偵查是每個滲透測試中的必要階段。我們得到了的目標資訊越多,發現和利用漏洞時,我們擁有的選項就越多。

2.1 使用 Nmap 掃描和識別服務

Nmap 可能是世界上最廣泛使用的連接埠掃描器。他可以用於識別活動主機、掃描 TCP 和 UDP 開放連接埠,檢測防火牆,獲得運行在遠程主機上的服務版本,甚至是,可以使用指令碼來發現和利用漏洞。

這個秘籍中,我們會使用 Nmap 來識別運行在目標應用上的所有服務。出於教學目的,我們會多次調用 Nmap 來實現它,但是這可以通過單個命令來完成。

準備

我們只需要將 vulnerable_vm 運行起來。

操作步驟
  1. 首先,我們打算看看伺服器是否響應 ping,或者伺服器是否開啟:

    nmap -sn 192.168.56.102

  2. 現在我們直到它開啟了讓我們看看開啟了哪些連接埠:

    nmap 192.168.56.102

  3. 現在,我們要讓 Nmap 向伺服器詢問正在啟動並執行服務的版本,並且基於它猜測作業系統。

    nmap -sV -O 192.168.56.10
  4. 我們可以看到,我們的 vulnerable_vm 使用 Linux 2.6 核心,並帶有 Apache 2.2.14 Web 服務器,PHP 5.3.2,以及其它。

工作原理

Nmap 是個連接埠掃描器,這意味著它可以向一些指定 IP 的 TCP 或 UDP 連接埠發送封包,並檢查是否有響應。如果有的話,這意味著連接埠是開啟的,因此,連接埠上運行著服務。

在第一個名中,使用-sn參數,我們讓 Nmap 只檢查是否伺服器響應 ICMP 請求(或 ping)。我們的伺服器響應了,所以它是活動的。

第二個命令是調用 Nmap 的最簡方式,它只指定目標 IP。所做的事情是先 ping 伺服器,如果它響應了,Nmap 會向 1000 個 TCP 通訊埠列表發送探針,來觀察哪個連接埠響應,之後報告響應連接埠的結果。

第三個命令向第二個添加了如下兩個任務:

  • -sV請求每個被發現的開放連接埠的 banner(頭部或者自我識別),這是它用作版本的東西。

  • -O告訴 Nmap,嘗試猜測運行在目標上的作業系統。使用開放連接埠和版本收集的資訊。

更多

有一些其它的實用參數:

  • -sT:通常,在 root 使用者下運行 Nmap 時,它使用 SYN 掃描類型。使用這個參數,我們就強制讓掃描器執行完全串連的掃描。它更慢,並且會在伺服器的日誌中留下記錄,但是它不太可能被入侵偵測系統檢測到。

  • -Pn:如果我們已經知道了主機是活動的或者不響應 ping,我們可以使用這個參數告訴 Nmap 跳過 ping 測試,並掃描所有指定目標,假設它們是開啟的。

  • -v:這會開啟詳細模式。Nmap 會展示更多關於它所做事情和得到回複的資訊。參數可以在相同命令中重複多次:次數越多,就越詳細(也就是說,-vv-v -v -v -v)。

  • -p N1,N2,Nn:如果我們打算測試特定連接埠或一些非標準連接埠,我們可能想這個參數。N1Nn是打算讓 Nmap 掃描的連接埠。例如,要掃描連接埠 21,80 到 90,和 137,參數應為:-p 21,80-90,137

  • --script=script_name:Nmap 包含很多實用的漏洞檢測、掃描和識別、登入測試、命令執行、使用者枚舉以及其它指令碼。使用這個參數來告訴 Nmap 在目標的開放連接埠上運行指令碼。你可能打算查看一些 Nmap 指令碼,它們在:https://nmap.org/nsedoc/scripts/

另見

雖然它最為流行,但是 Nmap 不是唯一可用的連接埠掃描器,並且,取決於不同的喜好,可能也不是最好的。下面是 Kali 中包含的一些其它的替代品:

  • unicornscan
  • hping3
  • masscan
  • amap
  • Metasploit scanning module
2.2 識別 Web Application Firewall

Web Application Firewall(WAF)是一個裝置或軟體,它可以檢查發送到 Web 服務器的封包,以便識別和阻止可能的惡意封包,它們通常基於簽名或Regex。

如果未檢測到的 WAF 阻止了我們的請求或者封鎖了我們的 IP,我們滲透測試中就要處理很多的麻煩。在執行滲透測試的時候,偵查層面必須包含檢測和是被 WAF,入侵偵測系統(IDS),或者入侵阻止系統(IPS)。這是必須的,為了採取必要的手段來防止被阻攔或禁止。

這個秘籍中,我們會使用不同的方法,並配合 Kali Linux 中的工具,阿里為檢測和識別目標和我們之間的 Web Application Firewall的存在。

操作步驟
  1. Nmap 包含了一些指令碼,用於測試 WAF 的存在。讓我們在 vulnerable-vm 上嘗試它們:

    nmap -p 80,443 --script=http-waf-detect 192.168.56.102

    好的,沒檢測到任何 WAF。所以這個伺服器上沒有 WAF。

  2. 現在,讓我們在真正擁有防火牆的伺服器上嘗試相同命令。這裡,我們會使用example.com,但是你可以在任何受保護的伺服器上嘗試它。

    nmap -p 80,443 --script=http-waf-detect www.example.com

    Imperva 是 Web Application Firewall市場的主流品牌之一。就像我們這裡看到的,有一個保護網站的裝置。

  3. 這裡是另一個 Nmap 指令碼,可以協助我們識別所使用的裝置,並更加精確。指令碼在下面:

    nmap -p 80,443 --script=http-waf-fingerprint www.example.com

  4. 另一個 Kali Linux 內建的工具可以協助我們檢測和是被 WAF,它叫做waf00f。假設www.example.com是受 WAF 保護的網站:

    wafw00f www.example.com

工作原理

WAF 檢測的原理是通過發送特定請求到伺服器,之後分析響應。例如,在http-waf-detect的例子中,它發送了一些基本的惡意封包,並對比響應,同時尋找封包被阻攔、拒絕或檢測到的標識。http-waf-fingerprint也一樣,但是這個指令碼也嘗試攔截響應,並根據已知的不同 IDS 和 WAF 的模式對其分類。wafw00f也是這樣。

2.3 查看原始碼

查看網頁的原始碼允許我們理解一些程式的邏輯,檢測明顯的漏洞,以及在測試時有所參考,因為我們能夠在測試之前和之後比較代碼,並且使用比較結果來修改我們的下一次嘗試。

這個秘籍中,我們會查看應用的原始碼,並從中得出一些結論。

準備

為這個秘籍啟動 vulnerable_vm。

操作步驟
  1. 瀏覽 http://192.168.56.102。

  2. 選擇 WackoPicko 應用。

  3. 右擊頁面並選擇View Page Source(查看原始碼)。會開啟帶有頁面原始碼的新視窗:

    根據原始碼,我們可以發現頁面所使用的庫或外部檔案,以及連結的去向。同時,在中可以看到,這個頁面擁有一些隱藏的輸入欄位。選中的是MAX_FILE_SIZE,這意味著,當我們上傳檔案時,這個欄位判斷了檔案允許上傳的最大大小。所以,如果我們修改了這個值,我們可能就能夠上傳大於應用所預期的檔案。這反映了一個重要的安全問題。

工作原理

網頁的原始碼在發現漏洞和分析應用對所提供輸入的響應上非常有用。它也提供給我們關於應用內部如何工作,以及它是否使用了任何第三方庫或架構的資訊。

一些應用也包含使用 JS 或任何其它指令碼語言編寫的輸入校正、編碼和加密函數。由於這些代碼在瀏覽器中執行,我們能夠通過查看頁面原始碼來分析它,一旦我們看到了校正函數,我們就可以研究它並找到任何能夠讓我們繞過它或修改結果的安全缺陷。

4.4 使用 Firefox 分析和修改基本行為

Firebug 是個瀏覽器外掛程式,允許我們分析網頁的內部組件,例如表格元素、層疊樣式表(CSS)類、架構以及其它。它也有展示 DOM 對象、錯誤碼和瀏覽器伺服器之間的請求響應通訊的功能。

在上一個秘籍中,我們看到了如何查看網頁的 HTML 原始碼以及發現影藏的輸入欄位。隱藏的欄位為檔案最大大小設定了一些預設值。在這個秘籍中,我們會看到如何使用瀏覽器的調試擴充,這裡是 Firefox 或者 OWASP-Mantra 上的 Firebug。

準備

啟動 vulnerable_vm,訪問 http://192.168.56.102/WackoPicko。

操作步驟
  1. 右擊Check this file(檢查此檔案),之後選擇Inspect Element with Firebug(使用 Firebug 查看元素)。

  2. 表單的第一個輸入框存在type="hidden"參數,雙擊hidden

  3. hidden改成text之後按下斷行符號鍵。

  4. 現在雙擊參數值的 30000。

  5. 將他改成 500000。

  6. 現在,我們看到了頁面上的新文字框,值為 500000。我們剛剛修改了檔案大小上限,並添加了個表單欄位來修改它。

工作原理

一旦頁面被瀏覽器收到,所有元素都可以修改,來改變瀏覽器解釋它的方式。如果頁面被重新載入,伺服器所產生的版本會再次展示。

Firebug 允許我們修改幾乎每個頁面在瀏覽器中顯示的層面。所以,如果存在建立在用戶端的控制邏輯,我們可以使用工具來操作它。

更多

Firebug 不僅僅是個取消輸入框的隱藏或修改值的工具,它也擁有一些其它的實用功能:

  • Console標籤頁展示錯誤,警告以及一些在載入頁面時產生的其它訊息。

  • HTML標籤頁是我們剛剛使用的頁面,它以層次方式展示 HTML,所以允許我們修改它的內容。

  • CSS標籤頁用於查看和修改頁面使用的 CSS 風格。

  • Script讓我們能夠看到完整的 HTML 原始碼,設定會打斷頁面載入的斷點,執行到它們時會打斷載入,以及檢查指令碼運行時的變數值。

  • DOM標籤頁向我們展示了DOM(文件物件模型)對象,它們的值,以及階層。

  • Net展示了發送給伺服器的請求和它的響應,它們的類型、尺寸、回應時間,和時間軸上的順序。

  • Cookies包含由伺服器設定的 Cookie,以及它們的值和參數,就像它的名字那樣。

4.5 擷取和修改 Cookie

Cookie 是由伺服器發送給瀏覽器(用戶端)的小型資訊片段,用於在本地儲存一些資訊,它們和特定使用者相關。在現代 Web 應用程式中,Cookie 用於儲存使用者特定的資料、例如佈景主題色彩配置、對象排列偏好、上一個活動、以及(對我們更重要)工作階段識別項。

這個秘籍中,我們會使用瀏覽器的工具來查看 Cookie 的值,它們如何儲存以及如何修改它們。

準備

需要運行我們的 vulnerable_vm。192.168.56.102用於該機器的 IP 位址,我們會使用 OWASP-Mantra 作為 網頁瀏覽器。

操作步驟
  1. 瀏覽 http://192.168.56.102/WackoPicko。

  2. 從 Mantra 的功能表列訪問Tools | Application Auditing | Cookies Manager +

    在這個中,我們可以從這個外掛程式中看到所有該時刻儲存的Cookie,以及所有它們所屬的網站。我們也可以修改它們的值,刪除它們以及添加新的條目。

  3. 192.168.56.102選擇PHPSESSID,之後點擊Edit

  4. Http Only的值修改為Yes

    我們剛剛修改的參數(Http Only)告訴瀏覽器,Cookie不能允許用戶端指令碼訪問。

工作原理

Cookies Manager+ 是個瀏覽器外掛程式,允許我們查看、修改或刪除現有的 Cookie,以及添加新的條目。因為一些應用依賴於儲存在這些 COokie 中的值,攻擊者可以使用它們來輸入惡意的模式,可能會修改頁面行為,或者提供偽造資訊用於擷取高階許可權。

同時,在現代 Web 應用程式中,工作階段 Cookie 通常被使用,通常是登入完成之後的使用者識別碼的唯一蘭苑。這會導致潛在的有效使用者冒充,通過將 Cookie 值替換為某個活動會話的使用者。

2.6 利用 robots.txt

要想進一步偵查,我們需要弄清楚是否網站有任何頁面或目錄沒有連結給普通使用者看。例如,內容管理系統或者內部網路的登入頁面。尋找類似於它的網站會極大擴大我們的測試面,並給我們一些關於應用及其結構的重要線索。

這個秘籍中,我們會使用robots.txt檔案來發現一些檔案和目錄,它們可能不會連結到主應用的任何地方。

操作步驟
  1. 瀏覽 http://192.168.56.102/vicnum/。

  2. 現在我們向 URL 添加robots.txt,之後我們會看到如下:

    這個檔案告訴搜尋引擎,jottocgi-bin的首頁不允許被任何搜尋引擎(User Agent)收錄。

  3. 讓我們瀏覽 http://192.168.56.102/vicnum/cgi-bin/。

    我們可以直接點擊和訪問目錄中的任何 Perl 指令碼。

  4. 讓我們瀏覽 http://192.168.56.102/vicnum/jotto/。

  5. 點擊名稱為jotto的檔案,你會看到一些類似於下面的的東西:

    Jooto 是個猜測五個字元的單詞的遊戲,這會不會是可能答案的列表呢?通過玩這個遊戲來檢驗它,如果是的話,我們就已經黑掉了這個遊戲。

工作原理

robots.txt是 Web 服務器所使用的檔案,用於告訴搜尋引擎有關應該被索引,或者不允許查看的檔案或目錄的資訊。在攻擊者的視角上,這告訴了我們伺服器上是否有目錄能夠訪問但對公眾隱藏。這叫做“以隱蔽求安全”(也就是說假設使用者不會發現一些東西的存在,如果它們不被告知的話)。

2.7 使用 DirBuster 發現檔案和檔案夾

DirBuster 是個工具,用於通過爆破來發現 Web 服務器中的現存檔案和目錄。我們會在這個秘籍中使用它來搜尋檔案和目錄的特定列表。

準備

我們會使用一個文字檔,它包含我們要求 DirBuster 尋找的單字清單。建立文字檔dictionary.txt,包含下列東西:

  • info
  • server-status
  • server-info
  • cgi-bin
  • robots.txt
  • phpmyadmin
  • admin
  • login
操作步驟
  1. 訪問Applications | Kali Linux | Web Applications | Web Crawlers | dirbuster

  2. 在 DIrBuster 的視窗中,將目標 URL 設定為 http://192.168.56.102/。

  3. 將線程數設定為 20。

  4. 選擇List based brute force(基於爆破的列表)並點擊Browse(瀏覽)。

  5. 在瀏覽視窗中,選擇我們剛剛建立的檔案(dictionary.txt)。

  6. 取消選擇Be Recursive(遞迴)。

  7. 對於這個秘籍,我們會讓其它選項保持預設。

  8. 點擊Start(開始)。

  9. 如果我們查看Resuults(結果)標籤頁,我們會看到,DirBuster 已經找到了至少兩個目錄中的檔案:cgi-binphpmyadmin。響應代碼 200 意味著檔案或目錄存在且能夠讀取。PhpMyAdmin 是基於 Web 的 MySQL 資料庫管理器,找到這個名稱的目錄告訴我們伺服器中存在 DBMS,並且可能包含關於應用及其使用者的相關資訊。

工作原理

DirBuster 是個爬蟲和爆破器的組合,它允許頁面上的所有串連,但是同時嘗試可能檔案的不同名稱。這些名稱可以儲存在檔案中,類似於我們所使用的那個,或者可以由 DirBuster 通過“純粹暴力破解”選項,並為產生單詞設定字元集和最小最大長度來自動產生。

為了判斷檔案是否存在,DirBuster 使用伺服器產生的響應代碼。最常見的響應在下面列出:

  • 200 OK:檔案存在並能夠讀取。

  • 404 File not found:檔案不存在。

  • 301 Moved permanently:這是到給定 URL 的重新導向。

  • 401 Unauthorized:需要許可權來訪問這個檔案。

  • 403 Forbidden:請求有效但是伺服器拒絕響應。

2.8 使用 Cewl 分析密碼

在每次滲透測試中,查查都必須包含分析層面,其中我們會分析應用、部門或過程的名稱、以及其它被目標組織使用的單詞。當需要設定人員相關的使用者名稱或密碼的時候,這會協助我們判斷可能常被使用的組合。

這個秘籍中,我們會使用 CeWL 來擷取應用所使用的單字清單。並儲存它用於之後的登入頁面暴力破解。

操作步驟
  1. 首先,我們查看 CeWL 的協助我檔案,來獲得能夠做什麼的更好想法。在終端中輸入:

    cewl --help

  2. 我們會使用 CeWL 來獲得 vulnerable_ vm 中 WackoPicko 應用的單詞。我們想要長度最小為 5 的單詞,顯示單詞數量並將結果儲存到cewl_WackoPicko.txt

    cewl -w cewl_WackoPicko.txt -c -m 5 http://192.168.56.102/ WackoPicko/
  3. 現在,我們開啟 CeWL 剛剛產生的檔案,並查看“單詞數量”偶對的列表。這個列表仍然需要一些過濾來去掉數量多但是不可能用於密碼的單詞,例如“Services”,“Content”或者“information”。

  4. 讓我們刪除一些單詞來構成單字清單的首個版本。我們的單字清單在刪除一些單詞和數量之後,應該看起來類似下面這樣:

    • WackoPicko
    • Users
    • person
    • unauthorized
    • Login
    • Guestbook
    • Admin
    • access
    • password
    • Upload
    • agree
    • Member
    • posted
    • personal
    • responsible
    • account
    • illegal
    • applications
    • Membership
    • profile
工作原理

CeWL 是個 Kali 中的工具,爬取網站並提取獨立單詞的列表。他它也可以提供每次單詞的重複次數,儲存結果到檔案,使用頁面的中繼資料,以及其它。

另見

其它工具也可用於類似目的,它們中的一些產生基於規則或其它單字清單的單字清單,另一些可以爬取網站來尋找最常用的單詞。

  • Crunch:這是基於由使用者提供的字元集合的產生器。它使用這個集合來產生所有可能的組合。Crunch 包含在 Kali 中。

  • Wordlist Maker (WLM):WLM 能夠基於字元集來產生單字清單,也能夠從文字檔和網頁中提取單詞(http://www.pentestplus.co.uk/wlm.htm)。

  • Common User Password Profiler (CUPP):這個工具可以使用單字清單來為常見的使用者名稱分析可能的密碼,以及從資料庫下載單字清單和預設密碼(https://github.com/Mebus/cupp)。

2.9 使用 John the Ripper 產生字典

John the Ripper 可能是世界上最受大多數滲透測試者和駭客歡迎的密碼破解器。他擁有許多特性,例如自動化識別常見加密和雜湊演算法,使用字典,以及爆破攻擊。因此,它允許我們對字典的單詞使用規則、修改它們、以及在爆破中使用更豐富的單字清單而不用儲存列表。最後這個特性是我們會在這個秘籍中使用的特性之一,用於基於極其簡單的單字清單產生擴充字典。

準備

我們會使用上一節中產生的單字清單,來產生可能密碼的字典。

操作步驟
  1. John擁有只展示用於破解特定密碼檔案的密碼的選項。讓我們使用我們的單字清單來嘗試它:

    john --stdout --wordlist=cewl_WackoPicko.txt

  2. 另一個 John 的特性是讓我們使用規則,以多種方式來修改列表中的每個單詞,以便產生更複雜的字典。

    john --stdout --wordlist=cewl_WackoPicko.txt --rules

    你可以在結果中看到,John 通過轉換大小寫、添加尾碼和首碼,以及將字母替換為數字和符號(leetspeak)來修改單詞。

  3. 現在我們需要執行相同操作,但是將列表發送給檔案,便於我們之後使用:

    john --stdout --wordlist=cewl_WackoPicko.txt --rules > dict_ WackoPicko.txt

  4. 現在,我們擁有了 999 個單詞的字典,它會在之後使用,用於進行應用登入頁面上的密碼猜測攻擊。

工作原理

雖然 John the Ripper 的目標並不是字典產生器,而是高效地使用單字清單來破解密碼(它也做的非常好)。它的特性允許我們將其用於擴充現有單字清單,並建立更符合現代使用者所使用的密碼的字典。

這個秘籍中,我們使用了預設的規則集合來修改我們的單詞。John 的規則定義在設定檔中,位於 Kali 的/etc/john/john.conf

更多

有關為 John the Ripper建立和修改規則的更多資訊,請見:http://www.openwall.com/john/doc/RULES.shtml。

2.10 使用 ZAP 發現檔案和檔案夾

OWASP ZAP(Zed Attack Proxy)是個用於 Web 安全性測試的全能工具。他擁有代理、被動和主動漏洞掃描器、模糊測試器、爬蟲、HTTP 要求發送器,一起一些其他的有趣特性。這個秘籍中,我們會使用最新添加的“強制瀏覽”,它是 ZAP 內的 DisBuster 實現。

準備

這個秘籍中,我們需要將 ZAP 用做瀏覽器的代理。

  1. 開啟 OWASP ZAP,從應用的功能表列中,訪問Applications | Kali Linux | Web Applications | Web Application Fuzzers | owasp-zap

  2. 在 Mantra 或 Iceweasel 中,訪問主菜單的Preferences | Advanced | Network,在Connection中點擊Settings

  3. 選項Manual proxy configuration(手動代理配置),並將127.0.0.1設定為 HTTP 代理,8080 設定為連接埠。檢查選項來為所有協議使用同一個代理,並點擊OK

  4. 現在,我們需要告訴 ZAP 從哪個檔案獲得目錄名稱。從 ZAP 的菜單中訪問Tools | Options | Forced Brows,之後點擊Select File

  5. Kali 包含一些單字清單,我們會使用它們之一:選擇檔案/usr/share/wordlists/dirbuster/directory-list-lowercase-2.3small.txt,之後點擊Open

  6. 提示框會告訴我們檔案被載入了。點擊OK之後再點擊OK來離開Options對話方塊。

操作步驟
  1. 合理配置代理之後,瀏覽

工作原理

當我們配置瀏覽器來將 ZAP 用作代理的時候,它並不直接發送給伺服器任何我們打算瀏覽的頁面的請求,而是發到我們定義的地址。這裡是 ZAP 監聽的地址。之後 ZAP 將請求轉寄給伺服器但是不分析任何我們發送的資訊。

ZAP 的強制瀏覽的工作方式和 DIrBuster 相同,它接受我們所配置的字典,並向伺服器發送請求,就像它嘗試瀏覽列表中的檔案那樣。如果檔案存在,伺服器會相應地響應。如果檔案不存在或不能被我們的目前使用者訪問,伺服器會返回錯誤。

另見

Kali 中包含的另一個非常實用的代理是 Burp Suite。它也擁有一些特別有趣的特性。其中可用作強制瀏覽的替代品是 Intruder。雖然 Burp Suite 並不特地用於該目的,但是它是個值得研究的通用工具。

Kali Linux Web 滲透測試秘籍 第二章 偵查

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.