這是burpsuite官網的免費優質實驗.
實驗室地址 https://portswigger.net/web-security/information-disclosure
僅為本人學習記錄文章
簡單介紹
信息泄露指網站無意向用戶泄露敏感信息.可能包括以下內容:
- 有關其他用戶私密數據的,財務信息,個人身份信息等
- 敏感的商業數據
- 有關網站技術細節,架構,如源代碼等
這種泄露可能是不慎泄露給瀏覽該網站信息用戶的,也有可能是攻擊者通過惡意的交互從網站獲得數據.
一些敏感信息泄露的示例:
- 通過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 登錄后台,刪除指定用戶即可.
