Зашифруйте пароль, который делает тот же путь mysql

Vimcasts Drew Neils удивительны, смотрят на этого. Это помогает мне, сделал переход от Textmate до Vim

http://vimcasts.org/episodes/show-invisibles/

15
06.08.2012, 23:07
9 ответов

Ну, тривиальное (возможно, обманывающий) путь должно было бы работать:

mysql -NBe "select password('right')"

Это произведет пароль с помощью любой схемы хеширования пароля версия использования mysql. [РЕДАКТИРОВАНИЕ: добавленный-NB, который избавляется от имен столбцов и искусства таблицы ASCII.]

13
27.01.2020, 19:49
  • 1
    И, ловко, это сохранит Ваш новейший пароль в открытом тексте и в Вашем журнале MySQL и в Вашем журнале истории учетной записи удара. –  Craig 14.09.2014, 21:16

Хеш является sha1 (sha1 (пароль)). С тех пор нет никакой соли (который является серьезным дефектом безопасности), можно искать хеш в таблице.

С просто инструментами POSIX плюс sha1sum от GNU coreutils или BusyBox, sha1 (sha1 (пароль)) является раздражающим для вычислений потому что sha1sum команда распечатывает обзор в шестнадцатеричном и нет никакого стандартного инструмента для преобразования в двоичный файл.

awk "$(printf %s 'right' | sha1sum |
       sed -e 's/ .*//' -e 's/../, 0x&/g' \
           -e 's/^/BEGIN {printf "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c"/' \
           -e 's/$/; exit}/')" | sha1sum

Python имеет стандартные обзоры в своих стандартных библиотеках, таким образом, это - простая острота.

printf %s 'right' |
python -c 'from hashlib import sha1; import sys; print sha1(sha1(sys.stdin.read()).digest()).hexdigest()'

Или с паролем в остроте:

python -c 'from hashlib import sha1; print sha1(sha1("right").digest()).hexdigest()'
4
27.01.2020, 19:49
  • 1
    я люблю этот ответ в духе, но это не является довольно рабочим. Когда я поразил клавишу Enter, она все еще хочет продолжать читать вход вместо хождения дальше. Кроме того, вход echos назад на экран, который не мог бы быть желательным. Как насчет чего-то вроде этого, хотя? unix.stackexchange.com/a/155583/37401 –  Craig 14.09.2014, 22:33
  • 2
    @Craig, Как считать интерактивный вход, вне scopre вопроса. Я предполагаю, что сценарий уже имеет пароль; обычно это хранится в файле, редко ввести пароль базы данных в интерактивном режиме. Если Вы хотите считать интерактивный вход, можно использовать read окружите встроенный для чтения строки; выполненный stty echo сначала, если Вы хотите выключить эхо и ssty +echo снова включать его. В Python можно использовать getpass модуль. –  Gilles 'SO- stop being evil' 14.09.2014, 22:49
  • 3
    Да, я знаю... и достаточно ярмарка! Я просто ненавижу ужасную безопасность далее в будущем, я иду, и безопасность MySQL довольно ужасна в целом, таким образом, у меня есть эта тенденция коленного рефлекса хотеть ввести немного понимания безопасности везде, где я получаю шанс. ;-) –  Craig 14.09.2014, 23:42

MySQL 4.1 + использование удваивает SHA1

> SELECT PASSWORD("right")
*920018161824B14A1067A69626595E68CB8284CB

> SELECT SHA1(UNHEX(SHA1("right")))
920018161824B14A1067A69626595E68CB8284CB

sh-3.2# php -r 'echo "*" . sha1(sha1("right", TRUE)). "\n";'
*920018161824b14a1067a69626595e68cb8284cb

Этот алгоритм может быть легко портирован на другие языки ​​. Различие - то, что хэши пароля в "избранном пароле" всегда начинаются “*” символ.

0
27.01.2020, 19:49

Если Вы создали пользователя и забыли пароль, то это то, что Вы должны сделать, и это проще.

Это также происходило со мной дюжину раз, когда я делал 10 миллиардов вещей одновременно. Лучше всего я восстановил свой пароль:

остановил mysql сервер полностью сначала

выдал mysqld_safe -- skip-grant-tables &

