0x01 命令注入 在开发过程中,开发人员可能需要对系统文件进行移动、删除或者执行一些系统命令,这时如果执行的命令用户可控,就会导致命令执行漏洞。...java 程序中执行系统命令的函数如下: Runtime.exec Process ProcessBuilder.start GroovyShell.evaluate ... 2、命令注入的限制 对于系统命令...,可以使用连接符来执行多条语句,常见连接符及含义如下: ; 多个命令顺序执行,命令之间无任何逻辑关系 | 前面命令输出结果作为后面命令的输入内容 || 逻辑或,当前面命令执行失败后,后面命令才会执行...,否则后面命令不执行 & 前面命令执行后继续执行后面命令 && 逻辑与,当前面命令执行成功后,后面命令才会执行,否则后面命令不执行 对于 Java 环境中的命令注入,连接符的使用存在一些限制,...与命令注入相比,代码注入更具有灵活性,例如在 Apache Commons collections 反序列化漏洞中直接使用 Runtime.getRuntime().exec() 执行系统命令是无回显的
工具类 package cn.stylefeng.guns.modular.task; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory...try { Runtime rt = Runtime.getRuntime(); /** * 这是在windows下使用得数据备份命令...每天2点定时执行得定时任务 package cn.stylefeng.guns.modular.task; import cn.stylefeng.guns.modular.system.model.Notice...; import cn.stylefeng.guns.modular.system.service.INoticeService; import org.apache.commons.lang3.StringUtils...; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired
Apache Struts 2.0.0至2.3.14.2版本中存在远程命令执行漏洞。...打开靶机: 虽然我们知道这是含有Apache Struts2远程代码执行漏洞(S2-015)的靶机,不过我们还是按照正常步骤来测试一下,我用的是Struts2-Scan扫描工具,在此附上下载链接和使用方法...@toString(@java.lang.Runtime@getRuntime().exec(‘ls’).getInputStream()),#q}.action 当然,要经过url编码才能使用: /%...Apache Struts2远程代码执行漏洞(S2-015)修复 Apache Struts2远程代码执行漏洞(S2-015)修复 注意 更新Struts版本可能出现兼容性问题,导致业务无法正常运行。.../dist/struts/2.5.22/struts-2.5.22-min-lib.zip 打开cmd命令提示符,执行命令,得到文件SHA256。
(比如:'id')的属性值进行二次表达式解析,因此当这些标签属性中使用了'%{x}'且'x'的值用户可控时,用户再传入一个'%{payload}'即可造成OGNL表达式执行,S2-061是对S2-059...id=%25%7b8%2a8%7d命令执行SSRF测试POST /SimpleStruts_war_exploded/S2061.action HTTP/1.1Host: 192.168.174.149...(#execute.exec(#arglist))}------WebKitFormBoundaryl7d1B1aGsV2wcZwF--DNSLog回显:执行系统命令POST /SimpleStruts_war_exploded.../>总体限制归纳如下:无法直接执行命令无法new一个对象无法使用反射机制无法调用静态方法无法调用方法属性非public的方法无法调用黑名单类和包的方法、属性同时在struts2在ognl.OgnlRuntime...,但是我们清空了黑名单之后就可以实例化任意黑名单中的类,看下黑明单包中的类freemarker.template.utility.Execute,存在无参构造方法Execute(),exec方法可以直接执行命令
Commons Collections的最新版是4.4,但是使用比较广泛的还是3.x的版本。其实,在3.2.1以下版本中,存在一个比较大的安全漏洞,可以被利用来进行远程命令执行。...问题复现 这个问题主要会发生在Apache Commons Collections的3.2.1以下版本,本次使用3.1版本进行测试,JDK版本为Java 8。...也就是说,使用这个类,理论上可以执行任何方法。那么,我们就可以利用这个类在Java中执行外部命令。...我们知道,想要在Java中执行外部命令,需要使用Runtime.getRuntime().exec(cmd)的形式,那么,我们就想办法通过以上工具类实现这个功能。...至此,我们知道可以利用InvokerTransformer来调用外部命令了,那是不是只需要把一个我们自定义的InvokerTransformer序列化成字符串,然后再反序列化,接口实现远程命令执行:
会对某些标签属性(比如:'id')的属性值进行二次表达式解析,因此当这些标签属性中使用了'%{x}'且'x'的值用户可控时,用户再传入一个'%{payload}'即可造成OGNL表达式执行,S2-061...命令执行 SSRF测试 POST /SimpleStruts_war_exploded/S2061.action HTTP/1.1 Host: 192.168.174.149:8080 User-Agent...执行系统命令 POST /SimpleStruts_war_exploded/S2061.action HTTP/1.1 Host: 192.168.174.149:8080 User-Agent: Mozilla...new一个对象 无法使用反射机制 无法直接执行命令 无法调用静态方法 无法调用方法属性非public的方法 无法调用黑名单类和包的方法、属性 同时在struts2在ognl.OgnlRuntime#invokeMethod...,存在无参构造方法Execute(),exec方法可以直接执行命令: ?
这个框架中有一个InvokerTransformer.java接口,实现该接口的类可以通过调用java的反射机制来调用任意函数,于是我们可以通过调用Runtime.getRuntime.exec() 函数来执行系统命令...Apache commons collections包的广泛使用,也导致了java反序列化漏洞的大面积流行。...如果它必须为可序列化的,请尝试生成特定字段来保存重要数据。如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。...Apache Commons Collections中已经实现了一些常见的 Transformer,其中的 InvokerTransformer 接口实现了反射链,可以通过Java的反射机制来执行任意命令...于是我们可以通过InvokerTransformer的反射链获得Runtime类来执行系统命令 在上面的 InvokerTransformer反射链 这篇文章中我已经介绍了如何通过修改Value值来触发执行反射链来执行任意命令
这个框架中有一个InvokerTransformer.java接口,实现该接口的类可以通过调用java的反射机制来调用任意函数,于是我们可以通过调用Runtime.getRuntime.exec() 函数来执行系统命令...Apache commons collections包的广泛使用,也导致了java反序列化漏洞的大面积流行。...如果它必须为可序列化的,请尝试生成特定字段来保存重要数据。如果无法实现这一点,则应注意该数据会被公开给任何拥有序列化权限的代码,并确保不让任何恶意代码获得该权限。...Apache Commons Collections中已经实现了一些常见的 Transformer,其中的 InvokerTransformer 接口实现了反射链,可以通过Java的反射机制来执行任意命令...反射链 这篇文章中我已经介绍了如何通过修改Value值来触发执行反射链来执行任意命令。
#readObject的逻辑发生变化,导致cc1的链子在8u71之后无法使用。...() by @matthias_kaiser 该链和CC1的区别就是在调用LazyMap处使用的org.apache.commons.collections.keyvalue.TiedMapEntry...,而在个人测试中并不需要这一步骤 在构建payload的过程中序列化操作也会导致出现命令执行 接下来就是一步步解决这些问题 3.1 HashMap 和 HashSet 都可触发反序列化 关于这一点其实是非常简单的...HashMap中的方法,map.put进行的操作和上文说到的一样,hash(key)最终会调用到key.hashCode()方法,所以只要讲这个key设置为TideMapEntry对象即可 3.2 序列化操作出现命令执行...; import org.apache.commons.collections.functors.InvokerTransformer; import org.apache.commons.collections.keyvalue.TiedMapEntry
其中以redis实现分布式事务锁用起来最简单高效, redis实现分布式事务锁主要是通过它的setnx命令以及执行lua脚本实现原子操作来实现分布式事务锁,另外redis客户端也以及提供了redission...为了防止加锁的机器宕机造成的死锁问题可以通过redis对缓存key 设置过期时间来解决;而执行lua脚本是一个原子操作,同一时间只能有一个客户端在执行,这对于保证分布式高并发场景下事务的原子性和一致性是非常必要的...直接通过Redis客户端先执行get(key)判断value值是否与预期的值相等后再删除key释放锁,这种方式无法保证操作的原子性。...通过追踪方法执行链,我们会发现它们的底层其实都是通过RedisConnnection执行eval命令运行行lua脚本的。...安装在Linux服务器上的Nacos服务的启动可通过远程ssh客户端连接Linux服务器后进入nacos的bin执行单机模式启动命令(Nacos集群模式在我的1核2G的服务器上使用不同端口代替不同实例启动不了
前言Apache Commons Collections 是一个开源的 Java 工具类库,属于 Apache Commons 项目的一部分。...那么如果我们直接传入Runtime对象,并将InvokerTransformer类的类属性设置为执行命令的参数,不就可以达到命令执行的效果了嘛。...我们动调来确定是什么原因引起的:发现代码无法执行到setValue方法处。...// 在runtime实例上执行transform}该代码中分别创建了三个 InvokerTransformer 对象来依次调用,无法将多个操作连贯地组合成一个整体。...,最终执行系统命令。
以ConstantTrasformer返回的Runtime类为参数执行exec方法,达到RCE的目的。...Runtime类并调用其exec方法实现命令执行。...导致我们后面的序列化操作不能顺利执行,无法产生payload。...关于TemplatesImpl ,它也是7u21链中不可或缺的一个环节,它配合javassist起到任意类生成的作用,在该条链中可以再配合invokerTransformer来达到命令执行的目的...,结合TrAXFilter与InstantiateTransformer触发TemplatesImpl 恶意字节码的类生成并触发其构造方法达到命令执行的目的。
如果使用了以上中间件,需检测中间件安装目录是否包含apache commons collections库及其版本。特别是项目中发现使用了readObject函数。...通用修复方案 方法:更新Apache Commons Collections库至3.2.2及以上版本。 警告:此方法为中间件上游修复方案,如果使用了中间件,请查看对应中间件的修复方案。...临时方案 如果无法打补丁,以下为各中间件官方推荐的临时方案: 方式1:使用SerialKiller替换进行序列化操作的ObjectInputStream类。...强制封禁方案 严格意义说起来,Java相对来说安全性问题比较少,出现的一些问题大部分是利用反射,最终用Runtime.exec(String cmd)函数来执行外部命令的。...如果可以禁止JVM执行外部命令,未知漏洞的危害性会大大降低,可以大大提高JVM的安全性。 如下,只要在Java代码里简单加一段程序,就可以禁止执行外部程序了。
1.3 选择自己要下载的源码,下载 2.环境准备 2.1 在安装之前要安装jdk,MySQL 2.2 安装git,git是一个开源的分布式版本控制系统,一般在项目版本控制中会使用git控制.../maven2/commons-codec/commons-codec/1.7/commons-codec-1.7.jar8.8.pom 13.Download https://repo.maven.apache.org...-0.1.0-SNAPSHOT azkaban-exec 4.导入数据库 4.1 登录mysql数据库,创建azkaban数据库 mysql -u root -p123456 create database...| +--------------------------+ 29 rows in set (0.00 sec) 5.配置azkaban 5.1 /azkaban目录下执行命令...(如果和密钥库口令相同, 按回车): 输入完信息,执行完以上命令之后,在当前目录下生成一个keystore文件,将此文件复制到azkaban web服务器根目录下。
前面文章提到 cc1 利用链在 JDK8u71 版本以后的高版本下是无法使用的,而cc2链可以在有 commons-collections-4.0 的 jdk8u71 以后的高版本下使用,但commons-collections3.1...this.decorated.compare(value1, value2); } 当ChainedTransformer对象作为参数传入时就会调用ChainedTransformer#transform反射链执行命令...这就是cc2链的尾巴,之所以commons-collections3.1-3.2.1版本无法使用是因为TransformingComparator在3.1-3.2.1版本中还没有实现Serializable...TemplatesImpl类来承载payload,利用InvokerTransformer来执行TemplatesImpl类中的方法。...; Runtime.getRuntime().exec("calc"); } } 像这样我们就可以利用javassist修改字节码 命令执行点分析 命令执行点一般是构造Payload
', 'org.apache.commons.collections.functors.InstantiateTransformer', 'org.apache.commons.collections4...' 'org.apache.commons.beanutils' 若包含危险库,则使用ysoserial进行攻击复现。...ysoserial命令执行payload时经常需要到网站 https://www.jackson-t.ca/runtime-exec-payloads.html 进行负载转换, 这是因为使用了“java.lang.Runtime.exec...(String)”语句,导致命令执行存在限制, 例如不支持shell操作符,如输出重定向以及管道; 传递给payload命令的参数中不能包含空格, 比如,我们可以使用nc -lp 4444 -e /bin...如果目标应用出现“java.io.IOException”, 同时返回“Cannot run program”信息,那么很有可能选择的利用链适用于目标应用, 但尝试执行的命令无法在目标服务器上执行。
org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer...Runtime.getRuntime()) InvokerTransformer InvokerTransformer是实现了transform接口的类,它的作用是通过反射调用指定类的指定方法,并将调用结果返回,这个正是执行恶意命令的核心类...该类会对传入的Transformer数组进行链式调用,将前一个Transformer的执行结果当作参数传递到下一个,直至全部Transformer执行完毕后返回 // org.apache.commons.collections.functors.ChainedTransformer...这两条Transformer组合得到的回调顺序为:先调用ConstantTransformer并返回一个Runtime对象,然后调用InvokerTransformer,执行exec方法,参数为Calc...构造POC 尝试使用AnnotationInvocationHandler对象生成序列化数据 import org.apache.commons.collections.Transformer; import
这条链在Java 8u71以后就不能利用了,这里使用的环境是JDK8u66 取消勾选此处两个Enable IDEA中Debug时调试器会调用一些toString方法,从而造成非预期的命令执行 Java...其实不然,即使使用LazyMap仍然无法在高版本的Java中使用这条利用链,主要原因还是出在AnnotationInvocationHandler这个类的修改上 LazyMap的漏洞触发点和TransformedMap...; import org.apache.commons.collections.functors.InvokerTransformer; import org.apache.commons.collections.map.LazyMap...CommonCollections1这条利用链在高版本Java(8u71以后)中的使用问题,所以这里需要在8u71之前的版本才能成功运行并弹出计算器 完整代码 import org.apache.commons.collections.Transformer...; import org.apache.commons.collections.functors.InvokerTransformer; import org.apache.commons.collections.map.LazyMap
Apache Commons Collections是Java中应用广泛的一个库,包括Weblogic、JBoss、WebSphere、Jenkins等知名大型Java应用都使用了这个库。...Two(this): poc import org.apache.commons.collections.*; import org.apache.commons.collections.functors.ChainedTransformer...; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransformer...value + "]").setMember(annotationType.members().get(name)) AnnotationTypeMismatchExceptionProxy类对我们来说无法使用...; import org.apache.commons.collections.functors.InvokerTransformer; import org.apache.commons.collections.map.TransformedMap
环境准备 搭建好Hadoop、spark、hive、mysql等组件 mysql基础数据源,hive基本分层 Maven 配置文件 ${kafka.version} org.apache.commons... commons-lang3 ${lang3.version}命令进行运行,这里展示使用spark-shell运行 需求 将以下MySQL表全量抽取到hive表中 order_master, order_detail, coupon_info,...打开spark-shell,输入:paste 然后直接粘贴代码,之后按住快捷键Ctrl + D 执行AllExtract.main(Array.empty[String])
领取专属 10元无门槛券
手把手带您无忧上云