freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

深度解析丨Spring框架远程命令执行漏洞复现及流量特征分析(CVE-2022-22965)
六方云 2022-12-06 09:27:51 230229
所属地 北京

01.漏洞详情

1、漏洞简介

2022年3月30日,Spring框架曝出RCE 0day漏洞,国家信息安全漏洞共享平台(CNVD)已收录了Spring框架远程命令执行漏洞(CNVD-2022-23942),考虑到Spring框架的广泛应用,漏洞被评级为危险。

通过该漏洞可写入webshell以及命令执行。在Spring框架的JDK9版本(及以上版本)中,远程攻击者可在满足特定条件的基础上,通过框架的参数绑定功能获取AccessLogValve对象并注入恶意字段值,从而触发pipeline机制并写入任意路径下的文件。

2、漏洞利用条件

  • Apache Tomcat作为Servlet容器;

  • 使用JDK9及以上版本的Spring MVC框架;

  • Spring框架以及衍生的框架spring-beans-*.jar文件或者存在

3、漏洞影响范围

  • JDK JDK 9+

  • Spring Framework 5.3.18+ 5.2.20+

docker已经配置好jdk环境。docker中的环境与宿主机jdk环境无关,只是当时做实验的时候,刚好也装了jdk9,记录了一下安装过程。

ubuntu下jdk9安装:

官网下载jdk,放入解压到路径/usr/lib/jvm

利用update-alternatives 进行jdk版本切换

数字越大,优先级越高

执行命令:

1.jpg

修改配置:

2.jpg

检查一下:

3.jpg

每一个命令都是auto 模式,这样才会自动选择优先级高的。为了确保,可以不用管现在的状态,直接设置一遍这些命令为auto模式。

4.jpg

版本检查:

5.jpg

02.环境配置

主机系统:Apple M1,macOS Ventura version13.0

虚拟机系统(docker靶场系统):ubuntu 20.04.2 x86 (腾讯云服务器)

03.漏洞复现

靶场项目:https://github.com/vulhub/vulhub

1、ubuntu安装docker

源:https://lug.ustc.edu.cn/wiki/mirrors/help/docker/

6.jpg

2、安装pip

7.jpg

3、安装docker-compose

8.jpg

4、启动靶场环境

9.jpg

可能遇到的问题:卡在了pulling阶段

因为docker加速器超时导致pull不下来,改成国内镜像

10.jpg

添加以下内容:

11.jpg

重启

12.jpg

13.jpg

5、漏洞版本验证

进入docker控制台

14.jpg

JDK

15.jpg

04.利用链

利⽤class对象构造利⽤链,对Tomcat的日志配置进行修改

然后,向⽇志中写⼊shell

16.jpg

1、构造payload

17.jpg

2、GET发送

18.jpg

19.jpg

服务器上验证,确实已经生成了jsp

20.jpg

3、访问写入的webshell文件

21.jpg

22.jpg

4、清空

23.jpg

总体来说,这个漏洞的利用方法会修改目标服务器配置,导致目标需要重启服务器才能恢复,实际测试中需要格外注意。

05.反弹shell

1、用msf生成木马

24.jpg

Lhost是监听机器的ip。因为目标机也是公网中的,所以监听机器也需要是公网IP,这样才能访问到。

msf生成的shell.elf是在本地的,需要自己想办法传到服务器上。

25.jpg

26.jpg

2、木马上传

正常情况下,应该是在公网的vps下面生成elf,然后wget下载。但我这次在本地生成的,所以直接scp拷到服务器上去。

宿主机向docker传输文件

27.jpg

28.jpg

3、赋予木马权限

29.jpg

30.jpg

4、msf开启监听

在公网服务器上

ubuntu快速安装msf:https://www.cnblogs.com/tomyyyyy/p/12813299.html

31.jpg

5、执行木马

32.jpg

06.抓包

过滤语句:ip终点选靶机的IP,起点选择攻击机的IP。

因为靶场走的8080端口,http协议,所以筛选条件加上http协议。

33.jpg

34.jpg

追随No.1277和1566的http流

07.特征流量分析

1、pipeline.first.pattern

35.jpg

对get头进行解码:

36.jpg

37.jpg

2、pipeline.first.suffix

38.jpg

3、parent.pipeline.first.directory

39.jpg

4、pipeline.first.prefix

40.jpg

5、pipeline.first.fileDateFormat

41.jpg

08. 漏洞规则

规则思路如下:

42.jpg

09. snort规则验证

snort的各种配置以及环境,见以前的blog:http://985.so/b0etg

把刚刚抓到的数据包放进snort环境中,把写好的规则文件也放进环境中。

1、规则配置

把规则文件放进规则路径,并修改snort.conf配置

43.jpg

44.jpg

2、修改snort.conf的内容

设置需要保护的ip地址

45.jpg

46.jpg

47.jpg

48.jpg

49.jpg

50.jpg

在setp6里,设置输出

51.jpg

52.jpg

翻到最下面,找到规则集列表。

打开local.rules的注释,以允许snort装载个性化规则集。

53.jpg

54.jpg

保存编辑:wq

3、测试是否能正常工作

55.jpg

4、运行成功

56.jpg

5、规则验证

57.jpg

10. 修复及防范措施

1、漏洞排查

  • JDK版本号排查

在业务系统的运行服务器上,执行java -version命令查看运行的JDK版本,如果版本号小于等于8,则不受漏洞影响

  • Spring框架使用情况排查

如果业务系统项目以war包形式部署,按照如下步骤进行判断:

64.jpg

65.jpg

如果业务系统项目以jar包形式直接独立运行,按照如下步骤进行判断:

66.jpg

2、漏洞影响

  • JDK版本号在9及以上的

  • 使用了spring框架或衍生框架

3、漏洞修复建议

67.jpg

4、安全产品部署该漏洞的防范规则,现已加入六方云工业互联网安全产品体系。

  • 在网络出口位置部署六方云防火墙,并及时更新特征库;
  • 部署六方云网络威胁检测与回溯系统,及时发现未知威胁。

11. 附录:snort 文件部署路径

1、snort安装包所在路径、相关文档

58.jpg

  • doc:snort的一些说明文档所在文件夹

2、snort规则文件、配置文件

59.jpg

3、snort日志文件

60.jpg

4、snort运行

61.jpg

5、规则路径

62.jpg

6、配置路径

63.jpg

# 网络安全 # 漏洞复现
本文为 六方云 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
六方云 LV.8
北京六方云科技有限公司
  • 367 文章数
  • 42 关注者
油气管道安全解决方案:六方云助力能源安全稳定运行
2025-03-31
六方云 安全态势周刊丨第337期
2025-03-20
智能·高效·合规丨六方云轨道交通综合监控系统安全方案
2025-03-20
文章目录