CodeKitHub
Công cụ Mã hóa

Công Cụ Tạo Hash NTLM

Cập nhật lần cuối:

Hash NTLM được tính bằng cách mã hóa đầu vào của bạn theo UTF-16LE (2 byte cho mỗi ký tự, little-endian) rồi đưa qua thuật toán băm thông điệp MD4 — phép tính đơn giản một lượt, không có salt đó chính là toàn bộ cơ chế hash NTLM mà Microsoft Windows đã dùng từ thời NT 4.0 để lưu trữ giá trị xác minh mật khẩu. Công cụ này thực hiện đúng phép tính đó ngay trong trình duyệt của bạn, hoàn toàn bằng JavaScript, nên không có gì bạn gõ vào bị gửi lên máy chủ. Nó tồn tại để phục vụ công việc bảo mật chính đáng — xác minh dữ liệu hash xuất ra từ Active Directory, kiểm tra định dạng output của hashcat hoặc Mimikatz, hoặc giải các bài tập CTF và phòng lab pentesting — chứ không phải để tấn công các tài khoản mà bạn không sở hữu hoặc không được cấp phép kiểm tra.

Hash NTLM

Công Cụ Này Là Gì?

NTLM (NT LAN Manager) là giao thức xác thực challenge-response đời cũ của Microsoft, hiện vẫn còn được dùng cho đăng nhập tài khoản Windows cục bộ và làm phương án dự phòng trong nhiều môi trường Active Directory. Giá trị xác minh mật khẩu của nó — thường được gọi là "hash NTLM" — được định nghĩa trong đặc tả giao thức MS-NLMP của chính Microsoft dưới dạng `MD4(UTF-16-LE(password))`: mật khẩu trước tiên được mã hóa theo UTF-16 little-endian (mỗi ký tự trở thành 2 byte, khác với UTF-8), rồi chuỗi byte đó được băm một lượt bằng thuật toán MD4 theo RFC 1320.

Bước UTF-16LE là chi tiết mà đa số người triển khai lại NTLM hay làm sai: băm các byte UTF-8 của một chuỗi thay vì các byte UTF-16LE của nó sẽ cho ra một digest hoàn toàn khác và sai, dù văn bản hiển thị trông giống hệt nhau. Công cụ này mã hóa đúng cách, nên output của nó khớp với những gì Windows thực sự lưu trữ và những gì các công cụ như hashcat (chế độ 1000) và Mimikatz mong đợi.

Vì NTLM ra đời trước khi các thiết kế hash mật khẩu hiện đại xuất hiện, nó không có bất kỳ cơ chế bảo vệ nào được xây dựng riêng để làm chậm việc bẻ khóa: không có salt riêng cho từng người dùng, không có hệ số công việc (work factor) có thể cấu hình, và không có lặp lại (iteration) chủ động. Đây chỉ là một lượt MD4 duy nhất, khiến việc tính toán cực kỳ nhanh — một đặc tính tiện lợi cho tương thích ngược nhưng lại là thảm họa khi phải chống lại tấn công brute-force và dictionary.

Tại Sao Nên Dùng?

  • Bạn vừa export bản dump NTDS.dit trong một đợt pentest được cấp phép và cần xác minh nhanh xem một hash cụ thể có khớp với mật khẩu ứng viên hay không trước khi báo cáo cho khách hàng.
  • Đang viết lại trình phân tích MS-NLMP bằng ngôn ngữ lập trình khác và cần một hash tham chiếu chắc chắn đúng để so sánh từng dòng với output code của mình.
  • Chuẩn bị wordlist cho bài tập hashcat (`-m 1000`) trong lab CTF của riêng bạn và cần một hash NTLM mẫu hợp lệ để kiểm tra lệnh trước khi chạy trên dữ liệu thật.
  • Output của Mimikatz trông đáng ngờ trong một cuộc kiểm toán thông tin xác thực red-team chính thức, và bạn muốn đối chiếu độc lập trước khi kết luận có bất thường.
  • 100% cục bộ: đầu vào của bạn không bao giờ rời khỏi trình duyệt, nên an toàn để dùng ngay cả với dữ liệu xác thực nhạy cảm trong một đợt đánh giá được cấp phép.

