Czasami, gdy cat
przez pomyłkę jestem plikiem binarnym, mój terminal jest zniekształcony. Nic szybkiego reset
nie może naprawić, ale czy osoba atakująca nie mogłaby teoretycznie stworzyć pliku, który po wyświetleniu na terminalu wykonałby dowolny kod? Poprzez exploit w emulatorze terminali lub w inny sposób.
terminal
cat
special-characters
Gunchars
źródło
źródło
more
) lub jest świadome terminalu (less
) w celu zbadania zawartości plików. Nie tylko nie spowoduje to, że twój terminal będzie w dziwnym stanie, cały plik nie przejdzie w jednym ujęciu.stty sane
Komenda resetuje xterm (lub podobne), które zostało włączone do np innego zestawu znaków.mosh
dokumentacja zawiera pewne przemyślenia na ten temat: mosh.mit.edu/#techinfoOdpowiedzi:
To, czy takie wyjście może zostać wykorzystane, zależy od programu terminala i tego, co robi ten terminal, w zależności od wysyłanych kodów specjalnych. Nie wiem, czy programy terminalowe mają takie możliwe do wykorzystania funkcje, a jedynym problemem będzie teraz, jeśli wystąpi nieznane przepełnienie bufora lub coś takiego, które można wykorzystać.
W przypadku niektórych starszych
hardware
terminali może to stanowić problem, gdy programujesz np. Klawisze funkcyjne z tego rodzaju sekwencjami ucieczki, przechowując sekwencję poleceń dla tego klawisza w sprzęcie. Nadal potrzebujesz fizycznego naciśnięcia klawisza, aby to aktywować.Ale zawsze są (jak Hauke tak słusznie oznaczony „braindead”) ludzie gotowi dodać taką cechę, jeśli rozwiązuje to dla nich problem, nie rozumiejąc, jaką tworzą lukę. Z mojego doświadczenia z oprogramowaniem open source wynika, że z powodu wielu oczu spoglądających na kod, jest to mniej prawdopodobne, niż w przypadku zamkniętego źródła. (Pamiętam, że w programie pocztowym na Irixie Silicon Grahpics w połowie lat dziewięćdziesiątych można było dołączyć polecenia do wykonania na maszynie odbiorników, prawdziwe ścieżki do plików wykonywalnych, ...)
źródło
write
polecenia - w ten sposób wykonując polecenia / skrypty jako użytkownik będący właścicielem terminala. To prawdopodobnie powód, dla którego wielu zaleca wyłączenie wiadomościmesg -n
dla użytkowników przez większość czasu i naroot
zawsze . AFAIK, faktycznie tak się stało - chociaż nie wiem, czy kiedykolwiek został wykorzystany. Tak więc losowy tekst zcat
pliku wykonywalnego Ted może być prawdopodobnie wykonany.Większość emulatorów terminali odeśle odpowiedź, jeśli otrzymają pewne sekwencje specjalne (zobacz dokumentację sekwencji kontrolnych xterm ). Na przykład możesz wysłać
\e[0c
do emulatora podobnego do VT100, a on odeśle atrybuty urządzenia, coś w stylu\e[?1;2c
(Prawdopodobnie to właśnie zauważył Keith). Ale te odpowiedzi nie są ciągami arbitralnymi. Mimo to posiadanie pliku wykonywalnego o nazwie2c
gdzieś w systemie, który robi coś śmiertelnego, jest złym pomysłem.Aktualizacja: Ryzyko jest w rzeczywistości większe niż myślałem, ze względu na możliwość ustawienia tytułu okna xterm i odesłania tytułu za pomocą odpowiednich sekwencji specjalnych ( http://www.securityfocus.com/bid/6940/ ) . W przeciwieństwie do powyższego przykładu, tytuł może być prawie dowolnym ciągiem znaków.
źródło
Zmienia to tytuł terminala w GNOME Terminal 3.6.1, chyba że zostanie zastąpiony przez coś takiego jak PS1 :
Teraz otwórz nowe okno Terminal GNOME, aby przetestować
cat
wersję:Tak, to także ustawia tytuł terminala.
Kiedyś występował problem z bezpieczeństwem związany z kodem ucieczki, w wyniku którego tytuł był drukowany w wierszu polecenia , więc można było skutecznie utworzyć plik, który po
cat
edycji wydrukowałby (nie jestem pewien, czy można tam wstawić nowy wiersz) dowolne polecenia. Ojej!źródło
Chociaż użycie
cat
może nie spowodować wykonania kodu, kody ucieczki zostaną przetworzone, dzięki czemu można łatwo wprowadzić w błąd, że skrypt jest nieszkodliwy, gdy w rzeczywistości jest złośliwy.Oto przykładowe polecenie, które możesz uruchomić, aby utworzyć „złośliwy” skrypt powłoki:
Podczas przeglądania pliku wydaje się on wystarczająco nieszkodliwy:
Ale czy powinieneś to uruchomić ...
Skrypt działa, włączając surowe kody ucieczki, aby przesunąć kursor w górę o kilka wierszy, więc reszta skryptu jest zapisywana nad złośliwym kodem, ukrywając go.
Prawie jakikolwiek inny program ujawni skrypt taki, jaki jest. Tylko programy, które nie przetwarzają zawartość pliku (jak
cat
,more
iless -r
) będzie produkować wyjście mylące.Zauważ, że
tail
ihead
również produkują ten sam mylący wynik. Użycie „mniej + F” jest zatem bezpieczniejsze niż „tail -f”.źródło
echo $(cat demo.sh)
,cat demo.sh | grep . --color=yes
(Uwaga:--color=yes
to, co pokazano „złośliwy” kod tutaj) lub wbudowanycat -v demo.sh
.cat
w Wyświetlanie pliku w treści .cat
dowolnego pliku, jak zadawane pytanie!Zdecydowanie doświadczyłem
xterm
wstawiania w siebie dowolnych znaków, jakbym je wpisał. I czasami to najwyraźniej zawierało znak nowej linii, więc dostałemngwerm:0riu: command not found
odpowiedź. Nie widzę powodu, dla którego ktoś nie mógłby stworzyć pliku, który wysyłałby określone, szkodliwe polecenia. Tak więc, przynajmniej niektóre terminale są podatne na ataki o dowolnym wpływie.źródło
Cóż, emulator terminala po prostu drukuje wysyłane do niego znaki.
Wszystko poza drukowaniem znaku na bieżącej pozycji, np. Ustawianie nowej pozycji, zmiana koloru, zmiana tytułu itp., Odbywa się poprzez sekwencje specjalne.
Zestaw obsługiwanych sekwencji ucieczki zwykle składa się z dobrze zdefiniowanych standardów, takich jak ANSI , które nie określają sposobu uruchamiania innych procesów. Chociaż byłoby możliwe zaimplementowanie takiej sekwencji, nie jestem świadomy żadnego emulatora terminalowego celowo pozwalającego na takie rzeczy.
Teoretycznie błąd taki jak przepełnienie bufora może zostać wykorzystany do uruchomienia dowolnej funkcji. Ale byłoby to możliwe w prawie każdym innym pliku binarnym.
źródło
Zasadniczo zazwyczaj nie ma ryzyka, że zostanie przechwycony dowolny plik. Moją zwykłą metodą analizy pliku jest wykonanie następujących czynności:
Powyższe pozwala mi określić typ pliku za pomocą
file
polecenia, astrings
polecenie pozwala mi zrzucić wszelkie możliwe do zidentyfikowania ciągi znaków z potencjalnych plików binarnych, których nie jestem pewien co do ich pochodzenia.przykład
wyjście pliku ciągi wyjścioweźródło