一、漏洞概述

Django是一个大而全的Web框架,其支持很多数据库引擎,包括Postgresql、Mysql、Oracle、Sqlite3等,但与Django天生为一对儿的数据库莫过于Postgresql了,Django官方也建议配合Postgresql一起使用。该漏洞的出现的原因在于Django中JSONField类的实现,Django的model最本质的作用是生成SQL语句,而在Django通过JSONField生成sql语句时,是通过简单的字符串拼接。

 

二、影响版本
  • Django 主开发分支
  • Django 2.2.x < 2.2.4
  • Django 2.1.x < 2.1.11
  • Django 1.11.x < 1.11.23

 

三、漏洞原理

  其实这是一个SQL注入的另一种形式——ORM注入(Object Relational Mapping)

  1.ORM是什么:ORM 是写程序时的一种写法,以前写程序查数据库的时候都是代码加 sql 语句写到一起,程序庞大后就很难管理,很难维护。后来就把程序和 sql 语句分开了。同时 ORM 把 sql 的写法进行了封装,程序调用更为方便,能让程序员真正的去关注逻辑层代码,去面向对象编程;

  2.该漏洞成因:queryset中有transform和lookup两个方式,分别被作用于“通过外键连接两个表”和“通过什么方式与里面的值进行比对(默认情况下是exact)”。所以只要是控制了queryset的键名,注入就水到渠成了,但这里有一个问题就是.filter( )里的键名是没有办法控制的,能控制的只有键值。但有一种情况,就是开发者把用户传入的整个对象都传给了filter()函数时,用户就可以通过控制filter的键名来进一步控制queryset的键名,进而实现ORM注入。——来自phith0n师傅:https://www.leavesongs.com/PENETRATION/django-jsonfield-cve-2019-14234.html

 

四、漏洞复现环境

Kali Linux + Vulfocus
渗透机:Kali Linux 
靶机:Vulfocus

 

五、实验步骤

1.开启镜像环境,访问页面(直接进后台对Collection模型进行管理)

 

 

 2.构造payload:http://192.168.117.131:58480/admin/vuln/collection/detail__a%27b=1

 

 

 

3.复现还是很简单的,在这里主要还是记录一下ORM注入的情况和思路把。

 

六、修复方式

Django 官方已经发布新版本修复了上述漏洞,请受影响的用户尽快升级进行防护。升级Django到 >=2.2.4、>=2.1.11、>=1.11.23版本。

Django 2.2.4下载地址:

https://www.djangoproject.com/m/releases/2.2/Django-2.2.4.tar.gz

Django 2.1.11 下载地址

https://www.djangoproject.com/m/releases/2.1/Django-2.1.11.tar.gz

Django 1.11.23 下载地址:

https://www.djangoproject.com/m/releases/1.11/Django-1.11.23.tar.gz
——https://blog.csdn.net/weixin_42250835/article/details/121106792

 

七、POC

1.https://www.cnblogs.com/wavesky/p/16411757.html

2.https://github.com/wave-to/Poc/blob/main/Sql_or_ORM_injuection/Poc_CVE-2019-14234.py

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/wavesky/p/16410326.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!