Cách Sử Dụng

  1. Gõ mật khẩu hoặc chuỗi ký tự bạn muốn băm vào ô nhập liệu.
  2. Nhấn "Generate NTLM Hash".
  3. Đọc hash NTLM gồm 32 ký tự hex (mặc định hiển thị chữ in hoa, đúng như cách Windows và hầu hết các công cụ bẻ khóa hiển thị — bỏ tick ô này để chuyển sang chữ thường).
  4. Nhấn "Copy" để sao chép hash vào clipboard.

Ví dụ

Đầu vào

password

Đầu ra

8846F7EAEE8FB117AD06BDD830B7586C

Đây là một test vector nổi tiếng và có thể kiểm chứng độc lập: hash NTLM của chuỗi "password" luôn luôn là 8846F7EAEE8FB117AD06BDD830B7586C. Bạn có thể đối chiếu output của công cụ này với bất kỳ triển khai NTLM đúng nào khác.

NTLM so với các phương pháp băm mật khẩu hiện đại

Bảng dưới đây làm rõ vì sao NTLM bị coi là lỗi thời khi dùng để bảo vệ các hệ thống mới, dù nó vẫn còn ăn sâu vào hạ tầng Windows và Active Directory đời cũ.

Đặc tínhNTLMbcrypt / scrypt / Argon2
Nguyên lý nền tảngMột lượt MD4 duy nhấtHash chậm được thiết kế riêng, chi phí có thể điều chỉnh
SaltKhông có — mật khẩu giống hệt nhau luôn cho hash giống hệt nhauSalt ngẫu nhiên riêng cho từng mật khẩu
Lặp lại / kéo dài (stretching)Không cóHệ số công việc có thể cấu hình, tăng dần theo thời gian
Khả năng chống brute-forceRất yếu — hàng tỷ lượt thử/giây trên GPU hiện đạiCố tình tốn kém cho mỗi lượt thử
Nơi vẫn còn xuất hiệnXác thực Windows đời cũ, dự phòng cho Active DirectoryỨng dụng mới, thực hành tốt nhất hiện nay

Công cụ liên quan

Nếu bạn cần một hash mã hóa đa dụng thay vì cấu trúc MD4(UTF-16LE) đặc thù của NTLM, các công cụ dưới đây có thể phù hợp hơn.

Công Cụ Tạo Hash Đa Thuật Toán · Công Cụ Tạo MD5 · Công Cụ Tạo Mật Khẩu

Quy trình xác minh nhanh

  • Luôn bắt đầu bằng cách tính hash của test vector "password" và đối chiếu với 8846F7EAEE8FB117AD06BDD830B7586C trước khi tin tưởng kết quả trên dữ liệu thật.
  • Khi so sánh với output hashcat mode 1000, hãy đảm bảo đã đồng nhất chữ hoa/thường của hash trước — khác biệt hoa/thường có thể khiến so sánh chuỗi trông như thất bại dù hash thực chất giống nhau.
  • Để xác minh triển khai code của riêng bạn, hãy thử cả mật khẩu có ký tự không phải ASCII (không chỉ chữ Latin thông thường) — đó là nơi lỗi encoding UTF-16LE hay xuất hiện nhất.
  • Lưu kết quả hash của test vector vào ghi chú cá nhân để tham khảo nhanh mỗi khi cần xác minh lại một công cụ hoặc thư viện NTLM khác trong tương lai.

Câu Hỏi Thường Gặp

Hash NTLM chính xác là gì?

Đó là giá trị xác minh mật khẩu mà Windows tính toán và lưu trữ cho xác thực NT LAN Manager, được định nghĩa trong đặc tả MS-NLMP của Microsoft dưới dạng MD4(UTF-16LE(password)) — một lượt MD4 duy nhất trên chuỗi byte UTF-16 little-endian của mật khẩu. Nó luôn có độ dài 128 bit, hiển thị dưới dạng 32 ký tự hex.

Tại sao lại là UTF-16LE cụ thể, chứ không phải UTF-8 hay ASCII?

Windows đã lưu trữ văn bản nội bộ dưới dạng UTF-16LE từ khi NT được thiết kế, nên mật khẩu cũng được mã hóa theo cách đó trước khi băm. Mỗi ký tự trở thành 2 byte (thứ tự byte little-endian), kể cả các ký tự ASCII thuần như 'a', sẽ trở thành 0x61 0x00 thay vì chỉ 0x61. Băm các byte UTF-8 của cùng một chuỗi sẽ cho ra kết quả hoàn toàn khác và sai — đây là lỗi phổ biến nhất khi tự viết lại NTLM từ đầu.