затем я вошел в систему как root без выдачи пароля, просто mysql -u mysql-user (он позволяет вам войти после mysqld_safe)

затем зайдите в mysql > таблицу пользователей и обновите пароль пользователя

затем вернитесь и перезапустите mysql

посмотрите, работает ли это, и дайте нам знать.

1
27.01.2020, 19:49

До сих пор мне кажется, что MySQL не утруждает себя обработкой паролей в командной строке и в логах. И это единственная причина, по которой я добавляю ответ, а не просто комментирую ответ @Gilles.

Так что, конечно, вы могли бы просто войти в MySQL в качестве администратора и установить новый пароль для вашего пользователя blayo, как предложила @patrix.

Однако, стандартный способ сделать это - использовать функцию password() в MySQL, которая воспринимает простой текстовый пароль в качестве аргумента (серьезно?).

Если вы сделаете это, вы оставите простую текстовую версию пароля пользователя MySQL в истории ударов и в логах MySQL для последующего легкого извлечения тем, кому удастся получить доступ к этим лог-файлам.

Не лучше ли иметь небольшую утилиту, которая запрашивает пароль, без эха на экране или в логах, затем предоставить вам полученный MySQL-совместимый хэш?

Итак, немного изменив ответ @Gilles, как насчет небольшого скрипта оболочки, использующего Python, как насчет следующих вещей. Вы можете легко изменить его, чтобы запустить SQL оператор против вашей базы данных MySQL, чтобы установить пароль сразу. Но даже не заходя так далеко, просто скопируйте и вставьте полученный хэш в SQL оператор, чтобы обновить таблицу пользователей:

#!/bin/bash

mysqlpwd=$(/usr/bin/python -c 'from hashlib import sha1; import getpass; print "*" + sha1(sha1(getpass.getpass("New MySQL Password:")).digest()).hexdigest()')

echo $mysqlpwd
6
27.01.2020, 19:49

Некоторые однострочные:

MySQL (может потребоваться добавить -u (user) -p):

mysql -NBe "select password('right')"

Python :

python -c 'from hashlib import sha1; print "*" + sha1(sha1("right").digest()).hexdigest().upper()'

Perl :

perl -MDigest::SHA1=sha1_hex -MDigest::SHA1=sha1 -le 'print "*". uc sha1_hex(sha1("right"))'

PHP :

php -r 'echo "*" . strtoupper(sha1(sha1("right", TRUE))). "\n";'

Ruby :

ruby -e 'require "digest/sha1"; puts "*" + Digest::SHA1.hexdigest(Digest::SHA1.digest("right")).upcase'

Весь вывод:

* 920018161824B14A1067A69626595E68CB8284CB

12
27.01.2020, 19:49

Еще одно использование оболочки:

echo -n 'right' | sha1sum | xxd -r -p |\
sha1sum | tr '[a-z]' '[A-Z]' | awk '{printf "*%s", $1}'

Объяснение:

  1. echo -n печать без разрыва строки
  2. sha1sum первый SHA1
  3. xxd -r -p распаковать хэш
  4. sha1sum второй SHA1
  5. tr '[az]' '[AZ]' преобразовать в верхний регистр
  6. awk '{print "*" $ 1}' добавить начало *

Подробнее:

Между 2. и 3. необязательный шаг awk '{printf "% s", $ 1}' может быть установлен для удаления новой строки и дефиса. Но xxd все равно проигнорирует их (спасибо dave_thompson_085).

Кроме того, шаги 5 и 6 можно выполнить сразу, заменив их на {print "*" toupper ($ 1)} (Спасибо dave_thompson_085).

5
27.01.2020, 19:49

Другой с использованием оболочки

echo -n 'right' | openssl sha1 -binary | openssl sha1 -hex | \
    sed 's/^.* //' | \
    awk '{print "*"toupper($0)}'

...который выводит:

*920018161824B14A1067A69626595E68CB8284CB
2
27.01.2020, 19:49

Один лайнер Python3, на случай, если кому-нибудь пригодится:

python3 -c 'from hashlib import sha1; print(f"""*{sha1(sha1("right".encode()).digest()).hexdigest().upper()}""")'

*920018161824B14A1067A69626595E68CB8284CB
0
29.06.2020, 04:14

Теги

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