Django debug page XSS漏洞

来源:互联网 发布:电子画板手绘软件 编辑:程序博客网 时间:2024/06/05 16:50

Django debug page XSS漏洞(CVE-2017-12794)学习记录

i春秋实验:
https://www.ichunqiu.com/vm/59863/1
参考文章:
https://www.leavesongs.com/penetration/django-debug-page-xss.html

Django

一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C,Django也是CMS(内容管理系统)软件

  • Django的模型最终是操作数据库
  • psycopg2,是Python语言的PostgreSQL数据库接口,是对Psycopg 1.1.x版本进行的几乎完全的改写

漏洞触发的关键点

  • 进入这个if语句:{% ifchanged frame.exc_cause %}{% if frame.exc_cause %}
  • 在1.11.4 版本的Django中,if语句中有转换,在1.11.5中变成了强制转换
    如果你重复创建同一个user【username变量值相同】,就会触发数据库的unique异常,还是因为他的数据库设置了限制。
  • 接着就是因为Django为了方便开发者快速找到具体是数据库哪里出了错,就将数据库异常与代码中的异常关联在了一起,,最后在django/db/utils.py的exit函数可以看到有好几种异常类型,并且在最后会把异常的具体情况输出,在500页面中【程序出错】
  • 异常类型:DataError,OperationalError,IntegrityError,InternalError,ProgrammingError,NotSupportedError,DatabaseError,InterfaceError,Error之一,则抛出一个同类型的新异常

漏洞利用

使用数据库,并触发数据库中的异常,比如上面说过的unique异常,还有其他的
这里有一个例子:
(1) 用户注册页面,未检查用户名
(2) 注册一个用户名为[removed]alert(1)[removed]的用户
(3) 再次注册一个用户名为[removed]alert(1)[removed]的用户
(4) 触发duplicate key异常,导致XSS漏洞

总结

第一次看,然后看不懂,就晾在一边了,然后最近刚好在学python 还有数据库,自己跟着书敲了一遍代码写了一个网站,基本上的功能都可以实现。回头再来看看这个实验,发现清晰了许多。

原创粉丝点击