Django任意代码执行

- AV AC AU C I A
发布: 2025-04-13
修订: 2025-04-13

##SECRET_KEY作用 SECTET_KEY在djanog中使用非常广泛,基本上涉及到安全,加密等的地方都用到了,下面列举一些常见情景: 1,json object的签名 2,加密函数,如密码重置,表单,评论,csrf的key,session数据 这里面就要重点讲到session的问题,在这里使用不当就会导致代码执行 ##代码执行 ###settings的session设置 django默认存储session到数据库中,但是可能会比较慢,就会使用到缓存,文件,还有cookie等方式,如果采用了cookie机制则有可能代码执行,settings配置如下: <pre> SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' </pre> ###django 1.6以下 在django1.6以下,session默认是采用pickle执行序列号操作,在1.6及以上版本默认采用json序列化。代码执行只存在于使用pickle序列话的操作中。 ###session处理流程 可以简单的分为两部分,process_request和process_response,前者负责选择session引擎,初始化cookie数据。见代码 <pre> class SessionMiddleware(object): def process_request(self, request): engine = import_module(settings.SESSION_ENGINE) session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None) </pre> process_response则是处理返回给用户的cookie信息,比如修改过期时间等。在将session存入缓存后,可能在某个操作中会用到session信息,这个时候就会通过反序列化操作从缓存中取,如果反序列话引擎是采用pickle机制的话就存在代码执行。反序列化的代码位于django.core.signing.py中,这个模块主要是一些签名,加解密操作,同时也包含序列化和反序列化,默认采用JSON引擎,下面是反序列话loads的代码: <pre> def loads(s,...

0%
暂无可用Exp或PoC
当前有0条受影响产品信息