小提醒:如果想跟著操作此篇,請先去以下網址進行安裝喔!
Day 11 : 實作篇 - Kali Linux VM虛擬機安裝教學
Day 12 : 實作篇 - Metasploitable2、OWASPBWA 靶機安裝教學
大家好,今天要來講 OWASP Top10 2021 的 A1 - Broken Access Control(無效的訪問控制)
它在 2013 版其實是分開的,分別為A4 - 不安全的直接物件引用 (Insecure Direct Object References)和 A7 - 缺少功能級別的訪問控制 (Missing Function Level Access Control)
那之後為什麼會合併呢?
原因我在 Day 19 的 OWASP Top10 的比較篇裡一樣有提到
- A4 和 A7 在 2017 被合併成A5 - 無效的訪問控制 (Broken Access Control),因為這兩個漏洞有著相同的根本原因,就是缺少訪問的控制權限,因此在 2017 直接將這個原因當成名字重新命名
在 Day 19 的 OWASP Top10 的比較篇裡,我們有稍微提到它是什麼東西
- A5 - 無效的訪問控制 (Broken Access Control)
這個最厲害了,它在 2021 從 A5 直接上升到 A1 的位置,因為系統權限如果控管不當,讓 hacker 操作到預期權限外的動作,就有可能導致機密資料遭到外洩、竄改、破壞等,因此它的排名上升到 A1,成為目前最關鍵的安全風險漏洞
所以它顧名思義,就是權限管控不當,導致 hacker 越權
它常見的漏洞有:
不知道大家有沒有看過,有些 URL 後面會加上id=XXX,而這 ID 可能是一串數字、亂碼、雜湊值等,它指的可能是使用者 ID,也有可能是指某筆資料的 ID
ex:https://www.testweb.com/profile?id=1234 # 使用者
https://www.testweb.com/profile?id=c14123-255d-8c1w-q82134te32 # 某筆資料
而 URL 在網址列是可以手動做更改的,所以如果沒做好權限的控制,hacker 就可以經由更改 ID,取得其他使用者的權限和資訊
這個很吃對系統預設目錄的熟悉程度。如果沒有做好系統的權限控制,hacker 就能透過更改 URL,去自由訪問系統目錄中預設擺放的文件內容
ex:https://www.testweb.com/profile?file=dog.png
改成
https://www.testweb.com/profile?file=../../etc/passwd
它跟剛剛的路徑遍歷有點類似,但又有點差異在。路徑遍歷是指:對「目錄」的權限,而這邊的文件權限是:對「文件」的權限
那為什麼會這樣分呢?
這就要提到 Linux 的權限了,簡單來說就是你可以訪問「這個目錄」,但不一定可以訪問「它目錄內的文件」,和它的權限-r有關
(這邊大家可以去看看我去年寫的鐵人賽,會比較清楚:Day 26 : Linux - 檔案or目錄的權限該怎麼看?又該如何做更改?)
那我們就使用「目錄遍歷」來進行示範
這裡我們要使用OWB靶機裡的OWASP Mutillidae II靶場進行練習,它提供了OWASP TOP10裡的漏洞,並分成三種安全等級,讓我們初學者可以循序漸進進行攻防練習
但這台OWB靶機只提供到 2013 的漏洞(好像有 2017 的但我沒找到下載點)
不過沒關係!剛剛有說,Broken Access Control(無效的訪問控制)在 2013 是被分開的,所以還是有辦法進行實戰練習
那我們就正式開始操作!
首先,開啟你的kali VM,按左上角的「kali icon」,搜尋Burp Suite並開啟它
這邊選「temporary project」即可(因為我們只是練習,不用儲存結果),再按「Next」
選擇「Use Burp defaults」,再按「Start Burp」
就會看到 Burp Suite 的主畫面!
再到VirtualBox的 VM 列表,開啟我們的OWASPBWA靶機,登入後輸入ifconfig,確認它的 IP 位址為何(這裡每個人的 IP 位址皆不同,後續操作照你機器的 IP 即可)
這時回到我們的kali VM,按左上角的「Firefox icon」,開啟 Firefox
在網址列的地方打上<你owb靶機的IP位址>,這裡我的 IP 位址為10.0.2.8
到 owaspbwa 的畫面,點擊「OWASP Mutillidae II」
再點擊OWASP 2013 > A4 - Insecure Direct Object References > Text File Viewer
因為 Burp Suite proxy 預設的連接端口為127.0.0.1:8080,所以我們要在 Firefox 設定一個 proxy
按右上角的「工具列 icon」,選擇「Settings(設定)」
滑到最下面,看到「Network Settings」,點擊「Settings...」
勾選「Manual proxy configuration」,並在 HTTP Proxy 的地方輸入 127.0.0.1,port 號為8080
注意:如果你開啟 proxy 後,出現以下畫面,就回到剛剛設定 proxy 的畫面,將 proxy 關閉即可(在連接外網時一定要關閉 proxy,否則你會一直看到這個畫面),但在進行攔截的時候記得要再打開
Firefox 的 Proxy 設定完成後,回到 Burp Suite 的畫面,將 proxy 的「Intercept is on」打開,進行封包攔截
再回到剛剛的Text File Viewer畫面
上面有說到,Mutillidae II提供了三種安全等級,讓我們初學者可以循序漸進進行攻防練習
所以這裡我們先測試Security Level: 0的情況,任選一個 File 後,按下「View File」
這時 Burp Suite 會收到剛剛按下 View File 的封包,而瀏覽器的部分不會跳轉,會一直在「等待這個封包」
此時你會看到一串 URL,是你剛剛選擇的 File 的所在位置,因為它是用 textfile 來控制要顯示的文件
我們將它改成../../etc/passwd,並點擊「Forward」進行封包傳送
(../../是指:「從家目錄退到 home,再退到根目錄」)
再回到瀏覽器,你就會看到OWB靶機的/etc/passwd內容
你可以到OWB靶機輸入cat /etc/passwd,對照一下內容是不是一樣的
再來我們換測試Security Level:5的情況,首先先將 Proxy 的「Intercept is on」關閉
再按兩次「Toggle Security」,將 Level 升至 5
再將 Proxy 的「Intercept is on」打開
再回到剛剛的Text File Viewer畫面,任選一個 File 後,按下「View File」
這時 Burp Suite 就會收到封包,可以注意看它 textfile 的地方不是 URL 了,而是一個數字
我們將它改成../../etc/passwd,並點擊「Forward」進行封包傳送
回到瀏覽器,你會看到它報一段錯誤訊息,這是因為它有在程式碼裡做一些防禦機制
那我們就來看看它程式碼寫了哪些內容
首先,先將 Proxy 的「Intercept is on」關閉
在網址列的地方,可以看到Text File Viewer的 URL 後面寫著text-file-viewer.php。這邊先記好它,我們等等就是要看這個檔案的內容
再點擊OWASP 2013 > A4 - Insecure Direct Object References > Source Viewer
在Source File Name的地方選擇剛剛的text-file-viewer.php,並按下「View File」,就會看到這隻檔案的程式碼
往下滑就會看到一個 switch,它是抓security-level的值去進行判斷的,再分別賦予變數不同的值
再往下滑,會看到一個下拉式選單的 html 程式碼,裡面寫著 php 的 if-else,看我們在Text File Viewer的地方是選擇哪一個,它就會執行哪一行的 if-else,並看它的$lUseTokenization是否為TRUE,若為TRUE則echo 數字,不然就echo URL
這就是為什麼 Level 0 的時候它 textfile 為 URL,而 Level 5 的時候 textfile 為數字
可以看到它這裡下拉式選單的選項有 5 個,所以它最多 echo 到 5
再往下滑,會看到一個用$pTextFile的值去進行判斷的 switch,它會根據 textfile 的值去給相對應的 URL
再往下滑,這段就是在把內容印出來
所以它是經由轉換再轉換,來達到防禦的效果
既然知道它程式碼的運作原理,你就能自己嘗試看看 Level 5 有什麼辦法可以破解它
以上就是今天的介紹
希望大家看完能對 Broken Access Control(無效的訪問控制) 更加了解