نحوه ذخیره کلمات عبور در SQL Server
نویسنده: وحید محمدطاهری
تاریخ: ۱۳۹۶/۰۸/۱۹ ۱۴:۵۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
SELECT HASHBYTES('SHA2_512',CAST(N'VMT' AS VARBINARY(MAX)))
--0x53DB8AFD20AA76B93DB7BBE855950E679288C843A83899ED4E713B829873306495B6025B7B4FBCDC1BA3EE19C7005BE843A30AC51050C9652E5D1E978DBC3A11
SELECT HASHBYTES('SHA2_512',CAST(N'VMT' AS VARBINARY(MAX))+0xBFE14699)
--0xEF934A8668BD52BEC3295C5DBD2E99555CC074AECBDF32A496C39851A35847DDA7270486B3EC3C77B99334693ECE598617F232C5DC3FCD67EC7D734196913A05 0x0200 BFE14699 EF934A8668BD52BEC3295C5DBD2E99555CC074AECBDF32A496C39851A35847DDA7270486B3EC3C77B99334693ECE598617F232C5DC3FCD67EC7D734196913A05 -- جدول کلمات مورد استفاده برای حدس کلمه عبور
DECLARE @WordList TABLE
(
[Plain] NVARCHAR (MAX)
);
-- درج کلمه عبور با تغییر در نام کاربری
INSERT INTO @WordList ( [Plain] )
SELECT [name] FROM [sys].[sql_logins]
UNION
SELECT REPLACE (REPLACE (REPLACE ([name], 'o', '0'), 'i', '1'), 'e', '3')
FROM [sys].[sql_logins]
UNION
SELECT REPLACE (REPLACE (REPLACE ([name], 'o', '0'), 'i', '1'), 'e', '3') + '.'
FROM [sys].[sql_logins]
UNION
SELECT REPLACE (REPLACE (REPLACE ([name], 'o', '0'), 'i', '1'), 'e', '3') + '!'
FROM [sys].[sql_logins];
-- درج کلمات معمول برای کلمه عبور
INSERT INTO @WordList ( [Plain] )
SELECT N''
UNION ALL
SELECT N'password'
UNION ALL
SELECT N'sa'
UNION ALL
SELECT N'dev'
UNION ALL
SELECT N'test'
UNION ALL
SELECT N'server'
UNION ALL
SELECT N'123456'
UNION ALL
SELECT N'654321'
UNION ALL
SELECT N'asd!@#'
UNION ALL
SELECT N'VMT';
-- تشخیص نوع الگوریتم مورد استفاده در هش کردن کلمه عبور
DECLARE @Algorithm VARCHAR (10);
SET @Algorithm = CASE WHEN @@MICROSOFTVERSION / 0x01000000 >= 11
THEN 'SHA2_512'
ELSE 'SHA1'
END;
-- در صورت یافتن کلمه عبور اطلاعات مربوط به آن در این قسمت بدست میآید
SELECT
[name] ,
[password_hash] ,
SUBSTRING ([password_hash], 3, 4) [Salt] ,
SUBSTRING ([password_hash], 7, ( LEN ([password_hash]) - 6 )) [Hash] ,
HASHBYTES (@Algorithm, CAST([w].[Plain] AS VARBINARY (MAX)) + SUBSTRING ([password_hash], 3, 4)) [ComputedHash] ,
[w].[Plain]
FROM [sys].[sql_logins]
INNER JOIN @WordList [w]
ON SUBSTRING ([password_hash], 7, ( LEN ([password_hash]) - 6 )) = HASHBYTES ( @Algorithm , CAST([w].[Plain] AS VARBINARY (MAX)) + SUBSTRING ([password_hash], 3, 4));
-- همه نامهای کاربری و اطلاعات مربوط به آنها را در اینجا بدست میآید
SELECT
[name] ,
[password_hash] ,
SUBSTRING ([password_hash], 3, 4) [Salt] ,
SUBSTRING ([password_hash], 7, ( LEN ([password_hash]) - 6 )) [Hash]
FROM [sys].[sql_logins];
SELECT [name],[password_hash] FROM sys.sql_logins WHERE PWDCOMPARE(N'VMT',[password_hash]) = 1