SSH ile bağlandığında ana bilgisayar klavyesinden girişi nasıl okuyabilirim?


10

Şu anda klavyeyi taklit eden bir RFID kart okuyucusu ile denemeler yapıyorum. Bir kartı bağladığınızda, karttaki verileri okuyacak ve ardından yapılandırmaya göre tuş vuruşlarını taklit edecektir.

Bu cihazı bir Raspberry Pi'ye bağladım ve SSH aracılığıyla Raspberry Pi'ye bağladım.

Açıkçası, okuyucu şimdi tuş vuruşlarını taklit ettiğinde, Pi'nin yerel tty'sine iniyorlar (SSH oturumumda değil). Şu anda bu girdiye ulaşmakta zorlanıyorum.

Nihayetinde, girdiyi işlemek için bir yazılım yazacağım, ancak hata ayıklama ve geliştirme amaçları için, SSH oturumumda klavye girdisini almak oldukça yararlı olacaktır.

Aşağıdakileri denedim

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

Bu , bir kartı bağladığımda bazı çıkışlar veriyor, ancak beklediğim gibi değil. Ham girdi verileri gibi görünüyor. Anahtarları okunabilir değerler olarak almak isterim.

/dev/inputCihazdan okunan veriler, üzerinden borulama yaparken biraz daha mantıklıdır 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

Bu girdi olmalıydı :7643fa46


Sorunuzu anlarsam, teknik anlamda, ssh ile çok az ilgisi olduğunu tahmin edebilirim ve belki de C'de yazılmış, hedef bilgisayarda çalışan bir çeşit keylogger istersiniz ve daha sonra sorgularsınız. hedef bilgisayara ssh zaman.
barlop

@barlop: Yapmak olsaydı o ne istiyorum ulaşmak için, o zaman yapmak istediğim şey bu değil. Sonunda girdiyi kapmak için "bir şey" yazmak zorunda kalacağım, sadece bu kurulumu şu anki durumunda test etmeme izin verecek hızlı bir yaklaşım umuyordum.
Der Hochstapler

ssh bunu yapmak için bir özellik sağladıysa inanılmaz bir güvenlik riski olurdu ve varsayılan olarak dest comp'in dağıtımı ile birlikte gelen yerel bir uygulama olduğundan şüpheliyim.
barlop

1
@barlop: Süper kullanıcı ayrıcalıkları olmadan çalışmasını beklemiyorum, bu kesin.
Der Hochstapler

Yanıtlar:


8

Birlikte saldırıya uğramış komut dosyası şimdilik benim için çalışıyor:

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 ] )

Okumak için python-evdev kullanır /dev/input/foove bunları çok okunaklı değerlere dönüştürür.

Senaryoyu çalıştırıp okuyucuya bir kart bağladığımda aldım:

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

4

İşte, gerekli ayrıcalıklara sahip olduğunuzu varsayarak, bir sonraki önyüklemeye kadar kolayca çalışmasını sağlamak için basit bir kesmek.

Aşağıdaki komutu kullanmak bilgisayarda çalışan tüm işlemleri gösterir

ps -ef

Klavyenin halihazırda okunduğu oturum açma / getty işleminin PID'sini bulmak için, bu işlevin sonuçlarını grep üzerinden geçirebiliriz.

ps -ef | grep tty

Gibi bir şey görebiliyordun

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

İkinci sütundaki sayıyı not edin - bu PID'dir. Ve altıncı sütun, klavyenin olduğu yer.

Bu işlemi durdurmak için aşağıdaki komutu kullanın (PID'niz ne olursa olsun numarayı kullanarak)

kill -stop 23698

Şimdi, klavye tuşlarının geldiği tty'yi okuyabilirsiniz (tty ps komutunda gösterilir)

cat /dev/ttyO0

catOnu öldürmek kadar, sonsuza klavyede girilen her türlü çıktısı okuyacaktır.

İşiniz bittiğinde ve normal davranışa geri dönmek istediğinizde, klavye işlevini

kill -cont 23698

Elbette bu genel fikri özetliyor. Kendi programınızı kullanarak tty'den okuma yapabilirsiniz.


/
Sbin

2

Son zamanlarda bir Hackathon için bunu yapmak zorunda kaldım, bu yüzden ne yaptığımıza katkıda bulunacağımı düşündüm.

  1. Otomatik oturum açmayı tty1'de (klavye aygıtının girişini boşalttığı ana terminal) kök olarak ayarlayın. Arch Linux Wiki girdi iyi talimatları vardır. Giriş yapmak için yeniden başlatın.

  2. 'TtyEcho' olarak bilinen küçük bir programın kaynağını kopyalayın. Bir kopya burada bulunabilir , ancak bir Google araması daha fazlasını getirir. Bu program komutları başka bir terminale tekrar etmenizi sağlar. Hedef makinede derleyin.

  3. Artık / dev / tty1 üzerinde ne varsa çalıştırabileceğimize göre, sadece ./ttyEcho -n /dev/tty1 'cat > buffer'tty1'deki her şeyin bir dosyaya eklenmesini sağlayabiliriz. Sürekli genişleyen bir dosya yapmak yerine, mkfifo bufferilk önce sadece adlandırılmış bir kanal olan özel bir dosya oluşturmak için kullanın - sadece bellek tarafından desteklenen bir FIFO kuyruğu.

  4. SSH oturumunuzdan tail -f filenametty1'deki tüm klavye girişlerini izleyebilirsiniz. Piton içinden, open('filename','r')ve aramaya devam .read()ya .readline()da gelir olarak üzerinde klavye verilerinin yem almak için.

Bu yöntem bizim için harikaydı, çünkü klavye tarama kodu ayrıştırmasını önler ve herhangi bir kod olmadan verilerin güzel bir büyük tamponunu tutar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.