Django debug page XSS漏洞(CVE-2017-12794)分析

Django debug page XSS漏洞(CVE-2017-12794)

在使用Postgres数据库并触发异常的时候,psycopg2会将字段名和字段值全部抛出。那么,如果字段值中包含我们可控的字符串,又由于0x02中说到的,这个字符串其实就会被设置成__cause__,最后被显示在页面中。

所以我们假设有如下场景:

  1. 用户注册页面,未检查用户名
  2. 注册一个用户名为<script>alert(1)</script>的用户
  3. 再次注册一个用户名为<script>alert(1)</script>的用户
  4. 触发duplicate key异常,导致XSS漏洞

访问http://your-ip:8000/create_user/?username=<script>alert(1)</script>创建一个用户,成功;再次访问http://your-ip:8000/create_user/?username=<script>alert(1)</script>,触发异常:

可见,Postgres抛出的异常为

1
2
duplicate key value violates unique constraint "xss_user_username_key"
DETAIL: Key (username)=(<script>alert(1)</script>) already exists.

这个异常被拼接进The above exception () was the direct cause of the following exception,最后触发XSS。

0%