yarel
2019-07-17 16:20

Czy w hasłach zawierających $ albo ! kryje się zło?

Najwyraźniej tak, bo zdarza mi się dostawać zgłoszenie, że hasło jest niepoprawne i ludzie nie mogą się podłączyć do czegoś tam.

Przeważnie scenariusze wyglądają podobnie.

Użytkownicy:

  • szyfrują hasło, żeby nie było otwarty tekstem w pliku konfiguracyjnym (często za pomocą jakiegoś skryptu: ./encrypt.sh haslo), wstawiają je do konfiguracji aplikacji, która po uruchomieniu blokuje konto po N nieudanych próbach podłączenia
  • podają hasło jako parametry rozruchowe, np. -p ha$lo

Trzeba po prostu pamiętać, że shell interpretuje niektóre znaki.

W bashu:

  • ha$lo zostanie zamienione, na ha+ wartość zmiennej środowiskowej lo (jeśli zmiennej nie ma zdefiniowanej, to z ha$lo zrobi się nam ha
  • !haslo - znak ! odnosi się do historii linii poleceń i spowoduje wywołanie ostatniego polecenia historii pasującego do wzorca (albo zwróci komunikat błędu -bash: !z: event not found)

Rozwiązaniem jest używanie jakiejś formy escejpowania (w bashu ciągi można obłożyć ').

Co prawda, w hasłach można stosować znaczki, które są używane przez shella do escejpowania ]:->
Pamiętam jeden przypadek, gdzie znak \ w haśle trzeba było escejpować jako: \\\\\\\\.

Piszę dziś o tym, bo rano konsultowałem jak "skonfigurować certyfikaty SSL" do połączenia z AD i byłem naturalnym kandydatem do zwalenia winy, że AD zwraca "Authentication failed" i to z pewnością przez konfigurację certyfikatów :D

Rzut oka na ha$lo wystarczył by wypracować szybką hipotezę. Poprosiłem o zweryfikowanie co zwraca skrypt szyfrujący hasło dla haseł: abc$nieistienjacazmienna i abc. Zwrócił to samo.

Case closed.

Silv

Tego z ! nie znałem w Bashu.

xxx_xx_x

@Silv Dodatkowo w bash po "!" można wprowadzić numer linii z historii, czyli odpalamy polecenie "history" i np żeby uruchomić komendę oznaczoną jako np 89 wystarczy wpisać !89

Silv

@xxx_xx_x: to wydaje się mało przydatne, jak myślisz? Co może powiedzieć numer linii z historii bez znajomości jej zawartości?

nullpt4

@Sliv: history | tail -100

Silv

@nullpt4: Silv, nie Sliv. :) Numer sam w sobie nadal nic nie mówi, ale pomaga – to racja.

nullpt4

@Silv: ale history | tail -100 wypisuje Ci nie tylko numer ale też komendę. np 2102 07/18/19 10:59:31 history | tail -100

Silv

@nullpt4: ale mnie chodzi o to, że jeśli znam numer bez komendy, to nie jest on dla mnie istotny (tak samo, gdy znam komendę bez numeru).

xxx_xx_x

Ale jak napiszesz history to masz listing np 100 ostatnich komend przeglądasz je i jak znajdziesz te którą cię interesuje to wpisujesz jej numer po !, jest to bardzo przydatne, np odpalsz "history | grep ssh" i masz listę ostatnich wywołań ssh

Silv

@xxx_xx_x: grep tak, ale nie wiem, co ma to do numeru.