⚠ 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.
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.
⚠ 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.
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)
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)
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;
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.
⚠ 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.
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
⚠ 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.
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();
⚠ 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 quelques manquements dans mes souvenirs à propos de cette anecdote. J’espère que je ne dirai pas trop de bétises.
Pendant mes explorations des interruptions du PC, j’étais tombé sur la fonction 25h de la bien connue interruption 21h. Cette fonction permet d’intercepter n’importe quel autre interruption. Pour mon résident (GREY.COM), j’allais dévier les fonctions 05h, 1Ch, 28h de l’int 21h. Si vous vous rappelez de ces interruptions (et je vous en félicite), vous devriez avoir compris qu’il y a un problème dans les fonctions que je dévie. Sinon, je continue:
La 05h est appelée lors d’une sortie caractère vers l’imprimante,
La 1Ch est appelée lors d’une demande d’information de l’unité de disque,
La 28h est appelée lors d’une écriture vers un fichier
Dans la fonction redirigée 05h, je lis le clavier, rempli un buffer et rend la main à la fonction 05h originale.
Dans les fonctions 1Ch et 28h, si mon buffer n’est pas vide, j’écris dans un fichier log les appuis claver et rend la main. Ainsi, l’utilisateur ne se rend pas compte qu’il y a un accès disque supplémentaire (nous étions sur disquette, cela se voyait assez vite). Ca, c’est en théorie, j’expliquerai plus tard que ce n’était pas le cas.
Mon problème est donc ma fonction 05h. Pourquoi donc est-ce que je lisais le clavier à cet endroit ? Est-ce que chaque appui d’une touche provoquait une int21h fct05h ? J’ai testé mes applications dans une DOSBox et tout fonctionne toujours.
Le programme résident ne sauvegardant que les scancodes, il fallait un convertisseur scancode -> ascii. Et là, deuxième inconnue: il ne lit pas un fichier mais directement l’emplacement mémoire du résident (de plus, la fonction d’écriture vers un fichier dans le résident est inactive). C’était la tâche du deuxième programme: LIT.EXE.
Pour ce qui est du convertisseur, un troisiéme programme (CARSET.EXE) transformait le scancode en symbole compréhensible à l’écran.
Pour accèder à la mémoire LIT.EXE devait être lancé sur l’ordinateur de la victime en esperant qu’il n’éteigne pas son PC en quittant le local.
Cela semble logique vu qu’ils me rendaient ma disquette boot dès qu’ils étaient connectés mais ce n’était vraiment pas pratique. Ca expliquerait aussi que je m’en suis peu servi. Mon seul souvenir à son propos est d’avoir eu le mot de passe d’un étudiant de 2ème (angusmac) qui était tous les jours dans la salle informatique avec nous.
Je me demande ce qu’il reste de ces interruptions sur un PC moderne. Connaissant Microsoft, ils n’ont certainement pas tout jeté. J’ai essayé de lancer GREY.COM en ligne de commande sous un Window 10 mais il m’indique ‘Applications 16 bits non prise en charge‘.
Mes deux années de Polytech ne m’ont pas apporté un diplôme mais elles m’auront au moins servi à manipuler l’assembleur x86, qui me servira beaucoup quelques années plus tard dans ma période demomaker……
⚠ 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.
Si vous avez lu le précédent article sur le Digispark, vous savez maintenant envoyer des chaines de caractères automatiquement.
Mais vous vous êtes sans doute rendu compte (je l’avais bien précisé en plus), que le mapping des caractères est incorrect. Le Digispark pense que vous êtes en QWERTY alors que ce n’est peut-être pas le cas.
Heureusement pour nous, Ernesto a pensé a cela. Sa version DigisparkKeyboard est multilangue
La modification se fait facilement en remplaçant le contenu du répertoire $PWD/Library/Arduino15/packages/digistump/hardware/avr/1.6.7/libraries/DigisparkKeyboard par le contenu de https://github.com/ernesto-xload/DigisparkKeyboard.
cd ~/Downloads
git clone https://github.com/ernesto-xload/DigisparkKeyboard.git
cd DigisparkKeyboard/src
cp * $PWD/Library/Arduino15/packages/digistump/hardware/avr/1.6.7/libraries/DigisparkKeyboard
Vérifiez aussi que le tableau ascii_to_scan_code_table commencent bien par BS Backspace dans les fichiers digi_be_be.h et digi_fr_fr. Si ce n’est pas le cas, effacez les 8 valeurs en trop. J’ai fais un pull request pour les effacer mais elles n’ont pas encore été prises en compte.
Quand vous avez fait cela, il suffit de mettre un de ces #define au début de votre sketch (avant le #include « DigiKeyboard.h »)
#define kbd_fr_fr // Pour l'utilisation sur un système dont le clavier est AZERTY FR
#define kbd_be_be // Pour l'utilisation sur un système dont le clavier est AZERTY BE
⚠ 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.
Je vous ai déja parler du Rubber Ducky, un clef usb qui permet d’injecter du code via la prise usb en se faisant passer pour un clavier.
Un de ses défauts, en plus de son manque de connectivité Bluetooth et Wifi, est son prix de 50€. Que diriez-vous d’avoir presque l’équivalent pour seulement 3€ ?
L’objet qui répond à nos besoins se nomme le Digispark. Il s’agit d’une carte basée sur un Arduino ATtiny85 avec un port usb tout petit et pas cher donc. L’avantage d’une clef pas cher, c’est que vous n’aurez pas peur de la perdre.
Niveau specs, malgré son prix, le Digispark n’a pas à rougir par rapport à d’autres cartes Arduino:
Support de l’environnement de developpement Arduino,
Alimentation via USB ou une source éléctrique de 5v ou 7-35v,
Un régulateur 500ma 5V,
Un USB intégré,
6 pins I/O (2 pour l’USB qui peut être désactivé),
8k de mémoire flash (6k disponible après le boot),
I2C & SPI,
PWM sur 3 pins,
ADC sur 4 pins,
Une LED d’alimenation, et une être de statut.
Par contre, contrairement au Rubber Ducky, il n’y a pas de slot micro SD sur le Digispark: il faut donc developper vos séquences claviers en C et injecter l’application via l’environnement de developpement Arduino.
Néanmoins, si vous voulez bénéficier des payloads du Ruber Ducky (là, là ou encore là), Marcus Mengs nous a developpé un convertisseur DuckyScript vers Digispark. Tout cela est disponible sur GitHub.
Avec un tel prix, le Digispark pourra encore nous servir dans de futurs projets, mais ceci est une autre histoire, qui sera contée une autre fois.
⚠ 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.
Décrypter le mot de passe d’un wifi en WPA2 en 5 minutes, c’est possible.
Est-ce que hacking social vous dit quelque chose ?
Personnellement, j’ai découvert ce terme dans le film Cybertraque en 2000. Ce film retrace une partie de la vie de Kevin Mitnick, pirate réputé des années 80-90 et idole de beaucoup de nerds de l’époque.
J’ai toujours adoré les films sur les pirates informatiques (sur les gladiateurs aussi, mais c’est une autre histoire).
Wargames est l’un de mes films préférés. Qui n’a pas rêvé de changer les notes d’une de ses camarades de classe pour la draguer ?
Plus tard, j’ai aussi apprécié Hackers (et pas juste pour Angelina Jolie). A défaut d’être réaliste, l’ambiance du film reflète assez bien le monde dont j’aurais aimé faire partie.
Pour revenir à Mitnick, une de ses grandes forces était justement le hacking social. Grâce à son culot et son charisme, il arrivait à pénétrer n’importe quel système.
Mais comment ? C’est simple (enfin, ça dépend pour qui). Si, au lieu de cracker un mot de passe, il suffisait de le demander à l’utilisateur directement ?
En hacking, il faut toujours se demander où est le maillon faible et souvent le maillon faible, c’est vous (l’utilisateur).
Si le charisme vous fait défaut, observez juste autour de vous.
Fin de l’année passée, je suis allé dans un magasin d’électroménager que je ne citerai pas. Comment font leurs employés pour se souvenir du mot de passe Wifi ? Ils l’affichent sur leur comptoir à la vue de tous les clients. C’est bien beau de mettre de la sécurité partout…
⚠ 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.
Retour en… 1996. Je suis en 2ème année de graduat en informatique.
Nous disposons d’une salle infomatique avec des terminaux connectés à un serveur Unix (HP-UX de mémoire). Ils nous servent principalement au labo Fortran, Cobol et C. Il va sans dire que je préfère le dernier.
J’y découvre vi qui me suit toujours. Comme quoi, je n’ai pas fais que perdre mon temps pendant ces trois années d’études.
Et dans vi, il y a la fonction :sh.
Les profs vérifiant que nous ne trichions pas en allant voir notre historique. Après chaque cours, ils rassemblaient les fichiers .bash-history de notre répértoire utilisateur. Par un heureux hasard, j’avais trouvé que lancer un shell dans vi ne sauvegardait pas l’historique des commandes lancées dans ce shell. Nous pouvions donc discuter grâce aux commandes who et write.
⚠ 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.
Est-ce que cela vous est déjà arrivé de devoir taper des lignes de commandes sur un serveur (ou un simple PC) sans disposer d’un clavier ?
Ou alors, pour jouer à l’apprenti pirate, de vouloir executer un script sur un ordinateur qui ne vous appartient pas ?
L’InputStick
Pour ma première proposition, je possède une clef InputStick de Jakub Zawadzki.
Il se présente sous la forme du clef usb que vous inserez dans n’importe quel PC/mac…
A partir d’une application sur votre smartphone, vous controlez alors cette machine via le bluetooth 4.
L’application permet d’executer des macros simples. Le principal défault que je lui trouve est de ne pas avoir d’application desktop (pour l’utiliser via mon GPD Pocket 3). J’ai commencé une application open-source qui permettrait de le faire mais qui est loin d’être operationnelle.
Une API est disponible afin de permettre aux développeurs tiers d’intégrer ces fonctionnalités dans leurs applications. Je l’ai utilisé dans KyPass afin de faciliter l’envoi de mot de passe complexe sur votre ordinateur.
Le Rubber Ducky
Pour la deuxième proposition, la solution la plus connue est le Rubber Ducky de Hak5. Comme l’inputStick, il se présente sous la forme du clef usb sur laquelle vous avez copié votre script (en Ducky Script) tel que celui-là:
GUI r
DELAY 100
STRING notepad.exe
ENTER
DELAY 100
STRING Bonjour
Une fois le Rubber Ducky inseré dans le PC, il ouvrira l’application notepad et ecrira « Bonjour » dans l’éditeur de texte.
Cette solution est moins cher et le nombre de scripts existants est impressionnant.
Son principal defaut est de ne pas être connecté.
Le P4wnP1 A.L.O.A.
Après de longues recherches (au moins 5 minutes), je suis tombé sur le projet P4wnP1 A.L.O.A. de MaMe82 (A.L.O.A. pour “A Little Offensive Appliance”, c’est à dire « Un petit appareil offensif », successeur de P4wnP1)
Ce projet utilise un raspberry pi Zero (que l’on trouve à 10€) et simule un periphérique USB lorsqu’il est connecté à un ordinateur.
Dans sa configuration par défaut, le rpi fait office d’accès point que vous pouvez accèder à partir d’un autre pc. Vous pouvez alors vous connecter à l’adresse http://172.24.0.1:8000 pour configurer (et envoyer des scripts) votre P4wnP1.
Là où cela devient très puissant, c’est qu’il vous est aussi possible d’accèder au P4wnP1 en ssh.
# connection sur le rpi (mot de passe par defaut: toor)
ssh root@172.24.0.1
P4wnP1_cli hid run -c 'press("gui enter")'
P4wnP1_cli hid run -c 'layout("us"); type("ls -latrn")'
Vous pouvez aller faire un tour dans les dossiers /usr/local/P4wnP1/legacy/ et /usr/local/P4wnP1/scripts/ pour voir des exemples de scripts.
Le P4wnP1 permet beaucoup plus que cela:
Il est possible aussi de se connecter en bluetooth sur le rpi
Elle peut se faire passer pour une carte réseau usb, pour un port série, …
Son HIDScript est plus puissant que le Ducky Script
Le module Wifi a été modifié pour gérer l’attaque KARMA (j’en parlerai dans une autre post)
La distribution installée est KALI Linux, très connue des pentesters.
Il ne vous reste plus que usberisé (clerifié ?) votre rpi via une carte BadUSB USB-A Addon.