網站滲透測試 (Web App Penetration Testing) 是模擬真實世界的駭客,攻擊網站主機。其目的是要及早發現網站的潛在資安弱點。
提早發現網站的資安弱點,能有效降低營運風險。若能在網站上線前,發現弱點,更是能大幅降低弱點修補成本。
而滲透測試操作過程不是無的放矢地攻擊網站,或是偷取網站資料。比較像是成人健檢,藉由一系列醫療檢驗項目,提早發現潛在的疾病。
比起 滲透 IOT 裝置、硬體設備,新手從「網站滲透測試」領域入門,比較容易上手。「網站滲透測試」過程中得到的基礎知識,也能應用在其他測試標的中。
接下來,文章會跟大家分享,新手學習「網站滲透測試」技術時,建議掌握的知識與工具。
*請留意文章中提到的工具軟體,請在授權環境下執行測試與使用,禁止在非授權環境下執行!讀者可利用虛擬機器軟體自行建立主機練習。
Photo by Daria Shevtsova on Unsplash.
文章目錄
HTTP 協定
網站有分為靜態與動態網站。靜態網站常使用 HTML 、CSS 與 Javacript 撰寫,使用者無法跟靜態網站互動,只能瀏覽網頁。
動態網站常使用網頁程式語言撰寫,例如 PHP、ASP.NET 、Python 或是 Ruby 語言等。網頁程式能讓讀者跟網站互動。比方說,留言、瀏覽人數、上傳圖片等。
現今的網站大多是動態網站。
無論使用何種網頁程式語言,使用者均是透過瀏覽器,用 HTTP 協定跟網站溝通。就像用英文跟世界上任何國家的外國人溝通一樣。
HTTP 是 HyperText Transfer Protocol 的縮寫,維基百科中文翻作「超文本傳輸協定」。為什麼稱做「超」呢?因為 HTTP 協定所傳輸的文件內容稱為 HTML (HyperText Markup Language),HTML 有一個劃時代的發明,叫做超連結 (Hyper Link)。因此,才稱為超文本。
目前最廣泛使用的 HTTP 協定版本是 1.1 ,發佈於 1999 年的 RFC 2616。定義 URL 格式、HTTP 傳輸方法,比方說,GET、POST、HEAD、OPTIONS、TRACE 與 CONNECT。
此外,亦建議新手了解 Content-Type 、Cookie 、Response Status Code(200、403、404、500)等協定內容。
由於 HTTP 協定標準是存取網站的共通語言,你搞懂 HTTP 協定,就能自在地跟網站說話溝通,對網站滲透測試很有幫助。
建議新手仍需要多瞭解 HTTP 協定內容,最好能以手動方式操作協定,加深印象。
例如 POST 請求如下:
POST / HTTP/1.1 Host: hack543.com ... a=1&b=2&c=3
網站回應請求如下:
HTTP/1.1 200 OK Date: Sat, 11 Jun 2022 00:03:17 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive ...
一開始,可以嘗試在瀏覽器按下「F12」,打開 網站開發者工具 ,再切換到 Network 分頁,點選你瀏覽網站的請求,觀察 Response Header 跟 Request Header 。抑或是,搭配本文提到的 網頁安全工具 Burp Suite 進行觀察。
OWASP Top 10
OWASP Top 10 是最具權威的網頁攻擊風險類型列表排名,排名會列出前十名的網頁攻擊風險類型。每隔幾年 OWASP 協會會公告年度網頁風險類型排名,目前最新排名是 2021發布的。
協會從過往弱點資料庫中,挑選 8 個網站類型風險,另外從社群問卷調查結果中,再挑選 2 個風險加入。
就像國人十大癌症的排名統計,弱點類型排名清單代表當年度大多數網站的共通性弱點。排名越前面,代表該弱點類型最常被發現。熟悉這些弱點的攻防手法可更了解如何攻擊網站,甚至未來擔任防守方(藍軍)的相關工作,都有幫助。
Burp Suite
PortSwigger 公司開發的網頁安全工具 Burp Suite ,在網頁安全與滲透測試領域,市佔率極高。正如同 AutoCAD 在工程繪圖領域,Burp Suite 是網站滲透測試不可多得的好用工具。
其特色是容易上手、外掛眾多 (BApps)、串接性強。Burp Suite使用情境常與瀏覽器搭配,Burp Suite 啟動本機的 Proxy 服務,在瀏覽器的 Proxy 設定中,填入 Burp Suite 所開啟的 Proxy 服務 IP 與 Port (通常為 127.0.0.1:8080)。
如此一來,當瀏覽網頁時,Burp Suite 即能同步側錄到瀏覽網頁時,所有 HTTP 請求與回應的內容。
此外,當匯入 Burp Suite 根憑證 (Root CA) 到電腦中,亦能側錄 HTTPS 網頁加密通訊的內容。
而官方有提供社群版 (Burp Suite Community Edtion) 供免費下載,Kali Linux 亦內建 社群版本供使用。
Burp Suite Professional 專業版 (訂閱制),網站牌價一年一人份 $399 美金,比起社群版本額外提供的功能有專案儲存、完整的 Intruder、搜尋、網頁弱掃,以及 Collaborator 等功能。
有心想要在此領域發展的讀者,也可考慮購買 Burp Suite Professional 版本授權。
網頁目錄與檔案列舉工具
在網站滲透測試過程中,需要列舉目錄與檔案時,推薦使用 dirb、dirbuster、gobuster、ffuf 。這些都是很優秀的目錄與檔案列舉的開源軟體,搭配 Seclist 蒐集的字典檔,效果不錯。
上述套件,在 Kali Linux 上亦可透過 apt 直接安裝使用 (seclist Kali 套件介紹)。
Nmap 與 RustScan
Nmap 與 RustScan 是主機通訊埠掃描工具,目的是掃描目標主機開啟的網路通訊埠,並藉由掃描結果,擴大攻擊範圍。
比方說,網站除了開啟標準的 Port 80 與 443 外,還另外開啟了遠端桌面服務 (Port 3389)。滲透測試過程中,除了網站外,也能另外嘗試登入主機的遠端桌面服務。
若讀者想進一部了解 Nmap 跟 RustScan 工具的操作細節,可以參考我網站的文章,掃 port 最速工具軟體 – RustScan 與 9 個常見的 Nmap 通訊埠掃描情境。
Exploit Database 與 CVE Details
除了網站本身弱點外,若是網站安裝現成的軟體套件,也可能會有安全弱點。
網站滲透測試過程中,可查看網站使用的軟體套件,是否已有被揭露資安弱點,或公開的弱點攻擊程式 (Exploit)。
Exploit 能透過 Exploit Database 網站進行查詢與下載,而 CVE Details 網站也蒐集了所有列管的 CVE 弱點,查看 CVE Details 網站,能了解軟體套件版本是否有已揭露的資安弱點。
實務上,會交互參照 CVE 與公開的 Exploit。
Password Cracking
滲透測試過程中,有時需暴力破解密碼。破解密碼有分兩種形式,線上 (Online) 跟離線 (Offline) 破解。線上破解會將欲猜測的密碼,傳送到伺服器驗證。而離線破解則是在測試人員電腦破解密碼。過程中,不會與目標伺服器互動。
線上密碼破解工具,推薦使用 hydra 。廣泛支援多種協定,如 FTP、HTTP-Post、SSH 與 RDP 等。同時也推薦另外一套 medusa,比起 hydra,線上破解的速度較佳。
而離線密碼破解常用情境是破解雜湊值,例如,下面這一串英文與數字,是 SHA512 crypt 雜湊演算法的運算結果。這類型的雜湊值對應常是 Linux 作業系統的登入密碼。如果能破解雜湊值,我們就能知道主機登入密碼。
$6$913cuEJoFwGqAaxE$0cYcmpryAubhbbEEfp/zJZxC4xgBUm0a.bypVM.kdl7LeLD09Q76ikPwZhXp1oxHED/zvW8v5RM6OHtqyN2pe0
離線密碼破解工具推薦使用 Hashcat,還能利用顯示卡 GPU 加快破解速度。
以下範例即是使用 Hashcat 成功破解 SHA512 crypt 雜湊值所對應的密碼,密碼是「123456」。參數 -m 1800 是破解 SHA512 crypt 雜湊,hash.txt 是儲存上述 SHA512 crypt 雜湊值,pass.lst 是字典檔。
$ hashcat -m 1800 hash.txt pass.lst
hashcat (v5.1.0) starting...
....
$6$0R4Q3NdecYUn3XfF$/6ob4DR2VmnDs4MjuG6OKaOb13uxWZv86aLcyd4e0vyhYXI2Q0FKsXrqxCd5KzxEJyiyX7xsI1L3VZovBjCBG0:123456
Session..........: hashcat
Status...........: Cracked
Hash.Type........: sha512crypt $6$, SHA512 (Unix)
Hash.Target......: $6$0R4Q3NdecYUn3XfF$/6ob4DR2VmnDs4MjuG6OKaOb13uxWZv...BjCBG0
Time.Started.....: Sun Jul 24 14:58:52 2022 (0 secs)
Time.Estimated...: Sun Jul 24 14:58:52 2022 (0 secs)
Guess.Base.......: File (pass.lst)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 38 H/s (0.76ms) @ Accel:64 Loops:32 Thr:32 Vec:1
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 5/5 (100.00%)
Rejected.........: 0/5 (0.00%)
Restore.Point....: 0/5 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:4992-5000
Candidates.#1....: 1 -> 123456
Hardware.Mon.#1..: Temp: 50c Util: 83% Core:1189MHz Mem:2505MHz Bus:16
離線密碼破解工具,另外也推薦一套 John the ripper ,讀者可自行查閱程式手冊。
對於 Hashcat 與 John the ripper 操作有興趣的讀者,我之後會再撰寫專文介紹,請大家敬請期待。
結論
以上幫新手整理了網站滲透測試所需要的知識與工具清單。礙於篇幅與作者所學有限,無法包含全部的範疇,但希望有幫到新手讀者。
如果你有問題,請你在下面的留言區留言,若你喜歡這篇文章,也請你幫忙分享給你的朋友。