BurpWeb安全學院之敏感資訊洩露
簡單介紹
資訊洩露指網站無意向使用者洩露敏感資訊.可能包括以下內容:
- 有關其他使用者私密資料的,財務資訊,個人身份資訊等
- 敏感的商業資料
- 有關網站技術細節,架構,如原始碼等
這種洩露可能是不慎洩露給瀏覽該網站資訊使用者的,也有可能是攻擊者通過惡意的互動從網站獲得資料.
一些敏感資訊洩露的示例:
- 通過robots.txt洩露網站隱藏目錄,檔案.或者站點結構
- 網站站點的備份檔案未刪除導致的洩露,可能會洩露網站原始碼
- 沒有正確處理網站的一些錯誤訊息,在錯誤訊息中洩露資料庫表,欄位等
- 一些高度敏感的使用者資訊,銀行賬號等洩露
- 在原始碼中洩露資料庫賬號密碼,等等(GitHub)
- 網站某些程式的細微差別提示是否存在某些資源,使用者名稱
敏感資訊洩露的產生原因可大致歸類如下幾點:
- 未刪除公開內容中的敏感資訊.(如開發人員的註釋)
- 網站不安全的配置(如,報錯資訊過於具體,網站開發時留下的除錯網站功能)
- 應用程式設計上的缺陷
如何防止資訊洩露?
-
網站開發人員要明確哪些資訊是敏感資訊
-
針對錯誤訊息正確處理
-
檢查網站開發環境中的任何除錯或者診斷功能是否禁用
-
瞭解站點所使用的第三方技術的配置設定與安全隱患.花時間禁用實際上不需要的任何功能和設定
下面將介紹一些關於敏感資訊洩露挖掘的思路
爬蟲檔案
像robots.txt, sitemap.xml
這些檔案會列出特定目錄不讓爬蟲爬取,因為它們可能包含敏感資訊
在burpsuite的sitemap裡面可能看不到它們,需要手動測試一下,看是否存在有用的東西
目錄資訊洩露
有的網站因為不當的配置可能暴露了網站目錄
(圖片來源於網路)
可能洩露一些開發者不希望使用者訪問的檔案
洩露敏感資源的存在與位置
註釋或js檔案
開發過程中,開發者可能在HTML中寫有關敏感資訊的註釋.
部署到生成檔案前,通常會刪除.但是可能有時會因為有些人沒有安全意識而忘記.
也有可能是js程式碼會保留一些敏感資訊
實驗:
在這個實驗中,我們檢視HTML原始碼.發現下面的js程式碼
如果訪問使用者是管理員,將在頁面上增加一個超連結 Admin panel 在. /admin-f6zfiz
如果不看原始碼,通過目錄爆破很難發現.
同時,該網站的訪問控制也沒有做好,我們可以輕鬆進入控制頁面
刪除Carlos使用者
錯誤訊息
資訊洩露的最常見原因之一是冗長的錯誤訊息。
您應密切注意測試期間遇到的所有錯誤訊息。
錯誤訊息可能提醒測試人員應該輸入什麼訊息或者什麼資料型別的訊息,這可以幫助我們識別可利用的引數來縮小攻擊範圍
詳細的錯誤訊息還可以提供有關網站使用的技術資訊 .如資料庫型別,模板型別,伺服器版本號等.
您可能還會發現該網站正在使用某種開源框架 , 在這種情況下,您可以下載研究原始碼,可能有意外收穫
錯誤訊息對SQL注入,使用者名稱列舉等都很關鍵.
實驗:
我們嘗試修改id
引發報錯可以發現該站點使用了Apache Struts 2 2.3.31
搜尋可以發現這個版本存在一個Struts 2 遠端程式碼執行漏洞.
但在這個實驗不用嘗試,點選 Submit solution 將發現填進去即可過關
除錯資料
出於除錯目的,許多網站會生成自定義錯誤訊息和日誌,其中包含有關應用程式行為的大量資訊
儘管此資訊在開發過程中很有用,但如果在生產環境中洩漏,則對攻擊者也非常有用。
除錯訊息有時可能包含用於發起攻擊的重要資訊,包括 :
- 可以通過使用者輸入操作的關鍵會話變數的值
- web中介軟體的主機名和登入憑據
- 伺服器上的檔案和目錄名稱
- 用於加密通過客戶端傳輸的資料的金鑰
除錯資訊有時可能會記錄在單獨的檔案中。
實驗:
在這個實驗裡,通過burpsuite的sitemap就可以發現,洩露了phpinfo頁面
phpinfo就洩露了很多資訊,包括 SECRET_KEY
這個值是某些加密的鹽值(在不安全的反序列化一節中有用到)
在這提交secret_key值就可以過關
越權訪問
使用者的個人資料或“我的帳戶”頁面通常包含敏感資訊 , 例如使用者的電子郵件地址,電話號碼,API金鑰等。
由於使用者通常只能訪問自己的帳戶頁面,因此這本身並不表示漏洞。但是,某些網站包含邏輯缺陷,這些缺陷可能使攻擊者可以利用這些頁面來檢視其他使用者的資料。
例如,考慮一個基於user引數確定要載入哪個使用者的帳戶頁面的網站。
GET /user/personal-info?user=carlos
實驗:
在賬戶頁面有個人的API Key
但是下面是my-account?id=wiener
嘗試修改為carlos
burp抓包修改
之前的wiener的API key NczbKj9I0GfmU6Q9KnA5FLpKfckLQaxU
如果直接訪問會重定向,下面的sYtJ1hbZ0t9Vv884PoCQeQRE3nRTzdMa就是carlos的API key
直接提交carlos的API key就ok
備份檔案
獲得原始碼訪問許可權使攻擊者更容易理解應用程式的行為並構造高嚴重性攻擊。
敏感資料有時甚至被寫在在原始碼中,如資料庫IP,密碼(程式設計師提交到GitHub的開源專案)
有時候,網站自身可能由於某些原因,洩露其原始碼:
比如用Vim程式設計,在修改檔案後 系統會自動生成一個帶~的備份檔案 , 某些情況下可以對其下載進行檢視;
還有一些檔案備份會在檔案後面加上.bak
如下面的兩種情況:
洩露了目錄資訊
以及備份檔案資訊
這些都可以通過burpsuite的爬蟲爬出來
如果檢視robots.txt
可以發現它禁止爬取backup目錄下的檔案,正好和前面描述的相符
而在原始碼中又可以發現敏感資訊
(提交e4634c3retqjcb9wov4ci2bmyuybz8ud過關)
Vim備份檔案洩露
配置不安全導致資訊洩露
由於配置不當,網站有時容易受到攻擊。
又由於第三方技術的廣泛使用,這種情況尤為普遍,第三方技術的很多配置選項並不一定被使用它們的人員所理解。
在其他情況下,開發人員可能會忘記在生產環境中禁用各種除錯選項
例如,HTTP TRACE
方法被設計用於診斷目的 , TRACE允許顧客看到通過請求鏈的那一端在接收了些什麼並使用那些資料來測試和診斷資訊情況,開啟可能導致某些危害
訪問admin頁面
同時該網站TRACE方法又開啟了
X-Custom-IP-Authorization為我們的請求IP
結合這兩條可以知道,web站點管理員在開發網站時設定了,本地不需要登入也可以進入admin頁面
但是,我們可以欺騙伺服器我們是127.0.0.1
這樣設定後再次訪問
可以成功刪除 Carlos 的賬號
TRACE探測
版本控制歷史
Git基礎請參考 https://www.runoob.com/w3cnote/android-tutorial-git-repo-operate.html
幾乎所有網站都是使用某種形式的版本控制系統(例如Git)開發的
預設情況下,Git專案將其所有版本控制資料儲存在名為.git
的資料夾中
有時,網站在生產環境中公開此目錄。在這種情況下,您可能只需瀏覽到即可訪問它/.git
。
而且還可以下載到本地,用本地安裝的Git開啟它 以訪問網站的版本控制歷史記錄
這可能無法讓您訪問完整的原始碼, 但是您可以閱讀更改的程式碼片段
這仍然可能存在某些敏感資料
實驗:
訪問/.git
我們可以下載到本地檢視
wget -r https://ac931f6d1f3043de818db753009500ba.web-security-academy.net/.git
git status命令檢視資訊
可以發現,admin.conf和admin_panel.php被管理員從目錄刪除了
但是"尚未快取以備提交的變更",說明並沒有從當前版本刪除.
使用下面的命令恢復到當前版本
git reset --hard HEAD
cat admin.conf發現沒有管理員密碼!...
git log 檢視歷史版本資訊
發現賬號密碼上一版被刪除了..
再恢復上一版
git reset --hard HEAD^
拿到管理員密碼,administrator/7e4yhifp8ni8olt5aap2 登入後臺,刪除指定使用者即可.