Проблемы, связанные с Steam

Другой способ (возможно, более интересен для его теоретического содержания, чем для его пратических приложений).

Пользовательские пароли хранятся в /etc/shadow.

Пароли, хранящиеся здесь, зашифрованы, в последних выпусках Ubuntu с использованием SHA-512.

В частности, при создании пароля пароль в открытом тексте солен и зашифрован через SHA-512.

Одно из решений было бы тогда солить / зашифровать данный пароль и сопоставить его с зашифрованным паролем пользователя, хранящимся в записи /etc/shadow данного пользователя.

Чтобы быстро описать, как пароли хранятся в каждой записи пользователя /etc/shadow , вот пример /etc/shadow для пользователя foo с паролем bar:

foo:$6$lWS1oJnmDlaXrx1F$h4vuzZVBwIE1Z6vT7N.spwbxYig9e/OHOIH.VDv9JPaC3.OtTusPFzma7g.R/oSZFW5QOI7IDdDY01G0zTGQE/:16566:0:99999:7:::
foo: имя пользователя 6: тип шифрования пароля lWS1oJnmDlaXrx1F: соль шифрования пароля [ f18]: SHA-512 засоленный / зашифрованный пароль

Чтобы соответствовать данному паролю bar для данного пользователя foo, первое, что нужно сделать, это получить соль:

$ sudo getent shadow foo | cut -d$ -f3
lWS1oJnmDlaXrx1F

Затем следует получить полную соль ed / encrypted password:

$ sudo getent shadow foo | cut -d: -f2
$6$lWS1oJnmDlaXrx1F$h4vuzZVBwIE1Z6vT7N.spwbxYig9e/OHOIH.VDv9JPaC3.OtTusPFzma7g.R/oSZFW5QOI7IDdDY01G0zTGQE/

Затем данный пароль можно солить / зашифровать и сопоставить с паролем засоленного / зашифрованного пользователя, хранящимся в /etc/shadow:

$ python -c 'import crypt; print crypt.crypt("bar", "$6$lWS1oJnmDlaXrx1F")'
$6$lWS1oJnmDlaXrx1F$h4vuzZVBwIE1Z6vT7N.spwbxYig9e/OHOIH.VDv9JPaC3.OtTusPFzma7g.R/oSZFW5QOI7IDdDY01G0zTGQE/

Они совпадение! Все, что помещено в скрипт bash:

#!/bin/bash

read -p "Username >" username
IFS= read -p "Password >" password
salt=$(sudo getent shadow $username | cut -d$ -f3)
epassword=$(sudo getent shadow $username | cut -d: -f2)
match=$(python -c 'import crypt; print crypt.crypt("'"${password}"'", "$6$'${salt}'")')
[ ${match} == ${epassword} ] && echo "Password matches" || echo "Password doesn't match"

Выход:

$ ./script.sh 
Username >foo
Password >bar
Password matches
$ ./script.sh 
Username >foo
Password >bar1
Password doesn't match
0
задан 10 February 2018 в 14:25

0 ответов

Другие вопросы по тегам:

Похожие вопросы: