实用蓝队工具| Sysmon分享

admin 2022年10月27日21:39:51评论60 views字数 4883阅读16分16秒阅读模式

背景

使用 springboot 时, 当用户向/functionRouter 路由发送 headers 带有 spring.cloud.function.routing-expression 键的 POST 包时,会触发 SPEL 解析该键值

影响范围

3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2

环境搭建

实用蓝队工具| Sysmon分享

实用蓝队工具| Sysmon分享

实用蓝队工具| Sysmon分享

实用蓝队工具| Sysmon分享

最后修改参数 pom.xml 里面的参数让 spring 的版本在漏洞影响范围即可

实用蓝队工具| Sysmon分享

实用蓝队工具| Sysmon分享

什么是 Sysmon

System Monitor (Sysmon) 是一种 Windows 系统服务和设备驱动程序,一旦安装在系统上,它就会在系统重新启动后保持驻留,以监视系统活动并将其记录到 Windows 事件日志中。

参考文档

https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon

本文使用的工具

https://github.com/nshalabi/SysmonTools

工具的配置文件

https://github.com/SwiftOnSecurity/sysmon-config

如何使用

Install: sysmon64 -i [<configfile>]
Update configuration: sysmon64 -c [<configfile>]

Install event manifest: sysmon64 -m
Print schema: sysmon64 -s
Uninstall: sysmon64 -u [force]

如果我们使用 payload 执行命令,我们可以检查 sysmon 日志,并且可以查看我执行了哪个命令

实用蓝队工具| Sysmon分享

实用蓝队工具| Sysmon分享

补充说明

原理:

漏洞是出在 SpringCloud Function 的 RoutingFunction 功能上,其功能的目的本身就是为了微服务应运而生的,可以直接通过 HTTP 请求与单个的函数进行交互,同时 spring.cloud.function.definition 参数提供要调用的函数的名称。

调用反转字符串的函数

POST /functionRouter HTTP/1.1
Host: localhost:8080
spring.cloud.function.definition: reverseString
Content-Type: text/plain
Content-Length: 3
world

其结果就会在页面上输出 dlrow,因此我们只需要在 header 头上指定要调用的函数名称就可以对其进行调用。
漏洞是存在于 header 头的 spring.cloud.function.routing-expression 参数
从 SpringCloud Function 的 Controller 处理来一步步 follow。
在 org.springframework.cloud.function.web.mvc.FunctionController#post 方法 breakpiont 程序会判断当前请求是否为 RoutingFunction,并将请求的内容和 Header 头编译成 Message 带入到 FunctionInvocationWrapper.apply 方法中,随后又进入其中的 doApply 方法
最后进入到 org.springframework.cloud.function.context.config.RoutingFunction#route 方法中
在这里判断了请求 headers 头中有没有 spring.cloud.function.routing-expression 参数
并将结果带入到 this.functionFromExpression()方法中
最终直接由 SpelExpressionParser 来解析,导致 Spel 表达式注入

自搭环境

小 tips: 坑 1 project modules sdk java 版本需保持一致 不然 maven 报错 坑 2 SpringBoot 没有主清单属性 网上修改的 pom 中缺少

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

漏洞修复

官方修复 判断变量是否从 header 头中读取,否则进入安全函数来解析

补充日志说明

日志名称:          Microsoft-Windows-Sysmon/Operational
来源:            Microsoft-Windows-Sysmon
日期:            2022/4/6 18:06:02
事件 ID:         1
任务类别:          Process Create (rule: ProcessCreate)
级别:            信息
关键字:
用户:            SYSTEM
计算机:           10_0_0_10
描述:
Process Create:
RuleName: -
UtcTime: 2022-04-06 10:06:02.181
ProcessGuid: {8df5b70d-660a-624d-a802-00000000a100}
ProcessId: 3928
Image: C:WindowsSystem32calc.exe
FileVersion: 6.3.9600.17667 (winblue_r8.150123-1500)
Description: Windows Calculator
Product: Microsoft® Windows® Operating System
Company: Microsoft Corporation
OriginalFileName: CALC.EXE
CommandLine: calc
CurrentDirectory: C:webtest
User: 10_0_0_10Administrator
LogonGuid: {8df5b70d-573d-624d-4730-030000000000}
LogonId: 0x33047
TerminalSessionId: 2
IntegrityLevel: High
Hashes: SHA256=5543A258A819524B477DAC619EFA82B7F42822E3F446C9709FADC25FDFF94226
ParentProcessGuid: {8df5b70d-5a01-624d-ce00-00000000a100}
ParentProcessId: 788
ParentImage: C:javajdk-15binjava.exe
ParentCommandLine: java  -jar SpringCloud-Function-0.0.1-SNAPSHOT.jar
ParentUser: 10_0_0_10Administrator
事件 Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Sysmon" Guid="{5770385F-C22A-43E0-BF4C-06F5698FFBD9}" />
    <EventID>1</EventID>
    <Version>5</Version>
    <Level>4</Level>
    <Task>1</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8000000000000000</Keywords>
    <TimeCreated SystemTime="2022-04-06T10:06:02.181964400Z" />
    <EventRecordID>60</EventRecordID>
    <Correlation />
    <Execution ProcessID="748" ThreadID="3404" />
    <Channel>Microsoft-Windows-Sysmon/Operational</Channel>
    <Computer>10_0_0_10</Computer>
    <Security UserID="S-1-5-18" />
  </System>
  <EventData>
    <Data Name="RuleName">-</Data>
    <Data Name="UtcTime">2022-04-06 10:06:02.181</Data>
    <Data Name="ProcessGuid">{8DF5B70D-660A-624D-A802-00000000A100}</Data>
    <Data Name="ProcessId">3928</Data>
    <Data Name="Image">C:WindowsSystem32calc.exe</Data>
    <Data Name="FileVersion">6.3.9600.17667 (winblue_r8.150123-1500)</Data>
    <Data Name="Description">Windows Calculator</Data>
    <Data Name="Product">Microsoft® Windows® Operating System</Data>
    <Data Name="Company">Microsoft Corporation</Data>
    <Data Name="OriginalFileName">CALC.EXE</Data>
    <Data Name="CommandLine">calc</Data>
    <Data Name="CurrentDirectory">C:webtest</Data>
    <Data Name="User">10_0_0_10Administrator</Data>
    <Data Name="LogonGuid">{8DF5B70D-573D-624D-4730-030000000000}</Data>
    <Data Name="LogonId">0x33047</Data>
    <Data Name="TerminalSessionId">2</Data>
    <Data Name="IntegrityLevel">High</Data>
    <Data Name="Hashes">SHA256=5543A258A819524B477DAC619EFA82B7F42822E3F446C9709FADC25FDFF94226</Data>
    <Data Name="ParentProcessGuid">{8DF5B70D-5A01-624D-CE00-00000000A100}</Data>
    <Data Name="ParentProcessId">788</Data>
    <Data Name="ParentImage">C:javajdk-15binjava.exe</Data>
    <Data Name="ParentCommandLine">java  -jar SpringCloud-Function-0.0.1-SNAPSHOT.jar</Data>
    <Data Name="ParentUser">10_0_0_10Administrator</Data>
  </EventData>
</Event>


原文始发于微信公众号(Aaron与安全的那些事):实用蓝队工具| Sysmon分享

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年10月27日21:39:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   实用蓝队工具| Sysmon分享http://cn-sec.com/archives/1374887.html

发表评论

匿名网友 填写信息