Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 遵守 BSD 版权,初次发布于 2005 年 7 月, 并于 2008 年 9 月发布了第一个正式版本 1.0 。
新版本1.11.5,修复了1.11.4中500页面中可能存在的一个XSS漏洞。
开启环境
docker启动vluhub中的CVE-2017-12794的漏洞环境。(这里就不叙述怎么搭建vulhub)
使用命令docker-compose up -d 启动
查看端口docker-compose ps 查看端口
下载git clone https://github.com/django/django.git
查看官方修复发布的1.11.5与1.11.4有什么不同
发现关闭了autoescape全局转义(红色为1.11.4),以及在{% ifchanged frame.exc_cause %}{% if frame.exc_cause %}的条件句中,1.11.4同时也关闭了force_escape的过滤报错。
查看报错函数是进行如何处理的
首先定义了dj错误类型数组,以及获取了db的错误类型,判断出现错误类型是否在db的错误类型中,如果存在,则将dj.exc.value.__cause__=exc.value (图上没有可能是因为在1.11.5版本下),直接将错误的值传给__cause__,而在500页面中会输出__cause__的值。
那么我们直接开始复现
http://127.0.0.1:8000/create_user/?username=%3Cscript%3Ealert(%27nncx%27)%3C/script%3E
再次执行此payload可以出发xss漏洞。
复现成功。