Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
presentation-clickers — Keystroke injection vulnerabilities in wireless presentation clickers | Kitploit
Outils/GitHubGitHub/marcnewlin/presentation-clickers
Embedded Systems SecurityExploitationReverse EngineeringWireless SecurityHardware HackingPenetration TestingHardware & IoT Security
GitHubmarcnewlin/presentation-clickers

presentation-clickers

Keystroke injection vulnerabilities in wireless presentation clickers

Voir le dépôt
9614il y a 6 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Présentateurs sans fil

J'avais envie de faire un peu de rétro-ingénierie RF, alors j'ai commandé quelques présentateurs sans fil et je me suis bien amusé.

Ceci est un fork de nrf-research-firmware (que j'ai écrit il y a quelques années chez Bastille). J'ai ajouté la prise en charge de quelques nouveaux émetteurs-récepteurs/protocoles, et inclus des POC d'injection de frappes clavier pour 13 présentateurs sans fil courants.

Historique

  • 2019-04-20 - première série publiée (8 appareils)
  • 2019-04-21 - deuxième série publiée (5 appareils)

Appareils vulnérables à l'injection de frappes clavier

VendorModelProtocolRFICAdded
AmazonBasicsP-001AmazonBasics P-001nRF242019-04-20
CanonPR100-RCanon PR100-RPL11672019-04-20
FunpickWireless PresenterHS304HS3042019-04-20
AMERTEERWireless PresenterHS304HS3042019-04-20
BEBONCOOLD100HS304HS3042019-04-20
ESYWENWireless PresenterHS304HS3042019-04-20
Red Star TechPR-819HS304HS3042019-04-20
DinoFireD06-DF-USHS304HS3042019-04-20
TBBSCDSIT-60TBBSC DSIT-60BK24512019-04-21
RiiWireless PresenterRii Wireless PresenterBK2451

Protocoles

Logitech Encrypted

Vue d'ensemble

C'est le protocole Logitech chiffré standard, tel qu'utilisé par la R500. Il est en quelque sorte vulnérable à l'attaque par « injection de frappes chiffrées » que j'ai documentée avec les claviers Logitech Unifying dans le cadre du projet MouseJack.

Je dis en quelque sorte, car tous les codes de balayage HID ne sont pas acceptés. Plus précisément, 0x04-0x1D (A-Z) sont remplacés par 0x00 lorsque le dongle envoie le paquet à l'ordinateur hôte, ce qui signifie que nous pouvons injecter ce que nous voulons, tant que ce n'est pas une lettre. L'autre exception est que les accords de touches avec ctrl sont autorisés, même lorsqu'ils incluent des lettres.

Une injection efficace de frappes clavier via la R500 nécessite un peu de créativité.

Supposons que la cible soit dans une session bash. Dans bash, nous pouvons encoder nos caractères en base-8, en encodant les commandes contenant des lettres que nous voulons que notre cible exécute.

Par exemple, ping google.com est encodé comme $'\160\151\156\147' $'\147\157\157\147\154\145\056\143\157\155'. Si nous envoyons cette chaîne à une session bash puis envoyons enter, la commande ping google.com sera invoquée sur la machine cible.

Découverte de l'appareil

Vous pouvez trouver l'adresse de votre Logitech R500 en utilisant nrf24-scanner comme suit :

sudo ./tools/nrf24-scanner.py -c {2..74..3} -l

Les paquets devraient ressembler à ceci :

root@kitploit:~
[2019-04-21 13:11:52.507]  62   5  85:D1:9D:FE:07  00:40:00:08:B8
[2019-04-21 13:11:52.515]  62   5  85:D1:9D:FE:07  00:40:00:08:B8
[2019-04-21 13:11:52.523]  62  22  85:D1:9D:FE:07  00:D3:4D:6F:B6:1B:E6:05:A2:B4:8B:98:F9:C2:00:00:00:00:00:00:00:81

Injection

L'injection est possible car le dongle n'impose pas l'incrémentation des compteurs AES, vous pouvez donc rejouer les paquets. Un paquet envoyé OTA est composé d'une charge utile USB HID qui a été chiffrée en mode compteur AES, puis du compteur. Lorsque vous appuyez sur un bouton du présentateur, il génère un paquet de touche enfoncée, et un paquet de touche relâchée. Le paquet de touche relâchée est entièrement composé de 0, ce qui nous donne un matériau de clé propre et net que nous pouvons réutiliser, appliquer un XOR avec notre propre charge utile, et envoyer OTA.

Il ne devrait pas être difficile d'automatiser le processus d'écoute d'une pression de bouton, d'extraction du deuxième paquet (touche relâchée) et de l'utiliser automatiquement comme référence de matériau de clé. Mais je suis paresseux, donc vous devrez d'abord observer vous-même une pression de bouton, qui ressemble à ceci :

root@kitploit:~
[2019-04-21 16:02:56.451]  65   5  85:D1:9D:FE:07  00:40:00:08:B8
[2019-04-21 16:02:56.459]  65   5  85:D1:9D:FE:07  00:40:00:08:B8
[2019-04-21 16:02:56.468]  65  22  85:D1:9D:FE:07  00:D3:E6:7B:35:8C:BB:2C:7D:5B:8B:98:FA:76:00:00:00:00:00:00:00:B9
[2019-04-21 16:02:56.475]  65   5  85:D1:9D:FE:07  00:40:00:08:B8
[2019-04-21 16:02:56.507]  65   5  85:D1:9D:FE:07  00:40:00:08:B8
[2019-04-21 16:02:56.516]  65  22  85:D1:9D:FE:07  00:D3:99:D6:D3:8D:49:25:F5:4D:8B:98:FA:77:00:00:00:00:00:00:00:1A
[2019-04-21 16:02:56.524]  65   5  85:D1:9D:FE:07  00:40:00:08:B8
[2019-04-21 16:02:56.532]  65   5  85:D1:9D:FE:07  00:40:00:08:B8

Le deuxième paquet de 22 octets est le paquet de touche relâchée.

Retirez le dernier octet de la charge utile, puis copiez-collez la chaîne dans logitech.py, en remplaçant KEYUP_REF.

(Cela ne devrait pas fonctionner sans mettre à jour KEYUP_REF, mais si ça marche, merci de me le faire savoir !)

Injection

Injectez la séquence de frappes ping google.com encodée en base-8 dans un dongle Logitech R500 spécifique (adresse 85:D1:9D:FE:07) :

sudo ./tools/r500-injector.py -l -a 85:D1:9D:FE:07

Logitech Unencrypted

Vue d'ensemble

C'est le protocole Logitech non chiffré standard, utilisé par les R400/R800.

Découverte de l'appareil

Vous pouvez trouver l'adresse de votre Logitech R400/R800 en utilisant nrf24-scanner comme suit :

sudo ./tools/nrf24-scanner.py -c {2..74..3} -l

Les paquets devraient ressembler à ceci :

root@kitploit:~
[2019-04-21 12:58:43.466]  32   0  9D:9E:95:52:07  
[2019-04-21 12:58:43.620]  32  10  9D:9E:95:52:07  00:C1:00:00:00:00:00:00:00:3F

Injection

Injectez la séquence de frappes de test dans un dongle Logitech R400/R800 spécifique (adresse 9D:9E:95:52:07) :

sudo ./tools/preso-injector.py -l -f logitech -a 9D:9E:95:52:07

Rii Wireless Presenter

Vue d'ensemble

Le Rii Wireless Presenter (stylo arrondi) est basé sur le BK2451 (qui semble être un clone du nRF24). Cela ressemble à un protocole générique, vu la prévalence d'appareils jumeaux, donc je vais probablement le reclasser après avoir obtenu plus de données.

Il s'agit fonctionnellement d'un clavier sans fil non chiffré, vulnérable à l'injection de frappes clavier.

PHY

Le Wireless Presenter (stylo arrondi) utilise du nRF24 Enhanced Shockburst à 250 Kb/s (sans ACK semble-t-il), et une adresse de 5 octets. L'appareil que j'ai testé a été observé campant sur 2425 MHz, mais il semble utiliser une sorte de schéma d'agilité de fréquence. En pratique, il est nécessaire d'envoyer quelques paquets factices sur le canal cible avant d'envoyer les paquets de frappes clavier.

Je soupçonne qu'il y a un saut de canal en cours, que je n'ai pas caractérisé, mais cibler un seul canal suffit pour démontrer l'injection de frappes clavier.

Découverte de l'appareil

Vous pouvez trouver l'adresse de votre Wireless Presenter (stylo arrondi) en utilisant nrf24-scanner comme suit :

sudo ./tools/nrf24-scanner.py -c 25 -l -R 250K -A 5

Notez que le vôtre pourrait être sur un autre canal.

Les paquets devraient ressembler à ceci :

root@kitploit:~
[2019-04-21 11:50:33.116]  25   3  6D:8C:01:14:25  4B:51:00
[2019-04-21 11:50:33.212]  25   3  6D:8C:01:14:25  4C:00:00
[2019-04-21 11:50:33.522]  25   3  6D:8C:01:14:25  4D:51:00
[2019-04-21 11:50:33.565]  25   3  6D:8C:01:14:25  4E:00:00

Injection

Injectez la séquence de frappes de test dans un dongle Rii spécifique (adresse 6D:8C:01:14:25) :

sudo ./tools/preso-injector.py -l -f rii -a 6D:8C:01:14:25

TBBSC DSIT-60

Vue d'ensemble

Le TBBSC DSIT-60 est basé sur le BK2451 (qui semble être un clone du nRF24). Il existe des appareils jumeaux évidents (c'est-à-dire celui-ci) que je n'ai pas testés. Pour le moment, je classe cela comme un protocole distinct, mais cela changera probablement une fois que j'aurai testé le(s) appareil(s) jumeau(x).

Il s'agit fonctionnellement d'un clavier sans fil non chiffré, vulnérable à l'injection de frappes clavier.

PHY

Le DSIT-60 utilise du nRF24 Enhanced Shockburst à 250 Kb/s (ou du moins un équivalent OTA) avec une adresse de 3 octets. L'appareil que j'ai testé a été observé campant sur 2406 MHz, mais je ne suis pas sûr des autres canaux qu'il pourrait utiliser.

Découverte de l'appareil

Vous pouvez trouver l'adresse de votre DSIT-60 en utilisant nrf24-scanner comme suit :

sudo ./tools/nrf24-scanner.py -c 6 -l -R 250K -A 3

Notez que le vôtre pourrait être sur un autre canal, ou qu'il pourrait y avoir un réaccord d'agilité de fréquence que je n'ai pas observé.

Les paquets devraient ressembler à ceci :

root@kitploit:~

[2019-04-21 10:33:44.264]   6   4  87:02:09  0B:42:00:2B
[2019-04-21 10:33:44.269]   6   4  87:02:09  0B:42:00:2B
[2019-04-21 10:33:52.477]   6   4  87:02:09  01:42:00:28

Injection

Injectez la séquence de frappes de test dans un dongle TBBSC DSIT-60 spécifique (adresse 87:02:09) :

sudo ./tools/preso-injector.py -l -f tbbsc -a 87:02:09

AmazonBasics P-001

Vue d'ensemble

C'est presque certainement un protocole générique, mais je n'ai pas encore examiné les appareils jumeaux (c'est-à-dire celui-ci). Pour le moment, je classe cela comme un protocole distinct, mais cela changera probablement une fois que j'aurai testé le(s) appareil(s) jumeau(x).

La P-001 est basée sur la famille de circuits RF nRF24, et est fonctionnellement un clavier sans fil non chiffré, vulnérable à l'injection de frappes clavier.

PHY

La P-001 utilise du nRF24 Enhanced Shockburst à 2 Mb/s avec des adresses de 5 octets, et des canaux de 2402 à 2476.

Découverte de l'appareil

Vous pouvez trouver l'adresse de votre P-001 en utilisant nrf24-scanner.py.

Appuyer sur la flèche droite devrait générer des paquets ressemblant à ceci :

root@kitploit:~
[2019-04-20 12:59:13.908]  27   9  44:CB:66:A3:BE  00:00:00:00:00:00:00:00:01
[2019-04-20 12:59:13.909]  27   9  44:CB:66:A3:BE  00:00:00:00:00:00:00:00:01
[2019-04-20 12:59:13.999]  27   9  44:CB:66:A3:BE  00:00:4E:00:00:00:00:00:01
[2019-04-20 12:59:14.120]  27   9  44:CB:66:A3:BE  00:00:00:00:00:00:00:00:01
[2019-04-20 12:59:14.121]  27   9  44:CB:66:A3:BE  00:00:00:00:00:00:00:00:01
[2019-04-20 12:59:14.211]  27   9  44:CB:66:A3:BE  00:00:4E:00:00:00:00:00:01

Injection

Injectez la séquence de frappes de test dans un dongle AmazonBasics P-001 spécifique (adresse 44:CB:66:A3:BE) :

sudo ./tools/preso-injector.py -l -f amazon -a 44:CB:66:A3:BE

Canon PR100-R

Vue d'ensemble

Je ne suis pas sûr que ce protocole soit propre au Canon PR100-R, mais comme c'est le seul appareil que j'ai observé parlant ce protocole, je le laisse dans sa propre catégorie jusqu'à ce que les données suggèrent le contraire.

La PR100-R est basée sur le circuit RF PL1167, et un microcontrôleur inconnu.

La PR100-R est fonctionnellement un clavier sans fil non chiffré, vulnérable à l'injection de frappes clavier.

PHY

La PR100-R utilise un protocole FSK à 1 Mb/s fonctionnant sur des canaux espacés de 5 MHz entre 2406 MHz et 2481 MHz.

Les paquets sont blanchis et protégés par un CRC 16 bits.

Il ne semble pas y avoir d'ACK renvoyés par le dongle, avec la réserve que je n'ai inversé ce protocole que suffisamment pour démontrer l'injection de frappes clavier.

Le protocole semble adopter une approche d'agilité de fréquence pour la sélection des canaux, et le dongle se fixe sur un canal après que la télécommande a émis dessus pendant un certain nombre de paquets. En pratique, il suffit d'émettre quelques secondes de paquets factices avant d'émettre les paquets de frappes clavier.

Adressage

D'après le format des paquets, il n'est pas clair si ce protocole utilise un mot de synchronisation fixe ou une adresse par appareil. Je n'ai examiné qu'un seul exemplaire (en raison du prix élevé), je n'ai donc pas pu valider entièrement le format des paquets.

Le script d'injection fonctionne avec ma PR100-R, mais il faudra peut-être le modifier pour une utilisation générale. Si vous avez une autre PR100-R et que vous pouvez valider cela, merci de me le faire savoir !

Injection

Injectez la séquence de frappes de test dans un dongle Canon PR100-R à proximité :

sudo ./tools/preso-injector.py -l -f canon

HS304

Vue d'ensemble

HS304 semble être un circuit RF spécifique à une application pour les présentateurs sans fil (ou peut-être les claviers/souris sans fil). Le nom provient de la chaîne USB HAS HS304, et était le même pour tous les appareils de cet ensemble.

Le circuit RF a été observé comme étant un boîtier SOP-16 non marqué, sans différences apparentes entre les vendeurs.

Les appareils basés sur HS304 sont fonctionnellement des claviers sans fil non chiffrés, vulnérables à l'injection de frappes clavier.

PHY

HS304 est un protocole FSK à 1 Mb/s fonctionnant sur trois canaux dans la bande ISM 2,4 GHz (2407, 2433, 2463). Il ne semble pas y avoir d'ACK envoyés du dongle vers le présentateur, et la livraison des paquets est assurée en transmettant chaque paquet sur chacun des trois canaux.

En pratique, une livraison fiable des paquets peut également être obtenue en transmettant chaque paquet plusieurs fois sur un seul canal.

Les paquets sont blanchis et protégés par un CRC 16 bits.

Adressage

Il n'y a pas de schéma d'adressage ou d'appairage, donc l'injection de frappes clavier ne nécessite pas de découverte d'appareil. Cependant, l'absence d'ACK empêche la découverte active des dongles.

Injection

Injectez la séquence de frappes de test dans les dongles HS304 à proximité :

sudo ./tools/preso-injector.py -l -f hs304

Reniflage

Recevez et décodez les paquets envoyés par les présentateurs NS304 à proximité :

sudo ./tools/preso-scanner.py -l -f hs304

Télécharger l’outil
2019-04-21
LogitechR400Logitech UnencryptednRF242019-04-21
LogitechR800Logitech UnencryptednRF242019-04-21
LogitechR500Logitech EncryptednRF242019-04-21