Реверс-инжиниринг соленой логики пароля SHA1 в SQL - PullRequest
0 голосов
/ 19 апреля 2019

Я недавно вступил в должность администратора приложения для приложения, разработанного собственными силами, приложения, которое не было документации и поддержки.

Я обнаружил, что мой предшественник давал один и тот же первоначальный пароль каждому новому пользователю.пользователя, и нет политики паролей, требующей от пользователей изменить свой пароль по сравнению с определенным исходным паролем.Я знаю, каков первоначальный пароль, и я хотел бы разработать отчет SQL, чтобы выяснить, кто имеет этот пароль, чтобы я мог принудительно изменить пароль.

Я не могу написать SQLКод, имитирующий поведение приложений SHA1-хэширования пароля и соли, и хотел бы получить некоторую помощь.

Я создал приведенный ниже пример того, что я пробовал до сих пор, так что любой может скопировать/ вставить и игрушку с.

Тестовый пароль: Пароль1234!
Соль (хранится в БД SQL): PvEdk1itxYINUl1m6tMSBQ ==
Пароль(хранится в БД SQL): K9VK3nis2lKMjGvgkuTogK / 3Nac =

Ниже вы найдете SQL, который я использую для подтверждения концепции.

    DECLARE @Password varchar(100) = 'Password1234!'
    DECLARE @PasswordHex varbinary(max) = CONVERT(varbinary(max), @Password)
    DECLARE @Salt varchar(100) = 'PvEdk1itxYINUl1m6tMSBQ=='
    DECLARE @SaltHex varbinary(max)
    DECLARE @PasswordSaltHex varbinary(max)
    DECLARE @HashedPassHex varbinary(max)
    DECLARE @HashedPass varchar(max)
    --
    SET @SaltHex = cast('' as xml).value('xs:base64Binary(sql:variable("@Salt"))', 'varbinary(max)')
    SET @PasswordSaltHex = @PasswordHex + @SaltHex
    SET @HashedPassHex = HASHBYTES('SHA1',@PasswordSaltHex)
    SET @HashedPass = cast('' as xml).value('xs:base64Binary(sql:variable("@HashedPassHex"))', 'varchar(max)')
    --
    PRINT @Password -- OUTPUT: Password1234!
    PRINT @PasswordHex -- OUTPUT: 0x50617373776F72643132333421
    PRINT @Salt -- OUTPUT: PvEdk1itxYINUl1m6tMSBQ==
    PRINT @SaltHex -- OUTPUT: 0x3EF11D9358ADC5820D525D66EAD31205
    PRINT @PasswordSaltHex -- OUTPUT: 0x50617373776F726431323334213EF11D9358ADC5820D525D66EAD31205
    PRINT @HashedPassHex -- OUTPUT: 0x727B312D682FA8766E6A498B0AF923FFDAF3778F
    PRINT @HashedPass -- OUTPUT: cnsxLWgvqHZuakmLCvkj/9rzd48=

Я ожидаю, что выходные данные @ HashedPass будут такими же, как пароль, хранящийся в базе данных, показанной выше, но они не совпадают.

Это использует SQL Server 2017, и у меня есть относительная уверенность, что используемый алгоритм хэширования - SHA1.

Есть ли у кого-нибудь рекомендации относительно того, что я могу сделать или попытаться решитьмоя проблема?

...