[CVE-2018-14574] Django Open redirect possibility in CommonMiddleware

栏目: Python · 发布时间: 7年前

内容简介:今天在刷RSS的时候看到了Django发了个新版本,修了个CVE,然后简单的看了下。先放上release note和github的commit。https://www.djangoproject.com/weblog/2018/aug/01/security-releases/

今天在刷RSS的时候看到了Django发了个新版本,修了个CVE,然后简单的看了下。

先放上release note和github的commit。

https://www.djangoproject.com/weblog/2018/aug/01/security-releases/

https://github.com/django/django/commit/a656a681272f8f3734b6eb38e9a88aa0d91806f1

看描述是修复了一个CommonMiddleware+APPEND_SLASH选项的任意URL跳转,根据github上修改的几个文件,可以看出来,主要变动是在 django/middleware/common.py 这个文件中,对获取到的 path 进行了一次编码。

众所周知,漏洞中提到的这个 APPEND_SLASH 的选项,默认为True,且默认没有在 settings.py 中显示的设置。这个设置的作用也比较简单,当请求的URL在路由表中无法匹配时,并且请求的URL末尾不是以 / 结尾的,那么Django会自动在请求的URL末尾添加一个 / ,并且再次匹配路由表,然后进行正常的处理流程;

也就是说,在这个过程中,会发生一次跳转,那么这个任意URL跳转漏洞应当也是在这块出现的,我们新建一个Django项目,使用 2.0.7 版本。

urls.py

from django.urls import path
from vuln.views import VulnView

urlpatterns = [
    path("<path:jump_url>/", VulnView.as_view(), name="vuln_view"),
]

views.py

from django.views import View
from django.http import HttpResponse


class VulnView(View):
    def get(self, request, jump_url):
        return HttpResponse(jump_url)

然后我们在 CommonMiddleware 这个类中的 process_request 方法下断:

[CVE-2018-14574] Django Open redirect possibility in CommonMiddleware

然后请求 http://localhost:8000//lightless.me ,注意末尾不能加 / ,调试的时候建议将浏览器的cache关掉,否则会影响我们调试。

向下走会遇到一个 should_redirect_with_slash 方法,这个方法是用来判断上面提到过的逻辑:是否需要添加 / 后重新匹配路由表,如果需要添加,会继续调用 self.get_full_path_with_slash 方法,实际上就是对 request.get_full_path 的一层封装。

然后我们会拿到处理过后的path //lightless.me/ ,接着就会将这个path传给 self.response_redirect_class 方法,这个实际上就是用来处理重定向的一个类。

跟进之后,会看到在这里设置了Response的Location属性为前面得到的path,并且设置了状态码为301

[CVE-2018-14574] Django Open redirect possibility in CommonMiddleware

虽然这里会检查跳转目标URL的协议,但是并没有什么用,这里的 scheme 不存在,自然是可以绕过这个限制,后面就是正常跳转流程。

让程序继续跑下去,回过来看浏览器,页面已经跳走了。

整个流程还是比较简单的,但是利用条件也比较苛刻,可能会在一些大型的CMS或其他的系统中出现吧,例如某些CMS会接管Django的路由并且使用自己的路由系统,感觉可能也不太常见。通常情况下我们的路由很有可能是写成这个样子:

path('vuln/<path:jump_url>/', VulnView.as_view(), name="vuln_view"),

很有可能中间还会有个路径,而不是直接就接收参数,这种情况下我目前还没有想到好的利用方法。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入浅出 HTTPS:从原理到实战

深入浅出 HTTPS:从原理到实战

虞卫东 / 电子工业出版社 / 2018-6 / 89

本书是一本专业的HTTPS书籍,全面讲解了HTTPS领域的相关知识,内容包括密码学、OpenSSL命令行、证书、TLS协议、HTTPS网站性能优化、HTTPS网站优秀实践、大型网站HTTPS架构设计等。本书有几个特点:(1)内容全面而新颖,基于RFC文档、国外书籍、社区等一手资料,总结了大部分最新的HTTPS知识;(2)由浅入深,从基础到进阶全面掌握HTTPS,读者能够轻松构建一个HTTPS网站,......一起来看看 《深入浅出 HTTPS:从原理到实战》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具