javascript
Spring Boot框架敏感信息泄露的完整介绍与SRC实战(附专属字典与PoC)
轉載于:https://www.freebuf.com/vuls/289710.html
#前言
##Spring Boot框架介紹
Spring框架功能很強大,但是就算是一個很簡單的項目,我們也要配置很多東西。因此就有了Spring Boot框架,它的作用很簡單,就是幫我們自動配置,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。Spring Boot框架的核心就是自動配置,只要存在相應的jar包,Spring就幫我們自動配置。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。如果默認配置不能滿足需求,我們還可以替換掉自動配置類,使用我們自己的配置。另外,Spring Boot還集成了嵌入式的Web服務器,系統監控等很多有用的功能,讓我們快速構建企業及應用程序。
##Actuator中間件工具介紹
Actuator是Spring Boot提供的服務監控和管理工具。當Spring Boot應用程序運行時,它會自動將多個端點注冊到路由進程中。而由于對這些端點的錯誤配置,就有可能導致一些敏感信息泄露。
#如何發現Spring Boot框架
通常有兩種方法:
1.網站的icon文件是一個綠色的樹葉:
2.頁面存在特有的報錯信息:
#敏感信息泄露所影響的版本
Spring Boot < 1.5: 默認未授權訪問所有端點。
Spring Boot >= 1.5: 默認只允許訪問/health和/info端點,但是此安全性通常被應用程序開發人員禁用。
#每個端點的作用
官方文檔有對它們展開詳細的描述:
##訪問/actuator
如果網站設置了management.endpoints.web.exposure.include為*,那么我們可以在/actuator看到所有存在的斷點:
##訪問/actuator/version
泄露版本信息
##訪問/env或者/actuator/env
獲取環境屬性
其中redis賬戶和信息泄露:
其中數據庫賬戶和信息泄露:
##訪問/actuator/metrics
獲得每個度量的名稱,其中主要監控了JVM內容使用、GC情況、類加載信息等:
如果想要得到每個度量的詳細信息,你需要傳遞度量的名稱到URL中,比如這樣:
http://x.x.x.x/actuator/metrics/http.server.requests
##訪問/actuator/threaddump
獲取服務器的線程堆棧:
##訪問/actuator/loggers
獲取服務器的日志級別:
##訪問/actuator/configprops
查看配置文件中設置的屬性內容,以及一些配置屬性的默認值:
##訪問/actuator/info
展示了關于應用的一般信息,這些信息從編譯文件比如META-INF/build-info.properties或者git文件比如git.properties或者任何環境的property中獲取:
##訪問/actuator/prometheus
獲取一些監控指標:
##訪問/actuator/mappings
其中描述全部的URI路徑,以及它們和控制器的映射關系:
訪問:http://x.x.x.x/actuator/mappings
##訪問/actuator/health
healthendpoint只展示了簡單的UP和DOWN狀態,比如這樣:
為了獲得健康檢查中所有指標的詳細信息,就需要通過在application.yaml中增加如下內容:
一旦你打開上述開關,那么在/health中可以看到詳細內容,比如下面這樣:
{"status": "UP","diskSpace": {"status": "UP","total": 209715195904,"free": 183253909504,"threshold": 10485760}"db": {"status": "UP","database": "MySQL","hello": 1} }##訪問/heapdump或者/actuator/heapdump
會返回一個GZip壓縮的JVM堆dump,其中是jvm heap信息。下載的heapdump文件大小通常在 50M—500M 之間,有時候也可能會大于 2G。然后使用 MAT 可以獲得jvm heap中的密碼明文。
其中還有部分端點,這里就不一一展示了。
#Spring Boot敏感端點路徑專屬字典
這里送波福利吧:
#用工具跑字典
##Burp Suite
用Burp Suite跑似乎有點問題:
在Intruder爆破模塊中,將payload設置成如此形式,跑不出來:
然而手測完頁面卻能訪問,而且是有敏感信息的,所以這里有點問題。然后上網搜完,說是payload要設置成如下形式:
其中有部分狀態碼返回200了,還有Content-length也返回的是正確的,可是還是大部分是錯誤的,和我手測不相符:
這里如果有師傅知道原因請告訴我。
##自己寫python腳本
既然上面出現了問題,那么我只能自己寫一個來跑了:
url = ‘http://x.x.x.x/’ #這里url末尾要有’/’
with open(“SpringBoot信息泄露目錄字典.txt”, ‘r’) as web:
webs = web.readlines()
for web in webs:
web = web.strip()
u = url + web
response = requests.get(u)
#print(“url為:”+u)
print(“url為:” + u + ’ ’ + “狀態為:%d”%response.status_code + ’ ’ + “content-length為:” + str(len(response.content)))
time.sleep(5) #想sleep多久看自己~
w = open(‘easyresult.txt’, ‘w+’)
for web in webs:
web = web.strip()
u = url + web
response = requests.get(u)
w.write(“url為:” + u + ’ ’ + “狀態為:%d”%response.status_code + ’ ’ + “content-length為:” + str(len(response.content)) + ‘\n’)
結果也是全部正確:
進階腳本,可以跑多個URL:
import time
with open(“url.txt”, ‘r’) as temp:
for url in temp.readlines():
url = url.strip(’\n’)
with open(“SpringBoot信息泄露目錄字典.txt”, ‘r’) as web:
webs = web.readlines()
for web in webs:
web = web.strip()
u = url + web
r = requests.get(u)
# print(“url為:”+u)
print(“url為:” + u + ’ ’ + “狀態為:%d”%response.status_code + ’ ’ + “content-length為:” + str(len(response.content)))
time.sleep(5) #想睡多久看自己~
w = open(‘result.txt’, ‘w+’)
for web in webs:
web = web.strip()
u = url + web
r = requests.get(u)
w.write(“url為:” + u + ’ ’ + “狀態為:%d”%response.status_code + ’ ’ + “content-length為:” + str(len(response.content)) + ‘\n’)
測試出來的結果也是全部正確。
##SRC實戰
我用這個漏洞實戰了某些src,均挖掘出了敏感信息并提交至平臺。上面的所有截圖均為實戰時候的截圖,現已全部修復。
參考
https://blog.csdn.net/weixin_50464560/article/details/119778686?spm=1001.2014.3001.5501
https://blog.csdn.net/weixin_50464560/article/details/119711472
總結
以上是生活随笔為你收集整理的Spring Boot框架敏感信息泄露的完整介绍与SRC实战(附专属字典与PoC)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sqlmap (--os-shell)的
- 下一篇: Spring boot的简单用法