NTLM có an toàn để dùng ngày nay không?

Không, và chính Microsoft cũng khuyến nghị chuyển sang Kerberos khi có thể. NTLM không có salt, nên các mật khẩu giống hệt nhau luôn cho ra hash giống hệt nhau trên mọi người dùng và mọi hệ thống, tạo điều kiện cho việc tra cứu bằng rainbow table đã tính sẵn. Nó cũng không có lặp lại hay hệ số công việc — chỉ một lượt MD4 không salt — nên các GPU hiện đại có thể thử hàng tỷ khả năng mỗi giây với một hash bị đánh cắp. Nó vẫn tồn tại chủ yếu để tương thích ngược với các hệ thống và ứng dụng Windows đời cũ.

NTLM khác gì so với các phương pháp băm mật khẩu hiện đại như bcrypt, scrypt hay Argon2?

Các thuật toán băm mật khẩu hiện đại được thiết kế cố tình chậm và có salt: bcrypt, scrypt và Argon2 đều thêm một salt ngẫu nhiên riêng cho mỗi mật khẩu cùng một hệ số chi phí (cost factor) có thể điều chỉnh và tăng dần theo thời gian khi phần cứng mạnh lên, nhằm mục đích khiến việc brute-force trở nên tốn kém ngay cả ở quy mô lớn. NTLM không có cả hai điều đó — nó được thiết kế trong thời kỳ trước khi brute-force offline trở thành một mối đe dọa thực tế, và điều đó thể hiện rất rõ. Đây chính là lý do NTLM không bao giờ nên được dùng để bảo vệ bất cứ thứ gì được thiết kế ngày nay; các trường hợp sử dụng thực sự của công cụ này là tương thích với hạ tầng Windows hiện có và kiểm thử bảo mật được cấp phép, chứ không phải để xây dựng hệ thống mới.

Những trường hợp sử dụng hợp pháp của công cụ tạo hash NTLM là gì?

Xác minh các hash lấy từ cơ sở dữ liệu SAM hoặc NTDS.dit trong một cuộc kiểm thử xâm nhập hoặc kiểm toán thông tin xác thực được cấp phép; kiểm tra công cụ hoặc script của bạn có triển khai MS-NLMP đúng hay không; tạo hash thử nghiệm để kiểm tra tương thích định dạng với hashcat (chế độ 1000) hoặc Mimikatz trong một môi trường lab do bạn kiểm soát; và thực hành các bài CTF hoặc bài tập đào tạo có liên quan trực tiếp đến NTLM. Dùng công cụ này để tấn công các tài khoản hoặc hệ thống mà bạn không sở hữu hoặc không có sự cho phép bằng văn bản để kiểm tra không phải là một mục đích sử dụng hợp pháp.

Mật khẩu hoặc dữ liệu tôi nhập vào có được gửi lên máy chủ không?

Không. Phép tính MD4 chạy hoàn toàn bằng JavaScript ngay trong trình duyệt của bạn — không có API trình duyệt gốc nào cho MD4, nên nó được triển khai trực tiếp trong mã nguồn phía client của trang này, và không có gì bạn gõ vào bị truyền đi bất kỳ đâu.

Tại sao hash NTLM tôi tính ra không khớp với hash trong bản dump NTDS.dit?

Nguyên nhân phổ biến nhất là lỗi encoding ký tự ở một triển khai khác (ví dụ dùng UTF-8 thay vì UTF-16LE), hoặc mật khẩu chứa ký tự ẩn (khoảng trắng thừa, ký tự Unicode không chuẩn) mà mắt thường không thấy trên màn hình. Hãy thử băm test vector "password" trước — kết quả phải chính xác là 8846F7EAEE8FB117AD06BDD830B7586C — để chắc chắn công cụ của bạn đúng trước khi so sánh hash thật.

Công cụ này có thể bẻ khóa (crack) hash NTLM chứ không chỉ tính toán không?

Không — đây thuần túy là máy tính một chiều, chuyển mật khẩu thành hash, không làm ngược lại. Để bẻ khóa một hash NTLM đã có (với sự cho phép hợp pháp), bạn cần công cụ crack chuyên dụng như hashcat hoặc John the Ripper, thử nhiều mật khẩu ứng viên và so sánh hash của chúng.

Công Cụ Liên Quan