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