DJANGO CVE-2020-7471

SQL Injection.

Posted by Cariomax on April 07, 2020

Intro

Le versioni Django 1.11 < dell'1.11.28, 2.2 < della 2.2.10 e 3.0 < della 3.0.3 consentono una SQL injection se dei dati non attendibili vengono utilizzati come delimitatore StringAgg, ad esempio, nelle applicazioni Django che offrono download di dati come una serie di righe con un delimitatore di colonna specificato.

Passando un delimitatore opportunamente elaborato a un'istanza contrib.postgres.aggregates.StringAgg, è stato possibile interrompere l'escaping e iniettare un codice SQL dannoso.

CVE-2020-7471

1. Prima di scaricare e utilizzare sono necessarie le seguenti operazioni: Installa la versione vulnerabile di django

pip install django==3.0.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

2. Fare riferimento a https://www.runoob.com/postgresql/windows-install-postgresql.html per completare l'installazione del database postgres

3. Create il Database

CREATE DATABASE test;

4. Modifica la configurazione del database in sqlvul_projects / settings.py

Se hai installato la configurazione di default nel passaggio precedente (inclusa l'impostazione della password su postgres), non è necessario modificare alcuna configurazione, puoi saltare questo passaggio

DATABASES = {

"default": {

"ENGINE": "django.db.backends.postgresql",

"NAME": 'test', # nome database

"UTENTE": "postgres",

"PASSWORD": "postgres", # password utente del database

"HOST": '127.0.0.1', # indirizzo del database

"PORT": "5432",

}

}

5. Inizializza la tabella dei dati tramite django :

python3 manage.py migrate

python3 manage.py makemigrations vul_app

python3 manage.py migrate vul_app

6. Eseguire lo script POC CVE-2020-7471.py

Riferimenti GitHub POC