Як я можу прочитати введення даних з клавіатури хостів при підключенні через SSH?


10

В даний час я експериментую з зчитувачем RFID карт, який емулює клавіатуру. Підключивши карту, вона зчитує дані з неї, а потім імітує натискання клавіш відповідно до конфігурації.

Я підключив цей пристрій до Raspberry Pi та підключив до Raspberry Pi через SSH.

Очевидно, коли читач тепер імітує натискання клавіш, вони сідають на локальну програму Pi (а не на моєму сеансі SSH). Тому мені зараз важко дістатися до цього входу.

Зрештою, я буду писати програмне забезпечення для введення даних, але для налагодження та розробки, було б дуже корисно отримати клавіатурний вклад у моєму сеансі SSH.

Я спробував наступне

sudo cat /dev/input/by-id/usb-HID_OMNIKEY_5127_CK_01010053423438303000835748112531-event-kbd

Що робить дати деякий висновок при підключенні карти, але це не те , що я очікував би. Схоже, це були б необроблені вхідні дані. Я хотів би отримати ключі як читабельні значення.

Дані, які зчитуються з /dev/inputпристрою, мають трохи більше сенсу, коли пропускаєте їх через hexdump:

pi@raspberrypi ~ $ sudo cat /dev/input/by-id/usb-HID_OMNIKEY_5127_CK_01010053423438303000835748112531-event-kbd | hexdump
0000000 eef8 5138 219a 0008 0004 0004 0024 0007
0000010 eef8 5138 21ad 0008 0001 0008 0001 0000
0000020 eef8 5138 21b3 0008 0000 0000 0000 0000
0000030 eef8 5138 6019 0008 0004 0004 0024 0007
0000040 eef8 5138 602a 0008 0001 0008 0000 0000
0000050 eef8 5138 602f 0008 0000 0000 0000 0000
0000060 eef8 5138 9e97 0008 0004 0004 0023 0007
0000070 eef8 5138 9eab 0008 0001 0007 0001 0000
0000080 eef8 5138 9eb1 0008 0000 0000 0000 0000
0000090 eef8 5138 dd18 0008 0004 0004 0023 0007
00000a0 eef8 5138 dd26 0008 0001 0007 0000 0000
00000b0 eef8 5138 dd2b 0008 0000 0000 0000 0000
00000c0 eef8 5138 1b9a 0009 0004 0004 0021 0007
00000d0 eef8 5138 1baf 0009 0001 0005 0001 0000
00000e0 eef8 5138 1bb4 0009 0000 0000 0000 0000
00000f0 eef8 5138 5a15 0009 0004 0004 0021 0007
0000100 eef8 5138 5a24 0009 0001 0005 0000 0000
0000110 eef8 5138 5a29 0009 0000 0000 0000 0000
0000120 eef8 5138 989e 0009 0004 0004 0020 0007
0000130 eef8 5138 98b3 0009 0001 0004 0001 0000
0000140 eef8 5138 98b9 0009 0000 0000 0000 0000
0000150 eef8 5138 d71d 0009 0004 0004 0020 0007
0000160 eef8 5138 d72b 0009 0001 0004 0000 0000
0000170 eef8 5138 d730 0009 0000 0000 0000 0000
0000180 eef8 5138 15a1 000a 0004 0004 0009 0007
0000190 eef8 5138 15b5 000a 0001 0021 0001 0000
00001a0 eef8 5138 15bb 000a 0000 0000 0000 0000
00001b0 eef8 5138 541e 000a 0004 0004 0009 0007
00001c0 eef8 5138 542d 000a 0001 0021 0000 0000
00001d0 eef8 5138 5432 000a 0000 0000 0000 0000
00001e0 eef8 5138 92a3 000a 0004 0004 0004 0007
00001f0 eef8 5138 92b8 000a 0001 001e 0001 0000
0000200 eef8 5138 92be 000a 0000 0000 0000 0000
0000210 eef8 5138 d123 000a 0004 0004 0004 0007
0000220 eef8 5138 d131 000a 0001 001e 0000 0000
0000230 eef8 5138 d136 000a 0000 0000 0000 0000
0000240 eef8 5138 0fab 000b 0004 0004 0021 0007
0000250 eef8 5138 0fbf 000b 0001 0005 0001 0000
0000260 eef8 5138 0fc5 000b 0000 0000 0000 0000
0000270 eef8 5138 4e22 000b 0004 0004 0021 0007
0000280 eef8 5138 4e31 000b 0001 0005 0000 0000
0000290 eef8 5138 4e36 000b 0000 0000 0000 0000
00002a0 eef8 5138 8ca5 000b 0004 0004 0023 0007
00002b0 eef8 5138 8cb9 000b 0001 0007 0001 0000
00002c0 eef8 5138 8cbe 000b 0000 0000 0000 0000
00002d0 eef8 5138 cb2b 000b 0004 0004 0023 0007
00002e0 eef8 5138 cb3a 000b 0001 0007 0000 0000
00002f0 eef8 5138 cb40 000b 0000 0000 0000 0000

