0%

复现cve-2021-33026

cve-2021-33026复现

cve-2021-3302

poc地址

前言

这个五六月份的漏洞前几天看到了有poc公开了,看了下是flask + pickle + flask-caching的洞,就想着能不能复现一下

漏洞复现

环境搭建

环境基本上没什么问题,建一个虚拟环境然后pip改装的包装装全,python需要>=3.5这是flask-caching的要求

然后这个poc是对memcache的,所以装一个

flask代码

这是我根据它poc里面描述来写的,

提示memcache里面存储的必须是会话cookie然后看它的截图我就给每此请求分配了一个uuid

然后按照我的理解,他的poc

然后为了满足他的session:uuid的形式我在函数里实现类下,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from flask import Flask, session, request, Response
from flask.json import jsonify
from flask_caching import Cache
import pickle
import memcache
import uuid
some_data = ['some', 'data']

mc = memcache.Client(['127.0.0.1:11211'], debug=0)


cache = Cache()
flask_app = Flask(__name__)
flask_app.secret_key = b'xxxxx'

cache.init_app(flask_app, {"CACHE_TYPE": "memcached"})


@flask_app.route('/', methods=['GET'])
def cve_2021_33026():
#没复现成功的关键应该在这,按照poc的意思是要将cookies反序列化?
#cookie = str(uuid.uuid4())
#resp = Response("set-Cookie")
#resp.set_cookie('session', cookie)
#stote = pickle.dumps(cookie)
#mem_key = 'session:' + cookie
#mc.set(mem_key, stote)
#pickle.loads(mc.get(mem_key))
return "ok"


if __name__ == "__main__":
flask_app.run(host='0.0.0.0', debug=True, port=5006)

然后尝试了一下是否可以通过脚本…

提示success但是

也就是说cmd中的命令完全没有执行…

只是又发了一边请求而不是指定的命令…

应该是我的函数写的有点问题…

再琢磨琢磨