利用Vulnhub复现漏洞 - Django debug page XSS漏洞(CVE-2017-12794)分析

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

    • Vulnhub官方复现教程
      • 漏洞原理
    • 漏洞复现
      • 启动环境
      • 创建用户
      • 触发漏洞
      • 漏洞利用

Vulnhub官方复现教程

https://vulhub.org/#/environments/django/CVE-2017-12794/

漏洞原理

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

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

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

漏洞复现

启动环境

https://blog.csdn.net/JiangBuLiu/article/details/93853056
进入路径为

cd /root/vulhub/django/CVE-2017-12794

搭建及运行漏洞环境:

docker-compose build && docker-compose up -d

大约五分钟,我有出现红字提示,但是还好不影响后面复现
利用Vulnhub复现漏洞 - Django debug page XSS漏洞(CVE-2017-12794)分析_第1张图片

创建用户

访问http://your-ip:8000/create_user/?username=创建一个用户,成功
利用Vulnhub复现漏洞 - Django debug page XSS漏洞(CVE-2017-12794)分析_第2张图片

触发漏洞

再次访问http://your-ip:8000/create_user/?username=,触发异常:
利用Vulnhub复现漏洞 - Django debug page XSS漏洞(CVE-2017-12794)分析_第3张图片

可见,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。

漏洞利用

两次访问http://your-ip:8000/create_user/?username=
第二次,即可成功执行【你想要的执行的命令】


这是一般用来测试一个 xss 是否能成功的绕过各种 html (entities) 防御机制而运行到的 script。
如果可以执行 alert(1), 那就是可以执行任何 script 了
xss 的最基本生存空间就是这样.

你可能感兴趣的:(渗透)