Це повинен був бути вкладеним:7643fa46


якщо я розумію ваше запитання, я б здогадався, що в технічному сенсі це дуже мало стосується ssh, і ви хочете, щоб якийсь кейлоггер, можливо, написаний на С, працює на цільовому комп'ютері, а потім ви запитаєте його коли ви ssh до цільового комп'ютера.
барлоп

@barlop: Якщо мені довелося це зробити , щоб досягти того, що я хочу, то це не те, що я хочу зробити. Мені доведеться написати "щось", щоб насправді схопити вхід, врешті-решт, я просто сподівався на швидкий підхід, який дозволить мені перевірити цю установку на її поточний стан.
Der Hochstapler

Це був би надзвичайний ризик для безпеки, якби ssh надав функцію для цього, і я сумніваюсь, що за замовчуванням існує нативне додаток, що постачається з дистрофоном dest comp.
барлоп

1
@barlop: Ну, я не очікую, що це буде працювати без привілеїв суперпользователя, це точно.
Der Hochstapler

Відповіді:


8

Цей зламаний сценарій зараз працює для мене:

import string

from evdev import InputDevice
from select import select

keys = "X^1234567890XXXXqwertzuiopXXXXasdfghjklXXXXXyxcvbnmXXXXXXXXXXXXXXXXXXXXXXX"
dev = InputDevice('/dev/input/by-id/usb-HID_OMNIKEY_5127_CK_01010053423438303000835748112531-event-kbd')

while True:
   r,w,x = select([dev], [], [])
   for event in dev.read():
        if event.type==1 and event.value==1:
                print( keys[ event.code ] )

Він використовує python-evdev для читання /dev/input/fooі дуже брудно перетворює їх на читабельні значення.

Ось що я отримую, коли запускаю сценарій і підключаю карту до читача:

pi@raspberrypi ~ $ python test.py
7
6
4
3
f
a
4
6

4

Ось простий хак, щоб зробити його легким до наступного завантаження, якщо у вас є необхідні привілеї.

За допомогою наступної команди показані всі процеси, що працюють на комп'ютері

ps -ef

Щоб знайти PID процесу входу / отримання, звідки в даний час читається клавіатура, ми можемо передати результати цієї функції через grep.

ps -ef | grep tty

Ви могли побачити щось подібне

root     23698     1  0 18:17 ttyO0    00:00:00 /sbin/getty -L ttyO0 115200 vt102

Зверніть увагу на номер у другому стовпчику - тобто PID. І шостий стовпчик, де знаходиться клавіатура.

Щоб зупинити цей процес, використовуйте наступну команду (замінюючи номер будь-яким вашим PID)

kill -stop 23698

Тепер ви можете прочитати tty звідки надходять клавіші клавіатури (tty показано в команді ps)

cat /dev/ttyO0

catЧитатиме назавжди, виводячи все , що вводиться на клавіатурі, поки не вб'єте його.

Коли ви закінчите і захочете повернутися до нормальної поведінки, ви можете відновити функцію клавіатури за допомогою

kill -cont 23698

Звичайно, це окреслює загальну ідею. Ви можете використовувати власну програму для читання з tty.


Коли я вбиваю / sbin / getty процес, він автоматично перезапускається
davidgyoung

2

Довелося це зробити нещодавно для Хакатона, тому я подумав, що я сприятиму тому, що ми закінчилися робити.

  1. Встановіть autologin як root на tty1 (основний термінал, де клавіатурний пристрій скидає свій вхід). Запис у вікі Arch Arch має хороші вказівки. Перезавантажте, щоб змусити його увійти.

  2. Скопіюйте джерело невеликої програми, відомої як 'ttyEcho'. Один примірник можна знайти тут , але пошук у Google пропонує ще багато інших. Ця програма дозволяє повторювати команди до іншого терміналу. Складіть на цільовій машині.

  3. Тепер, коли ми можемо запускати що-небудь на / dev / tty1, ми просто можемо просто ./ttyEcho -n /dev/tty1 'cat > buffer'отримати все вхідні дані про tty1, які потрібно додати до файлу. Замість того, mkfifo bufferщоб створювати файл, що постійно розширюється, спочатку створіть спеціальний файл, який є лише названою трубкою - черга FIFO, що підтримується лише пам'яттю.

  4. З вашого сеансу SSH тепер ви можете просто tail -f filenameпереглядати всі дані клавіатури на tty1. Зсередини python, open('filename','r')і продовжуйте дзвонити .read()або .readline()на нього, щоб отримати канал даних про клавіатуру, коли вони надходять.

Цей метод був чудовим для нас, оскільки він дозволяє уникнути розбору клавіш сканування клавіш і зберігає гарний великий буфер даних без будь-якого коду.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.