CTFd et Splunk : utilisez SQL pour du SPL !

Bonjour à tous, Il y quelques temps (environ :-)) on m’a demandé d’organiser un CTF en interne au taf. Je pourrais vous parler un moment du projet, des contributions au challenges, de l’organisation ou de la com’ mais bon, c’est pas trop le but du blog de vous parler des trucs chiant…^^ Je voulais juste pour partager quelques requêtes SQL et SPL pour CTFd et Splunk que j’ai faites en fin de CTF pour générer des graphiques et quelques stats sur le déroulement du challenge.

Alors je l’ai pas indiqué mais on a utilisé un CTFd customisé (un peu, merci Keny) pour l’occasion. Derrière la plateforme on trouve donc une base MariaDB (ex-mysql) tout bête qu’on peut requêter avec du SQL tout ce qu’il y a de plus classique.

SQL over CTFd

Par exemple la liste des utilisateurs inscrit au CTF vers un CSV :

Select u.id as user_id, u.name as username, u.email as user_email, u.type as user_type, u.team_id as team_id, t.name as team_name, captain_id, u.created as user_created 
INTO OUTFILE '/tmp/ctfd_users.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n' 
FROM users as u 
LEFT JOIN teams as t ON t.id=u.team_id ORDER BY team_name;

Ça vous sort … Lire la suite

Chiffrer une base MariaDB pour Gophish

Chiffrer une base MariaDB

Salut à tous, aujourd’hui on va regarder comment on peut protéger des tables de base de données et chiffrer une base MariaDB. En effet, dans ce précédent article sur Gophish, je vous ai montré quelques outils open source pour faire des campagnes de phishing. Ce que je n’ai pas pris le temps de vous dire, c’est que lorsqu’on fait du Phishing en entreprise (ou en presta), on récupère de la donnée personnelle, au sens RGPD, mais genre en masse.

Déjà, en amont de la campagne, votre « client » va devoir vous donner la liste des utilisateurs cibles et leur adresses e-mail. Et puis pendant la campagne, les « victimes » vont s’authentifier sur un portail laisser un nom d’utilisateur, potentiellement un mot de passe, un horaire, etc. Bref, autant je ne fais pas partie des ayatollahs qui considèrent qu’une adresse IP toute seule est une donnée personnelle, autant dans ce type de cas, il n’y a pas trop de débat.

Du coup, on a des obligations vis à vis de ces données : protection, information en cas de pépins, destruction, enregistrement dans un registre du traitement, etc. je ne vais pas vous refaire le RGPD ici. Mais dans ce … Lire la suite

Interroger une base PostGreSQL en PowerShell

Interroger une base PostGreSQL en PowerShell

Bonjour à tous, aujourd’hui on va intéresser aux bases SQL et PowerShell. Et plus exactement comment interroger une base PostGreSQL en PowerShell. Pour cela on va devoir s’y connecter, faire une requête, lire nos résultats en PowerShell et clore la connexion.

Je choisit volontairement PostGreSQL car (j’ai eu besoin de le faire a boulot, déjà) il nécessite que l’on installe au préalable le driver ODBC pour se connecter à la base. En effet si vous utiliser un serveur MSSQL, les dépendances nécessaires sont (en général) déjà livrées avec Windows.

Pour obtenir ce pilote vous pouvez vous connecter sur le site de PostGreSQL ici, télécharger puis installer le fichier MSI. Vous pouvez vérifier que celui ci est bien déployé en allant dans le panneau de configuration-Outils d’administration-Sources de données ODBC (32 ou 64 bits). Les connecteurs PostgreSQL UNICODE et ANSI devrait être présent.

A partir de là, on peut démarrer le code de notre module PowerShell. La première étape consiste à établir la connexion à la base. Et pour cela j’ai développé la Cmd-Let Get-PSSQLDBConnexion ci dessous :

Function Get-PSSQLDBConnexion{
    param(
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String] $Server,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String] $Port,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String] $DBName,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [String] $Username,
        [Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] [SecureString] $Password
    )
    
Lire la suite