nashorn

S2-052

馋奶兔 提交于 2020-10-31 08:10:18
前言 S2-052的RCE漏洞和以前的有些不同,不再是ognl表达式注入了,而是xml反序列化漏洞导致的RCE(另外还有S2-055漏洞是fastjson的反序列化漏洞)。我复现的时候遇到一个坑,导致一直复现不成功,就是必须要jdk1.8以上的版本才行。 正文 之前讲过执行action之前会先经过一些内置的拦截器,使用rest插件之后也是类似的,只不过经过的拦截器有变化了,如下图: 这次的漏洞就出现在ContentTypeInterceptor中,debug进去看看: 可以看到,通过getHandlerForRequest获得一个Handler后,调用handler的toObject方法,而输入的参数就是请求body,跟进getHandlerForRequest: 发现是通过请求头Content-Type来选择对应的Handler的,这是的漏洞就出现在,当Content-Type时会选用XStreamHandler,调用它的toObject() 很明显,调用了Xstream的fromXML方法,导致了xml的反序列化漏洞。 发送一个post请求,修改请求头信息为Content-Type: application/xml,发送post数据就是POC了,使用marshalsec工具( https://github.com/mbechler/marshalsec)生成如下poc:

Java 8 新特性

孤街醉人 提交于 2020-08-14 06:08:04
Java 8 新特性 1.写在前面 自学Java已经快要一年了,一直用的都是Java8,在虎牙实习参与的项目中,大量地使用到了Java8的新特性:Lambda表达式和Stream流式计算,它们脱离了数据库层面的运算,直接在内存中对数据做过滤、统计等操作,给应用程序的效率带来了极大的提升。今天趁着需求写完了的空闲时间,来学习并总结一下Java 8的新特性。 2.Lambda 表达式 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。 基本的语法格式为: ( parameters ) - > expression 或 ( parameters ) - > { statements ; } 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。 简单实例: // 1. 不需要参数,返回值为 5 ( ) - > 5 // 2. 接收一个参数(数字类型),返回其2倍的值 x - > 2 * x

聊聊maxwell的Scripting

只愿长相守 提交于 2020-07-27 00:19:25
序 本文主要研究一下maxwell的Scripting Scripting maxwell-1.25.1/src/main/java/com/zendesk/maxwell/scripting/Scripting.java public class Scripting { static final Logger LOGGER = LoggerFactory.getLogger(Scripting.class); private final ScriptObjectMirror processRowFunc, processHeartbeatFunc, processDDLFunc; private ScriptObjectMirror getFunc(ScriptEngine engine, String fName, String filename) { ScriptObjectMirror f = (ScriptObjectMirror) engine.get(fName); if ( f == null ) return null; else if ( !f.isFunction() ) { throw new RuntimeException("Expected " + fName + " to be a function!"); } else { LOGGER.info(

Java-Runoob-高级课程:Java 8 新特性

瘦欲@ 提交于 2020-05-01 04:46:55
ylbtech-Java-Runoob-高级课程:Java 8 新特性 1. 返回顶部 1、 Java 8 新特性 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持 函数式编程 ,新的 JavaScript 引擎 ,新的 日期 API ,新的 Stream API 等。 新特性 Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允许把函数作为一个方法的参数( 函数作为参数传递进方法中 )。 方法引用 − 方法引用提供了 非常有用的语法 ,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的 构造更紧凑简洁,减少冗余代码 。 默认方法 − 默认方法就是 一个在接口里面有了一个实现的方法 。 新工具 − 新的编译工具,如: Nashorn引擎 jjs 、 类依赖分析器jdeps 。 Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中 。 Date Time API − 加强对日期与时间的处理。 Optional 类 − Optional 类已经成为 Java 8 类库的一部分, 用来解决空指针异常 。

侠说java8--Stream流操作学习笔记,都在这里了

帅比萌擦擦* 提交于 2020-02-26 09:19:57
前言 首次接触到Stream的时候以为它是和InputStream、OutputStream这样的输入输出流的统称。 流和集合的前世今生 概念的差异 在开发中,我们使用最多的类库之一就是集合。集合是一种内存中的数据结构,用来保存对象数据,集合中的每个元素都得先算出来才能添加到集合中,相比之下: 集合用特定数据结构(如List,Set或Map)存储和分组数据。但是,流用于对存储的数据(例如数组,集合或I / O资源)执行复杂的数据处理操作,例如过滤,匹配,映射等。由我们可以知道: 集合主要是存储数据,而流主要关注对数据的操作。 数据修改 我们可以添加或删除集合中的元素。但是,不能添加或删除流中的元素。流是通过消费数据源的方式,对其执行操作并返回结果。它不会修改数据源头。 内部迭代和外部迭代 Java8提供的 Streams的主要特点是我们不必担心使用流时的迭代。流在后台为我们内部执行迭代。我们只需关注在数据源上需要执行哪些操作即可。 循环遍历 流只能遍历一次。如果你遍历该流一次,则将其消耗掉。要再次遍历它,必须再次从数据源中获取新的流。但是,集合可以遍历多次。 惰性求值(懒汉or饿汉) 相信大家都知道单例模式中的两种模式,懒汉式和饿汉式,在这里也可以相似的理解。 集合以饿汉式迅速的构建,即是所有元素都在开始时就进行了计算。但是,流是延迟构造的,即在调用终端操作之前不会去计算中间操作

Java8,java9和java11的特性与区别!

爱⌒轻易说出口 提交于 2020-02-26 05:02:30
Java8,java9和java11的特性总结! Java 8 的主要新特性 1. Lambda 表达式 Lambda 允许把函数作为一个方法的参数传递进方法中。 作用:解决 Java 被诟病的匿名内部类的问题。 2. 接口中可增加了默认方法 作用:在接口中也可以有实现方法了。 3. HashMap 底层数据结构的变化 java 8 之前,HashMap 底层的数据结构是数组+链表实现的, Java 8 之后是数组+链表+红黑树实现的,当链表的长度超过 8 之后,会转换成红黑树。 作用:解决因哈希冲突导致的链表过长,查询效率低的问题。 4. Stream API 新添加 Stream API (java.util.stream),把真正函数式编程的风格引入 Java。 5. 提供一个新的 JavaScript 引擎 Java 8 提供了一个新的 Nashorn JavaScript 引擎,它允许在 JVM 上运行特定的 JavaScript 应用。 作用:解决日益增长的 Java 跟 JS 交互混合的需求。 Java 9 新特性 1. 模块系统 模块是一个包的容器,Java 9 最大的变化之一是引入模块系统。(Jigsaw 项目) 作用:解决大型项目模块化开发的需求。 2. 支持 HTTP/2 标准 HTTP/2 标准是 HTTP 协议的最新版本,新的 HTTPClient API

Why does Array.prototype.filter() throw an error in Magnolia JavaScript models?

若如初见. 提交于 2020-02-26 00:52:27
问题 I'm attempting to filter a FreeMarker list in a Magnolia JavaScript model using Array.prototype.filter(). List [#assign list = [1, 2, 3]] Model var Model = function() { this.filterList = function(list) { return list.filter(function(item) { return item === 2 }); } }; new Model(); Usage ${model.filterList(list)} However, I get the following error. Caused by: jdk.nashorn.internal.runtime.ECMAException: TypeError: list.filter is not a function Nashorn was implemented using ECMAScript-262 5.1. The

Nashorn under Java 7

你。 提交于 2020-01-28 10:44:17
问题 I'm trying to get Oracle's Nashorn running under Java 7. I've cloned the repo and compiled the source. All I had to do to get it to compile was: Change jdk.internal.org.objectweb.asm.* to org.objectweb.asm.* Change one line that had Long.hashCode() static. Everything seems happy, and Java 7 sees Nashorn as a scripting engine; but when I try and get an instance: NashornScriptEngineFactory factory = new NashornScriptEngineFactory(); ScriptEngine engine = factory.getScriptEngine(); I get the

How to declare class in Java Nashorn?

自古美人都是妖i 提交于 2020-01-24 17:25:50
问题 I know that i can extend abstract classes and interfaces through Java.extend , but how can i add custom methods, constructors and fields in class? I tried to like this, but it's not works: var MyClass = Java.extend(java.lang.Object, { myField1: java.lang.String, myField2: java.lang.Object, "<init>": function(arg1, arg2) { // Try to declare constructor }, myMethod: function(arg1, arg2, arg3) { // Try to declare method } }); 回答1: As A. Sundararajan correctly states, you can't add new features

Maximo JS automation script: “importPackage” is not defined

佐手、 提交于 2020-01-06 04:57:25
问题 I'm attempting to use a JS script from Maximo 76 Scripting Features (PDF download). importPackage(java.util) importPackage(Packages.psdi.server) var ctx = new HashMap(); ctx.put("url","http://localhost:7001/maximo/oslc/script/countryapi?_lid=wilson&_lpwd=wilson"); service.invokeScript("LIB_HTTPCLIENT",ctx); var jsonResp = ctx.get("response"); var countries = JSON.parse(jsonResp); When I execute the script I get this error: ReferenceError: "importPackage" is not defined in <eval> at line