Chcę sprawdzić, z poziomu wiersza poleceń systemu Linux, czy dane hasło w postaci czystego tekstu jest takie samo jak hasło zaszyfrowane w / etc / shadow
(Potrzebuję tego do uwierzytelnienia użytkowników internetowych. Korzystam z osadzonego linuksa).
Mam dostęp do samego pliku / etc / shadow.
linux
command-line
password
embedded
michelemarcon
źródło
źródło
Odpowiedzi:
Za pomocą awk możesz łatwo wyodrębnić zaszyfrowane hasło. Następnie musisz wyodrębnić prefiks
$algorithm$salt$
(zakładając, że ten system nie używa tradycyjnego DES, który jest mocno przestarzały, ponieważ w dzisiejszych czasach można go brutalnie wymusić).W przypadku sprawdzania hasła podstawową funkcją C jest
crypt
, ale nie ma standardowego polecenia powłoki, aby uzyskać do niej dostęp.W wierszu polecenia możesz użyć jednowierszowego Perla, aby wywołać
crypt
hasło.Ponieważ nie można tego zrobić w czystych narzędziach powłoki, jeśli masz dostępny Perl, równie dobrze możesz to wszystko zrobić w Perlu. (Lub Python, Ruby,… cokolwiek masz, które może wywołać
crypt
funkcję.) Ostrzeżenie, nieprzetestowany kod.W systemie wbudowanym bez Perla użyłbym małego, dedykowanego programu C. Ostrzeżenie, wpisane bezpośrednio w przeglądarce, nawet nie próbowałem kompilować. Ma to zilustrować niezbędne kroki, a nie solidne wdrożenie!
Innym podejściem jest użycie istniejącego programu, takiego jak
su
lublogin
. W rzeczywistości, jeśli możesz, najlepiej byłoby zaaranżować, aby aplikacja internetowa wykonywała wszystko, czego potrzebujesu -c somecommand username
. Trudność polega na tym, aby podać hasłosu
; wymaga to terminala. Można się spodziewać zwykłego narzędzia do emulacji terminala , ale jest to duża zależność dla systemu osadzonego. Ponadto, gdysu
znajduje się w BusyBox, jest często pomijany, ponieważ wiele jego zastosowań wymaga, aby plik binarny BusyBox był ustawiony jako setuid root. Jeśli jednak możesz to zrobić, jest to najbardziej niezawodne podejście z punktu widzenia bezpieczeństwa.źródło
su
podejście.Spójrz na
man 5 shadow
iman 3 crypt
. Z tego ostatniego można dowiedzieć się, że skróty haseł/etc/shadow
mają następującą postać:gdzie
id
określa typ szyfrowania, a czytanie dalej może być jednym zW zależności od rodzaju skrótu należy użyć odpowiedniej funkcji / narzędzia do generowania i weryfikacji hasła „ręcznie”. Jeśli system zawiera
mkpasswd
program, możesz go użyć zgodnie z sugestią tutaj . (Weź sól z pliku cienia, jeśli nie było to oczywiste.) Na przykład zmd5
hasłami:wygeneruje ciąg, który powinien pasować do
/etc/shadow
wpisu.źródło
mkpasswd
, które musiałem zainstalować za pomocąapt-get install whois
. Linia komend linii cienia<user>:$6$<salt>$<pwd>:
byłamkpasswd -msha-512 <password> <salt>
Było podobne pytanie zadane na przepełnienie stosu . cluelessCoder dostarczył skrypt za pomocą metody expect , którą możesz mieć lub nie w swoim systemie wbudowanym.
źródło
Pamiętaj, że przy prawidłowym skonfigurowaniu systemu konieczne będzie uruchomienie programu jako root.
Lepszym rozwiązaniem niż bezpośrednie czytanie pliku cienia i pisanie własnego kodu wokół krypty byłoby po prostu użycie powiązań pam.
Kalmary tarball przychodził z prostego narzędzia CLI dla weryfikacji nazw użytkowników / haseł za pomocą stdio - tak proste, aby przystosować się do korzystania argumentów - chociaż wersja I hacked poprzednio był ledwie pin-up plakat do programowania strukturalnego. Szybkie google i wygląda na to, że nowsze wersje zostały znacznie wyczyszczone, ale wciąż jest tam kilka „goto”.
źródło
źródło
line 61: :: syntax error: operand expected (error token is ":")