# (CVE-2017-12794)Django debug page XSS漏洞
===
一、漏洞简介
————
Django 发布了新版本1.11.5,修复了500页面中可能存在的一个 XSS 漏洞
二、漏洞影响
————
Django \< 1.11.5 三、复现过程 ------------ 经过我的测试,我发现在使用Postgres数据库并触发异常的时候,psycopg2会将字段名和字段值全部抛出。那么,如果字段值中包含我们可控的字符串,又由于0x02中说到的,这个字符串其实就会被设置成`__cause__`,最后被显示在页面中。 所以我们假设有如下场景: 1. 用户注册页面,未检查用户名 2. 注册一个用户名为`alert(1)`的用户 3. 再次注册一个用户名为`alert(1)`的用户 4. 触发duplicate key异常,导致XSS漏洞 访问`http://www.0-sec.org:8000/create_user/?username=alert(1)`创建一个用户,成功;再次访问`http://www.0-sec.org:8000/create_user/?username=alert(1)`,触发异常: ![](/static/qingy/(CVE-2017-12794)Django_debug_page_XSS漏洞/img/rId24.png) 可见,Postgres抛出的异常为 duplicate key value violates unique constraint "xss_user_username_key" DETAIL: Key (username)=() already exists.
这个异常被拼接进`The above exception ({{ frame.exc_cause }}) was the direct cause of the following exception`,最后触发XSS。
请登录后查看评论内容