menu arrow_back 湛蓝安全空间 |狂野湛蓝,暴躁每天 chevron_right ... chevron_right (CVE-2017-12794)Django debug page XSS漏洞 chevron_right (CVE-2017-12794)Django debug page XSS漏洞.md
  • home 首页
  • brightness_4 暗黑模式
  • cloud
    xLIYhHS7e34ez7Ma
    cloud
    湛蓝安全
    code
    Github
    (CVE-2017-12794)Django debug page XSS漏洞.md
    1.39 KB / 2021-07-15 19:50:42
        (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)`,触发异常:
    
    ![](./resource/(CVE-2017-12794)DjangodebugpageXSS漏洞/media/rId24.png)
    
    可见,Postgres抛出的异常为
    
        duplicate key value violates unique constraint "xss_user_username_key"
        DETAIL:  Key (username)=(<script>alert(1)</script>) already exists.
    
    这个异常被拼接进`The above exception ({{ frame.exc_cause }}) was the direct cause of the following exception`,最后触发XSS。
    
    
    links
    file_download