小提醒:如果想跟著操作此篇,請先去以下網址進行安裝喔!
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(無效的訪問控制) 更加了解