Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để giải mã mật khẩu từ máy chủ SQL?

Thuật toán băm mật khẩu SQL Server:

hashBytes = 0x0100 | fourByteSalt | SHA1(utf16EncodedPassword+fourByteSalt)

Ví dụ:để băm mật khẩu "dập ghim pin ngựa chính xác" . Đầu tiên, chúng tôi tạo một số muối ngẫu nhiên:

fourByteSalt = 0x9A664D79;

Và sau đó băm mật khẩu (được mã hóa bằng UTF-16) cùng với muối:

 SHA1("correct horse battery staple" + 0x9A66D79);
=SHA1(0x63006F007200720065006300740020006200610074007400650072007900200068006F00720073006500200073007400610070006C006500 0x9A66D79)
=0x6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3

Giá trị được lưu trữ trong syslogins bảng là nối của:

[tiêu đề] + [muối] + [băm]
0x0100 9A664D79 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3

Cái mà bạn có thể thấy trong SQL Server:

SELECT 
   name, CAST(password AS varbinary(max)) AS PasswordHash
FROM sys.syslogins
WHERE name = 'sa'

name  PasswordHash
====  ======================================================
sa    0x01009A664D796EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3
  • Tiêu đề phiên bản: 0100
  • Muối (bốn byte): 9A664D79
  • Băm: 6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3 (SHA-1 là 20 byte; 160 bit)

Xác thực

Bạn xác thực mật khẩu bằng cách thực hiện cùng một hàm băm:

  • lấy muối từ PasswordHash đã lưu :0x9A664D79

và thực hiện lại băm:

SHA1("correct horse battery staple" + 0x9A66D79);

sẽ xuất hiện với cùng một hàm băm và bạn biết mật khẩu là chính xác.

Những gì đã từng là tốt, nhưng bây giờ là yếu kém

Thuật toán băm được giới thiệu với SQL Server 7, vào năm 1999, rất tốt cho năm 1999.

  • Thật tốt khi mật khẩu được băm thành muối.
  • Tốt là bạn nên nối thêm muối vào mật khẩu, thay vì thêm trước nó.

Nhưng ngày nay nó đã lỗi thời. Nó chỉ chạy hash một lần, trong đó nó sẽ chạy nó vài nghìn lần, để ngăn chặn các cuộc tấn công brute-force.

Trên thực tế, Trình phân tích bảo mật cơ sở của Microsoft, như một phần của quá trình kiểm tra, sẽ cố gắng thực thi mật khẩu. Nếu nó đoán bất kỳ, nó sẽ báo cáo mật khẩu là yếu. Và nó nhận được một số.

Cưỡng ép vũ phu

Để giúp bạn kiểm tra một số mật khẩu:

DECLARE @hash varbinary(max)
SET @hash = 0x01009A664D796EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3
--Header: 0x0100
--Salt:   0x9A664D79
--Hash:   0x6EDB2FA35E3B8FAB4DBA2FFB62F5426B67FE54A3

DECLARE @password nvarchar(max)
SET @password = 'password'

SELECT
    @password AS CandidatePassword,
    @hash AS PasswordHash,

    --Header
    0x0100
    +
    --Salt
    CONVERT(VARBINARY(4), SUBSTRING(CONVERT(NVARCHAR(MAX), @hash), 2, 2))
    +
    --SHA1 of Password + Salt
    HASHBYTES('SHA1', @password + SUBSTRING(CONVERT(NVARCHAR(MAX), @hash), 2, 2))

SQL Server 2012 và SHA-512

Bắt đầu với SQL Server 2012, Microsoft chuyển sang sử dụng SHA-2 512-bit:

hashBytes = 0x0200 | fourByteSalt | SHA512(utf16EncodedPassword+fourByteSalt)

Thay đổi tiền tố phiên bản thành 0x0200 :

SELECT 
   name, CAST(password AS varbinary(max)) AS PasswordHash
FROM sys.syslogins

name  PasswordHash
----  --------------------------------
xkcd  0x02006A80BA229556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393FC66226B7D38
  • Phiên bản: 0200 (SHA-2 256-bit)
  • Muối: 6A80BA22
  • Băm (64 byte): 9556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393

Điều này có nghĩa là chúng tôi băm mật khẩu được mã hóa UTF-16, với hậu tố muối:

  • SHA512 ( "mặt hàng ghim pin ngựa đúng" + 6A80BA22 )
  • SHA512 ( 63006f0072007200650063007400200068006f0072007300650020006200610074007400650072007900200073007400610070006c006500 + 6A80BA22 )
  • 9556EB280AA7818FAF63A0DA8D6B7B120C6760F0EB0CB5BB320A961B04BD0836 0C0E8CC4C326220501147D6A9ABD2A006B33DEC99FCF1A822393FC66226B7D38


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách cài đặt sqlcmd &bcp trên Red Hat

  2. Không thể thu nhỏ cơ sở dữ liệu ‘chỉ đọc’ | Thu hẹp nhật ký giao dịch khi sử dụng nhóm AlwaysOn Av sẵn sàng

  3. Cơ sở dữ liệu hệ thống máy chủ SQL - Bảo trì MSDB

  4. Thiết kế cơ sở dữ liệu:Tính Số dư Tài khoản

  5. SqlParameter không cho phép Tên bảng - các tùy chọn khác mà không có cuộc tấn công tiêm sql?