Crack md5 bằng hashcat trên kali linux
Xin chào, Chào mừng bạn đến với bài cuối của chuyên đề hash cracking của phòng CC: Pen Testing. Trong bài hôm nay chúng ta sẽ làm quen với các công cụ crack hash như Hashcat và John The Ripper, đây đều là các công cụ có sẵn trên Kali Linux, ngoài ra mình cũng giới thiệu thêm một công cụ crack hash online có tên là CrackStation. Chưa hết, trong bài cũng sẽ giới thiệu đến các bạn các công cụ dùng để xác định tên thuật toán hash và danh sách rockyou.txt, đây là một danh sách tập hợp những usernames và passwords hay được sử dụng nhất. Chúng ta sẽ sử dụng rockyou.txt để thực hành crack hash. Chúng ta cùng vào bài. 1 – Hashcat Hashcat là phần mềm crack hash/khôi phục mật khẩu từ hash nhanh nhất và tiên tiến nhất hiện nay trên giao diện dòng lệnh. Hashcat cung cấp cho người sử dụng 5 chế độ tấn công/khôi phục mật khẩu khác nhau áp dụng cho hơn 300 thuật toán hash khác nhau. Hashcat là một phần mềm mã nguồn mở và hoàn toàn miễn phí. Hashcat có thể được sử dụng trên nhiều nền tảng khác nhau như Linux, Windows và MacOS. Ở thời điển hiện tại, Hashcat có thể sử dụng GPU, CPU và các phần cứng tăng tốc độ tính toán khác trên hệ thống máy tính để tăng tốc độ phá password hash. Tuy nhiên, vì phần lớn chúng ta sử dụng máy ảo Kali Linux trên Virtual Box, nên chúng ta sẽ mất đi sự hỗ trợ đắc lực của GPU (card đồ họa). Thực tế, cũng có cách để cho máy ảo trên Virtual Box sử dụng GPU của máy chủ một cách gián tiếp. Tuy nhiên kỹ thuật làm tương đối phức tạp và còn phụ thuộc vào phần cứng của hệ thống bạn đang dùng, nên mình sẽ không đề cập ở đây. Nếu bạn muốn Hashcat đạt được tốc độ phá mật khẩu tối đa mà hệ thống bạn đang sử dụng cho phép, cách dễ nhất là cài song song 2 hệ điều hành Windows và Kali Linux, hoặc bạn có thể cài trực tiếp Hashcat lên Windows. Link download tại đâynhé. Lưu ý: Việc phá password hash phụ thuộc rất nhiều vào sức mạnh phần cứng của hệ thống bạn đang sử dụng. Nếu hệ thống của bạn đang dùng quá yếu, thì dù có chạy Hashcat bên ngoài máy ảo, thì tốc độ phá password hash cũng chỉ được cải thiện ở mức rất nhỏ. Chính vì lẽ đó, các hệ thống được xây dựng chuyên cho mục đích phá password hash thường có phần cứng rất khủng. Đơn cử như hệ thống thí nghiệm phá password hash của trường mình được trang bị 2 CPU Xeon đời mới nhất, 12 GPU RTX 2060 và vài trăm GB RAM. Thật ra hệ thống này chủ yếu được trường mình sử dụng như một virtualization server nơi cho phép học sinh tạo, chứa và chạy máy ảo nhiều hơn là phá hash, tuy nhiên bất cứ lúc nào cần, hệ thống cũng có thể được sử dụng để phá hash. Nhưng điều đó không có nghĩa là với phần cứng khủng như vậy thì có thể phá hash của bất cứ thuật toán nào trong chớp mắt. Việc không xác định đúng hoặc không thể xác định được tên thuật toán hash, kèm theo password dài và khó có thể khiến cho hệ thống chạy phá hash liên tục không nghỉ trong nhiều tuần nếu không muốn nói là tháng hoặc năm. (Thật ra trong thực tế, nếu quá trình phá hash quá lâu, người ta sẽ tìm cách khác để tránh cho hệ thống chạy liên tục trong thời gian quá dài). Nói tóm lại, việc crack hash là một việc rất tốn thời gian vì nó phụ thuộc vào các yếu tố như:
Có một hệ thống với phần cứng siêu mạnh có thể phần nào giúp bạn tiết kiệm được thời gian crack hash khi và chỉ khi giá trị hash của bạn có thể bị cracked và cách duy nhất để biết là thử crack đoạn hash đó trong một khoản thời gian nhất định. Do xác suất thành công của hướng tấn công này chỉ khoản 50%, nên khi pentest hoặc chơi CTF các bạn không nên quá phụ thuộc vào nó. 1a – Một số công cụ xác định thuật toán hash Một điều khá bất lợi trên Hashcat đó là nó không thể nhận diện được password hash mà chúng ta cung cấp được mã hóa bằng thuật toán nào, vì lẽ đó chúng ta phải tìm cách xác định được thuật toán hash thì Hashcat mởi phá hash được. 1a-1 Công cụ Hash Identifier trên Kali Linux Trên Kali Linux, chúng ta có thể sử dụng công cụ Hash Identifier trên giao diện dòng lệnh để xác định thuật toán hash. Đầu tiên, trên Kali Linux, các bạn mở giao diện Terminal lên và gõ câu lệnh sau: vincent@kali:~$ hash-identifierH1a-1.1 Cách sử dụng rất đơn giản, chỉ cần bạn copy và paste đoạn hash của bạn vào dòng “HASH:” và bấm enter. Hệ thống sẽ giúp bạn xác định thuật toán hash. Để thoát ra, các bạn ấn tổ hợp phím Ctrl + C Chúng ta sẽ làm thử vài thí nghiệm nhé, bên dưới là hash của nội dung “xin-chao” được hash bằng 3 thuật toán hash khác nhau:
Ví dụ 1: SHA-256 H1a-1.2Chúng ta thấy Hash Identifier bên cạnh việc xác định và xuất ra tên những thuật toán hash mà nó nghĩ rằng nhiều khả năng đã được dùng để tạo ra hash đầu vào (Possible Hashs), nó còn liệt kê ra các kết quả mà nó nghi ngờ nhưng không chắc chắn (Least Possible Hashs). Và chúng ta có thể thấy, SHA-256 nằm trong nhóm Possible Hashs. Như vậy, Hash Identifier đã xác định đúng thuật toán hash. Ví dụ 2: MD4 H1a-1.3Như chúng ta thấy, với MD4 hash, Hash Identifier lại đặt tên thuật toán đúng ở phần Least Possible Hashs. Nguyên nhân là do một trong những yếu tố các phần mềm nhận biết thuật toán hash dùng để xác định đúng thuật toán hash chính là dựa vào độ dài của hash đầu vào. Ở đây MD5 và MD4 có cùng độ dài là 32 ký tự hex chỉ khác nhau đôi chút cách xử lý dữ liệu, và vì MD5 có phần phổ biến hơn MD4, nên Hash Identifier nghĩ rằng hash đầu vào nhiều khả năng là MD5 hơn MD4. Ví dụ 3: Whirlpool H1a-1.4Với thuật toán hash Whirlpool, Hash Identifier đã dự đoán thuật toán hash chính xác. 1a-2 – Một số công cụ xác định thuật toán hash online Ngoài Hash Identifier, mình còn sử dụng một số công cụ xác định thuật toán hash online khác ví dụ như:
Mục đích là để kiểm tra lại kết quả của Hash Identifier. Lưu ý: Kết quả của các công cụ xác định thuật toán hash chỉ là tương đối và không phải lúc nào các công cụ này cũng xác định được thuật toán đã dùng để hash dữ liệu. Trong trường hợp ấy, chúng ta có thể sử dụng các giải pháp crack hash có kèm theo chức năng tự xác định thuật toán trước khi crack ví dụ như John The Ripper (mình sẽ trình bày ở phần 2) hoặc các công cụ crack hash online. 1b – Cách sử dụng Hashcat Trên giao diện dòng lệnh của Kali Linux, chúng ta gõ câu lệnh bên dưới để truy cập vào phần hướng dẫn sử dụng của Hashcat vincent@kali:~$ hashcat --helpH1b.1 Vì Hashcat không có chức năng tự xác định thuật toán hash như mình đã nói lúc đầu, nên sau khi xác định được thuật toán hash bằng các công cụ mình đã nói ở phần 1a, chúng ta sẽ phải chỉ cho Hashcat thuật toán được dùng của hash đầu vào là gì. Trên Hashcat, thông tin này được gọi là hash modes. H1b.2Như chúng ta thấy, Hashcat hỗ trợ rất nhiều thuật toán hash khác nhau đồng thời còn cho chúng ta biết phân loại của các thuật toán hash nữa. Hash cat hỗ trợ 4 hình thức crack hash:
Một câu lệnh tấn công Hashcat cơ bản sẽ có cú pháp như sau: hashcat -a Theo đó ta có các thành phần bắt buộc phải có như sau:
Một số mẫu câu lệnh khác của Hashcat: H1b.3Hôm nay, chúng ta sẽ thực hành Dictionary attack để crack hash với Hashcat nhé. 1b-1 – File rockyou.txt Đầu tiên chúng ta cần một danh sách đã. Trong Kali Linux, có sẵn một danh sách khá thần thánh tên là rockyou.txt. Để đến được directory chứa file này, các bạn hãy gõ những câu lệnh sau: vincent@kali:~$ cd /usr/share/wordlists vincent@kali:/usr/share/wordlists$ lsH1b-1.1 Chúng ta sẽ thấy được file rockyou.txt. Tuy nhiên chúng ta chưa dùng được file ngay đâu vì file hiện đã bị zip bằng gzip, chúng ta cần phải giải nén file trước đã. Làm điều đó bằng câu lệnh sau: vincent@kali:/usr/share/wordlists$ sudo gzip -d rockyou.txt.gz Chú thích: Flag -d dùng để chỉ bạn muốn decompress (giải nén) file. Kiểm tra lại bằng lệnh ls chúng ta sẽ thấy file rockyou.txt đã được giải nén thành công. H1b-1.2Rock you là một file có kích thước rất lớn, nếu bạn dùng lệnh “wc -l” để kiểm tra sẽ thấy file chứa hơn 14 triệu dòng dữ liệu, kích thước file khoản 123 MB. Đây là tập hợp của những username và password hay được sử dụng nhất. H1b-1.3Nếu các bạn dự định mở file để kiểm tra xem password mà mình dùng có nằm trong file này hay không? Thì các bạn nên dùng các câu lệnh để kiểm tra sẽ nhanh và hiệu quả hơn là mở file này trực tiếp. Vì nếu phần cứng hệ thống máy của bạn quá yếu, mở một file với dữ liệu nhiều thế này có khả năng sẽ làm máy bạn bị treo. Để kiểm tra chúng ta sẽ dùng các câu lệnh sau: vincent@kali:/usr/share/wordlists$ cat rockyou.txt | grep "passsword12345678" Bạn nào quên các câu lệnh trên thì hãy xem lại các bài trong series Linux Căn Bản nhé. Trong câu lệnh trên, mình đã thử kiểm tra xem password12345678 liệu có nằm trong danh sách không? và kết quả là có H1b-1.4Lưu ý: Password của bạn không nằm trong rockyou.txt không đồng nghĩa với việc password của bạn an toàn. Ví dụ: Bạn thấy kết quả password12345678 có nằm trong danh sách, sau đó bạn đổi lại thành password87654321, việc thay đổi này sẽ chẳng giải quyết được vấn đề gì nhiều cả vì các cụm từ như password và 123456789 đều là những cụm từ dễ đoán, hacker hoàn toàn có thể tập trung bruteforce các password tạo thành từ các chữ và chữ số sau password,1,2,3,4,5,6,7,8,9,0, việc này có thể tốn thời gian nhưng chắc chắn password của bạn sẽ bị lộ nếu hacker đủ kiên trì. Thêm một điều nữa đó là password này chủ yếu chứa các ký tự tiếng Anh, chứ không bao gồm các từ tiếng Việt như:
Nhưng điều đó cũng không đồng nghĩa với việc một file text chứa các mật khẩu có kèm từ tiếng Việt không tồn tại đâu nhé. Thế nên, nếu password bạn đang dùng quá đơn giản thì nên thay ngay đi nhé. Về vấn đề này mình sẽ có một bài riêng sau này về cách tạo và quản lý mật khẩu, mong các bạn sẽ ủng hộ. 1b-2 – Crack MD5 và MD4 với Hashcat Phòng CC: Pen Testing task 13 có cho chúng ta 2 chuỗi hash ở MD5 và MD4, chúng ta thử thực hành crack hash xem sao nhé. MD5: 56ab24c15b72a457069c5ea42fcfc640 Chúng ta sẽ dùng câu lệnh sau để lưu đoạn hash trên vào file md5.hash: vincent@kali:~$ echo "56ab24c15b72a457069c5ea42fcfc640" >> md5.hash Sau đó dùng hashcat để crack đoạn hash trên: vincent@kali:~$ hashcat -a 0 -m 0 md5.hash /usr/share/wordlists/rockyou.txtH1b-2.1 Sau vài giây chạy, chúng ta đã có được mật khẩu gốc trước khi hash. MD4: 4bc9ae2b9236c2ad02d81491dcb51d5f Đầu tiên, chúng ta sẽ lưu đoạn hash trên vào file md4.hash vincent@kali:~$ echo "4bc9ae2b9236c2ad02d81491dcb51d5f" >> md4.hash Sau đó dùng câu lệnh sau để crack hash vincent@kali:~$hashcat -a 0 -m 900 md4.hash /usr/share/wordlists/rockyou.txt Chú thích: 900 là module của MD4. H1b-2.2Sau vài giây, chúng ta cũng có được password gốc trước khi hash. 2 – John The Ripper Một công cụ khác cũng hay được sử dụng để crack hash là John The Ripper. Đây cũng là một công cụ trên giao diện dòng lệnh và cũng có thể được cài trên nhiều hệ điều hành khác nhau như MacOS, Windows và Linux (bạn nào muốn cài trên Windows thì tham khảo link saunhé). John The Ripper có 2 phiên bản chính, 1 bản miễn phí, mã nguồn mở và 1 bản tính phí. John The Ripper được thiết kế rất dễ sử dụng và có tích hợp cả tính năng tự động nhận diện thuật toán hash, thế nên chúng ta không cần phải xác định thuật toán rồi mới crack giống như Hashcat. Để truy cập vào hướng dẫn sử dụng của John The Ripper bản miễn phí được cài sẵn trên Kali Linux chúng ta làm như sau: Trên giao diện Terminal của Kali Linux gõ: vincent@kali:~$ john --helpH2.1 Ngoài ra, để xem danh sách các thuật toán hash mà John The Ripper có thể gõ câu lệnh sau: vincent@kali:~$ john --list=formatsH2.2 Cú pháp của John The Ripper rất đơn giản như sau: vincent@kali:~$ john John được trang bị một danh sách password riêng, mặc dù danh sách này khá hạn chế và không thể so sánh với rockyou.txt. Danh sách mặc định của John The Ripper có path như sau: /usr/share/john/password.lst Khi bạn sử dụng câu lệnh john như trên, John The Ripper sẽ chạy để tìm thuật toán hash, sau đó sẽ sử dụng danh sách mặc định của mình để crack hash. Quá trình này sẽ tốn rất nhiều thời gian so với khi bạn cung cấp cho John tên của thuật toán hash, nhưng trong trường hợp chúng ta không thể tìm được tên thuật toán hash thì đành phải chấp nhận. Chúng ta sẽ thử dùng John The Ripper để crack file md5.hash mà chúng ta đã làm ở phần 1b-2 xem sao nhé. vincent@kali:~$ john md5.hashH2.3 Sau khi crack xong các bạn sẽ dùng lệnh sau để xem được password đã được crack vincent@kali:~$ john md5.hash --show Lưu ý: Khi chạy câu lệnh: vincent@kali:~$ john md5.hash Mình đã ngồi chờ hơn 2 tiếng, nhưng John The Ripper vẫn chưa crack xong. Mình quyết định thêm –format=raw-md5 để cho John The Ripper biết thuật toán hash được dùng trong file là gì, lúc này ta sẽ có câu lệnh: vincent@kali:~$ john --format=raw-md5 md5.hash Kết quả John The Ripper chỉ mất vài giây để crack xong đoạn hash. H2.4Vì lẽ đó, nếu có thể, hãy cố gắng xác định thuật toán hash trước khi crack bạn nhé. Trên TryHackMe task 14 có cho chúng ta 2 bài tập crack MD5 và SHA1, mình sẽ làm mẫu với MD5, các bạn thử tự làm SHA1 nhé. Chúng ta có đoạn hash MD5 sau: 5d41402abc4b2a76b9719d911017c592 Để tiết kiệm thời gian, chúng ta sẽ chỉ cho John The Ripper tên thuật toán hash và sẽ sử dụng rockyou.txt thay vì danh sách mặc định. Đầu tiên, chúng ta lưu đoạn hash trên vào file crack.hash vincent@kali:~$ echo "5d41402abc4b2a76b9719d911017c592" >> crack.hash Sau đó, chúng ta sử dụng câu lệnh sau: vincent@kali:~$ john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5 crack.hashH2.5 Sau vài giây, đoạn hash đã được crack xong. Nếu John The Ripper không hiện ra password đã crack thì bạn sử dụng lệnh sau: vincent@kali:~$ john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5 crack.hash --show 3 – Công cụ crack hash online Ngoài Hashcat và John The Ripper ra, mình còn sử dụng CrackStation, một công cụ crack hash online miễn phí, tuy nhiên điểm hạn chế của các công cụ online là số thuật toán hash mà chúng hỗ trợ không nhiều. Các bạn hãy sử dụng kiến thức đã học ở bài trước và bài hôm nay để trả lời các câu hỏi từ task 11 đến 14 nhé. Cám ơn các bạn đã theo dõi, Vincent Nguyễn |