Pour ceux qui ont cliqué sur un lien AMSNews.be (ou .fr), bienvenue sur mon blog principal.
J’ai repris mes articles de AMSNews (interviews, articles de fond, …). Tout sauf les news donc et les articles qui ne m’appartiennent pas. Ces articles seront rendus à leurs auteurs qui en feront ce qu’ils veulent.
Pour ce qui est des news, c’est périssable, aucun intérêt de les reprendre.
Ici, on discute Amstrad, forcement, mais pas que ! (je viens de recevoir mon Spectrum Next pour info).
Je vous invite à aller faire un tour sur le site avant de supprimer le lien de vos bookmarks.
3 novembre 1995, je participe à la Wired, ma première démo party.
Nous y allons sous le nom Paranoia. Le groupe de se compose de Darkangel, Wonderboy (sysop du BBS du même nom et futur Shaan et musicien de Crazy Piri) et moi-même.
La demoparty est organisée par Antarès et Imphobia. Antarès splittera quelques mois plus tard et nous formerons Ketchup Killers avec aXs. (aXs, Darkangel et moi sommes en classe ensemble pour notre première année de graduat en informatique).
Nous n’étions pas venus avec une production. J’en profiterais donc pour participer à la surprise coding. Il fallait coder un truc en assembleur le plus petit possible. J’arrive ex-aequo avec le légendaire Walken/Impact Studios. Fier.
Nous étions juste derrière la table de Melting Pot. Nous avons donc bénéficié de leur bonne ambiance (spécialement grâce à Zeugma et Darky). Walken, tout prêt, était toujours à l’affut de personnes voulant jouant à son jeu préféré: Arcade Volleyball.
Cette Wired’95 a lieu dans l’université de Mons Hainaut. Nous bénéficions donc des amphithéâtres pour visionner les compos, jouer à des jeux sur grands écrans (wipeout sur PlayStation entre autres) mais aussi regarder des films (dont Jurassic Park). Le grand luxe.
Pour cette première demoparty, je ne dors pas pendant 60 heures. La nuit du dimanche au lundi ne suffit pas à me remettre sur pied. Je me rappelle m’être endormi pendant le cours de statistique encore plus soporifique que d’habitude.
Que de bons souvenirs pour cette première demoparty. J’étais devenu un demoscener et je le resterais toute ma vie.
L’époque où le geek en informatique était presque vu comme un pestiféré est définitivement révolue. Internet et les smartphones le confirmeront plus tard… mais ceci est une autre histoire, qui sera contée une autre fois.
Colour Personal Computer soit Ordinateur personnel couleur.
Pour ce qui est des chiffres, la vraie signification est plus compliquée à trouver.
La fin est facile, c’est la quantité de mémoire (64k ou 128k). Le début, 4 pour cassette et 6 pour disquette. Mais pourquoi ?
En 1993, François Quentin, dans son excellent livre « Ces ordinateurs sont dangereux», nous dit : Le vrai nom allait devenir CPC 464 (Color Personal Computer, Ordinateur Personnel Couleur), 64 parce qu’il avait 64 K de mémoire, 4 devant le 64 parce que ça faisait plus riche que Commodore 64
En 2019, Roland Perry, le créateur de l’Amstrad, complète cette information dont tant de monde voudrait avoir le fin mot et c’est grâce à Zoé Kirk Robinson que nous savons enfin ce que signifie ces chiffres:
Il s’avère qu’ils ne veulent rien dire du tout ! Roland Perry a nommé le CPC 464 le « 464 » parce que l’ajout d’un 4 au début de « 64 » signifiait qu’il avait une symétrie. Lorsque le moment est venu de nommer le prochain CPC, il l’a appelé le « 664 » pour le différencier du « 464 » et vu que « 6 » était le prochain nombre pair, le 664 est né. Et pour son successeur sorti 6 mois plus tard, le 6128, vu qu’il n’était que le remplacement rapide du 664, ils sont restés avec le préfixe « 6 ».
Plus tard, lorsqu’ils ont voulu faire leurs gammes PCW et PC, ils ont gardé leur nomenclature avec le premier chiffre pour la gamme et le reste pour la mémoire. Ce qui a donné le PCW 8512 (ainsi que le PCW 9512 et PcW 16 ??) et le PC 1512… 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.
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
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).
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).
⚠ 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();