استفاده از Hash-Identifier جهت شناسایی Hash و Crack کردن

یکی از مراحل اولیه برای کرک کردن کلمات عبور Hash شده، شناسایی نوع Hash آن است. در این آموزش نحوه عملی استفاده از ابزار Hash-Identifier را خواهیم دید.

Hash­ها معمولا برای ذخیره اطلاعات حساس مانند اطلاعات هویتی (همانند گذرواژه) استفاده می­ شوند تا از ذخیره آن­ها به صورت متن ساده جلوگیری شود. با ابزارهایی مانند Hashcat می­توان این Hash­ها را کرک کرد، اما فقط در صورتی که الگوریتمی که برای تولید Hash استفاده شده را بدانیم. با استفاده از ابزاری به نام Hash identifier، می­توان به­ آسانی هرگونه Hash را بررسی کرده و مد (حالت) صحیح Hashcat را پیدا کرد تا برای بازیابی رمز استفاده کنیم.

Hash identifier علاوه بر کرک کردن Hash، برای شناسایی الگوریتم  ­های هشینگ (Hash کردن) نیز، که برای ارائه یک مقدار checksum برای دانلود استفاده می­شود، کاربرد دارد و می­توان از آن برای تعیین اینکه چه برنامه­ ای Hash­ را تولید کرده، مانند پایگاه های ­داده SQL که تعیین نوع آن نقش بسزایی دارد. به طور مثال، هش زیر MD5 است و می خواهیم آن را کرک کنیم.

8743b52063cd84097a65d1633f5c74f5

اگر شما با Hash­های زیادی کار می­کنید، ممکن است تفاوت بین انواع Hash­هایی که معمولا به کار می­روند، برایتان آسان باشد. هنگام استفاده از Hashcat برای کرک کردن این Hash، باید گزینه m را در مد (حالت) صحیح تنظیم کنیم. برای کرک کردن هش MD5، از شماره مد 0 برای بدست آوردن Hash استفاده می­کنیم.

~$ sudo hashcat -m 0 -a 0 8743b52063cd84097a65d1633f5c74f5 example.dict --force

hashcat (v4.0.1) starting...

OpenCL Platform #1: The pocl project
====================================
* Device #1: pthread-Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz, 1024/3639 MB allocatable, 2MCU

8743b52063cd84097a65d1633f5c74f5:hashcat

در اینجا، دریافتیم که Hash کلمه “Hashcat” است. این کرک کردن فقط به خاطر این است که می دانستیم هش MD5 است و البته داشتن یک wordlist تاثیر بسیاری در موفقیت دارد.

چه Hash­هایی پشتیبانی می­شوند؟

در حال حاضر، می­توان تعداد زیادی از Hashها را شناسایی کرد که Hashcat قادر به کرکینگ آن­ها است. در مخزن GitHub برای Hash-identifier، لیست Hash­های پشتیبانی شده تا امروز به شرح زیر می باشد:

Encryption formats supported:

    ADLER-32
    CRC-32
    CRC-32B
    CRC-16
    CRC-16-CCITT
    DES(Unix)
    FCS-16
    GHash-32-3
    GHash-32-5
    GOST R 34.11-94
    Haval-160
    Haval-192 110080 ,Haval-224 114080 ,Haval-256
    Lineage II C4
    Domain Cached Credentials
    XOR-32
    MD5(Half)
    MD5(Middle)
    MySQL
    MD5(phpBB3)
    MD5(Unix)
    MD5(WordPress)
    MD5(APR)
    Haval-128
    MD2
    MD4
    MD5
    MD5(HMAC(WordPress))
    NTLM
    RAdmin v2.x
    RipeMD-128
    SNEFRU-128
    Tiger-128
    MySQL5 - SHA-1(SHA-1($pass))
    MySQL 160bit - SHA-1(SHA-1($pass))
    RipeMD-160
    SHA-1
    SHA-1(MaNGOS)
    Tiger-160
    Tiger-192
    md5($pass.$salt) - Joomla
    SHA-1(Django)
    SHA-224
    RipeMD-256
    SNEFRU-256
    md5($pass.$salt) - Joomla
    SAM - (LM_hash:NT_hash)
    SHA-256(Django)
    RipeMD-320
    SHA-384
    SHA-256
    SHA-384(Django)
    SHA-512
    Whirlpool

شناسایی Hash­های ناشناخته

برای امتحان Hash identifier، ما پنج Hash ناشناخته را بررسی خواهیم کرد.

Hash 1: 7196759210defdc0
Hash 2: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d (256)
Hash 3: 32c0ced56f1fe08583bdb079d85a35a81995018c (1)
Hash 4: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10 (512)
Hash 5: 5f804b61f8dcf70044ad8c1385e946a8 (md5)

برای شروع، بیایید اولین گزینه را Hash Identifier بزنیم. برای این کار کافیست hash-id را در ترمینال تایپ کرده و با یک فاصله، هش مورد نظر خود را وارد نمایید (مثال hash-id xxxxxx). همانطور که مشاهده می­کنید، سریعا یک ID با عنوان MySQL Hash ارائه می­دهد. این یکی از مواردی است که ما سعی خواهیم کرد آن را کرک کنیم، بنابراین بعدا به آن برمی­گردیم.

HASH: 7196759210defdc0

Possible Hashs:
[+] MySQL
[+] MD5(Middle)

Least Possible Hashs:
[+] MD5(Half)

Hash دوم ما که در زیر مشاهده می­شود، ممکن است SHA256 باشد و احتمال دیگر Haval256 است.

HASH: 1bbb234c81ef04a1c2f441253952a556276669d7fc9d1ee765bd4b18f796699d

Possible Hashs:
[+] SHA-256
[+] Haval-256

Least Possible Hashs:
[+] GOST R 34.11-94
[+] RipeMD-256
[+] SNEFRU-256
[+] SHA-256(HMAC)
[+] Haval-256(HMAC)
[+] RipeMD-256(HMAC)
[+] SNEFRU-256(HMAC)
[+] SHA-256(md5($pass))
[+] SHA-256(sha1($pass))

سومین هش، SHA1 است:

HASH: 32c0ced56f1fe08583bdb079d85a35a81995018c

Possible Hashs:
[+] SHA-1
[+] MySQL5 - SHA-1(SHA-1($pass))

Least Possible Hashs:
[+] Tiger-160
[+] Haval-160
[+] RipeMD-160
[+] SHA-1(HMAC)
[+] Tiger-160(HMAC)
[+] RipeMD-160(HMAC)
[+] Haval-160(HMAC)
[+] SHA-1(MaNGOS)
[+] SHA-1(MaNGOS2)
[+] sha1($pass.$salt)
[+] sha1($salt.$pass)
[+] sha1($salt.md5($pass))
[+] sha1($salt.md5($pass).$salt)
[+] sha1($salt.sha1($pass))
[+] sha1($salt.sha1($salt.sha1($pass)))
[+] sha1($username.$pass)
[+] sha1($username.$pass.$salt)
[+] sha1(md5($pass))
[+] sha1(md5($pass).$salt)
[+] sha1(md5(sha1($pass)))
[+] sha1(sha1($pass))
[+] sha1(sha1($pass).$salt)
[+] sha1(sha1($pass).substr($pass,0,3))
[+] sha1(sha1($salt.$pass))
[+] sha1(sha1(sha1($pass)))
[+] sha1(strtolower($username).$pass)

و چهارمین هش، SHA512 است:

HASH: 753b27807b690ef889a259f3b219e024bf5c6c33c8d56116943d9285a0b55b2050981f29e6fafa660428c48d7db3c4bd2e8dd48f87c8e90bde5e0c82ed23be10

Possible Hashs:
[+] SHA-512
[+] Whirlpool

Least Possible Hashs:
[+] SHA-512(HMAC)
[+] Whirlpool(HMAC)

در نهایت، آخرین هش، MD5 شناسایی شد:

HASH: 5f804b61f8dcf70044ad8c1385e946a8

Possible Hashs:
[+] MD5
[+] Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))

Least Possible Hashs:
[+] RAdmin v2.x
[+] NTLM
[+] MD4
[+] MD2
[+] MD5(HMAC)
[+] MD4(HMAC)
[+] MD2(HMAC)
[+] MD5(HMAC(WordPress))
[+] Haval-128
[+] Haval-128(HMAC)
[+] RipeMD-128
[+] RipeMD-128(HMAC)
[+] SNEFRU-128
[+] SNEFRU-128(HMAC)
[+] Tiger-128
[+] Tiger-128(HMAC)
[+] md5($pass.$salt)
[+] md5($salt.$pass)
[+] md5($salt.$pass.$salt)
[+] md5($salt.$pass.$username)
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($pass.$salt))
[+] md5($salt.md5($salt.$pass))
[+] md5($salt.md5(md5($pass).$salt))
[+] md5($username.0.$pass)
[+] md5($username.LF.$pass)
[+] md5($username.md5($pass).$salt)
[+] md5(md5($pass))
[+] md5(md5($pass).$salt)
[+] md5(md5($pass).md5($salt))
[+] md5(md5($salt).$pass)
[+] md5(md5($salt).md5($pass))
[+] md5(md5($username.$pass).$salt)
[+] md5(md5(md5($pass)))
[+] md5(md5(md5(md5($pass))))
[+] md5(md5(md5(md5(md5($pass)))))
[+] md5(sha1($pass))
[+] md5(sha1(md5($pass)))
[+] md5(sha1(md5(sha1($pass))))
[+] md5(strtoupper(md5($pass)))

این مرحله آسان بود، اما مرحله بعدی در واقع حمله به این Hash­ها با استفاده از تبدیل نوع Hash شناسایی شده به شمار مد (حالت) Hashcat است.

بررسی مدهای (حالت­های)هش Hashcat

برای جستجوی یک حالت Hash، می­توانیم به لیست جامعی از انواع Hash پشتیبانی­ شده Hashcat =در صفحه مثال ­های Hashcat نگاهی بیندازیم. لیست مختصری از رایج ­ترین Hash­ها در زیر آمده است:

Hash-Mode   Hash-Name                   Example
0           MD5                         8743b52063cd84097a65d1633f5c74f5
10          md5($pass.$salt)            01dfae6e5d4d90d9892622325959afbe:7050461
20          md5($salt.$pass)            f0fda58630310a6dd91a7d8f0a4ceda2:4225637426
30          md5(utf16le($pass).$salt)   b31d032cfdcf47a399990a71e43c5d2a:144816
40          md5($salt.utf16le($pass))   d63d0e21fdc05f618d55ef306c54af82:13288442151473
50          HMAC-MD5 (key = $pass)      fc741db0a2968c39d9c2a5cc75b05370:1234
60          HMAC-MD5 (key = $salt)      bfd280436f45fa38eaacac3b00518f29:1234
100         SHA1                        b89eaac7e61417341b710b727768294d0e6a277b
110         sha1($pass.$salt)           2fc5a684737ce1bf7b3b239df432416e0dd07357:2014
120         sha1($salt.$pass)           cac35ec206d868b7d7cb0b55f31d9425b075082b:5363620024
130         sha1(utf16le($pass).$salt)  c57f6ac1b71f45a07dbd91a59fa47c23abcd87c2:631225
140         sha1($salt.utf16le($pass))  5db61e4cd8776c7969cfd62456da639a4c87683a:8763434884872
150         HMAC-SHA1 (key = $pass)     c898896f3f70f61bc3fb19bef222aa860e5ea717:1234
160         HMAC-SHA1 (key = $salt)     d89c92b4400b15c39e462a8caa939ab40c3aeeea:1234
200         MySQL323                    1EAFFED54F552AA5
300         MySQL4.1/MySQL5             fcf7c1b8749cf99d88e5f34271d636178fb5d130

در بالا، می­توانیم دو نمونه را ببینیم که ممکن است یک نظیر (تطبیق) برای اولین Hash ما (7196759210defdc0) از مرحله قبلی باشد. در یک نگاه، حالت ٢۰۰ “MySQL323” بهترین تطبیق (match) به نظر می­رسد، اما می­توانیم با اجرای نمونه Hash از طریق Hash identifier، درستی آن را تایید کنیم.

HASH: 1EAFFED54F552AA5

Possible Hashs:
[+] MySQL
[+] MD5(Middle)

Least Possible Hashs:
[+] MD5(Half)

این دقیقا با نمونه Hash ما مطابقت دارد:

HASH: 7196759210defdc0

Possible Hashs:
[+] MySQL
[+] MD5(Middle)

Least Possible Hashs:
[+] MD5(Half)

اگر مورد دیگری که احتمالا مطابق با نوع MySQL Hash است را اجرا کنیم (حالت ٣۰۰)، می­بینیم که آن با نمونه ناشناخته ما مطابقت ندارد.

HASH: fcf7c1b8749cf99d88e5f34271d636178fb5d130

Possible Hashs:
[+] SHA-1
[+] MySQL5 - SHA-1(SHA-1($pass))

Least Possible Hashs:
[+] Tiger-160
[+] Haval-160
[+] RipeMD-160
[+] SHA-1(HMAC)
[+] Tiger-160(HMAC)
[+] RipeMD-160(HMAC)
[+] Haval-160(HMAC)
[+] SHA-1(MaNGOS)
[+] SHA-1(MaNGOS2)
[+] sha1($pass.$salt)
[+] sha1($salt.$pass)
[+] sha1($salt.md5($pass))
[+] sha1($salt.md5($pass).$salt)
[+] sha1($salt.sha1($pass))
[+] sha1($salt.sha1($salt.sha1($pass)))
[+] sha1($username.$pass)
[+] sha1($username.$pass.$salt)
[+] sha1(md5($pass))
[+] sha1(md5($pass).$salt)
[+] sha1(md5(sha1($pass)))
[+] sha1(sha1($pass))
[+] sha1(sha1($pass).$salt)
[+] sha1(sha1($pass).substr($pass,0,3))
[+] sha1(sha1($salt.$pass))
[+] sha1(sha1(sha1($pass)))
[+] sha1(strtolower($username).$pass)

این نشان می­دهد که ما شماره حالت 200 در Hashcat را برای استفاده برای حمله خود به درستی انتخاب کرده ایم.

حمله به Hash با Hashcat

پس از شناخت حالت استفاده از طریق شناسایی Hash، می­توانیم با استفاده از Hashcat به آن حمله کنیم. برای این کار، لازم است یک فایل دیکشنری با پسوردهای روی آن ایجاد کنیم که Hashcat از آن برای حمله به Hash استفاده خواهد کرد. لیست­ های دردسترس زیادی (مانند RockYou) به صورت آنلاین وجود دارند، اما در این مورد ما یکی از آن­ها را با نام example.dict ایجاد می­کنیم تا برخی از حدس­ ها درمورد پسورد را در آن قرار دهیم.

اگر هنوز در ابزار Hash identifier هستید، ابتدا بر روی صفحه­ کلید خود crtl+c را بزنید، سپس با استفاده از nano یا هر ابزار ویرایشی دیگر، یک فایل ایجاد کرده و باز کنید.

~/hash-identifier$ nano example.dict

پس از افزودن برخی از واژه هایی که حدس می زنیم ممکن است در مورد رمزعبور درست باشد که در این مثال شامل عبارت “Hashcat”  می­باشد، برای خروج کنترل x را بزنید، سپس Y را بزنید و نام فایل را تایید کنید. اکنون می­توانیم از این فایل به عنوان لیست حدس­ های ساده متنی به همراه حالتی که کشف کردیم، برای کرک Hash استفاده کنیم. فرمول اصلی که ما استفاده می کنیم به شرح زیر است:

hashcat -m عددحالت -a 0 هش example.dict

زمانی که ما آن را با Hash خودمان (“7196”759210defdc0) با مد ٢۰۰ (“MODE_NUMBER”) اجرا کردیم، نتایج باید صورت زیر باشد. اگر سیستم قدیمی­ تری دارید، ممکن است لازم باشد که ازدستور –force به همراه آن استفاده کنید.

~/hash-identifier$ sudo hashcat -m 200 -a 0 7196759210defdc0 example.dict --force

hashcat (v5.1.0) starting...

OpenCL Platform #1: The pocl project
====================================
* Device #1: pthread-Intel(R) Core(TM)2 Duo CPU     E7500  @ 2.93GHz, 1024/3639 MB allocatable, 2MCU

/usr/share/hashcat/OpenCL/m00200_a0-optimized.cl: Pure OpenCL kernel not found, falling back to optimized OpenCL kernel
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1

Applicable optimizers:
* Optimized-Kernel
* Zero-Byte
* Not-Iterated
* Single-Hash
* Single-Salt

Password length minimum: 0
Password length maximum: 31

Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.
Watchdog: Temperature retain trigger disabled.

* Device #1: build_opts '-I /usr/share/hashcat/OpenCL -D VENDOR_ID=64 -D CUDA_ARCH=0 -D AMD_ROCM=0 -D VECT_SIZE=4 -D DEVICE_TYPE=2 -D DGST_R0=0 -D DGST_R1=1 -D DGST_R2=2 -D DGST_R3=3 -D DGST_ELEM=4 -D KERN_TYPE=200 -D _unroll'
* Device #1: Kernel m00200_a0-optimized.44d10a8c.kernel not found in cache! Building may take a while...
Dictionary cache hit:
* Filename..: example.dict
* Passwords.: 17
* Bytes.....: 76
* Keyspace..: 17

- Device #1: autotuned kernel-accel to 1024
- Device #1: autotuned kernel-loops to 1
[s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => The wordlist or mask that you are using is too small.
This means that hashcat cannot use the full parallel power of your device(s).
Unless you supply more work, your cracking speed will drop.
For tips on supplying more work, see: https://hashcat.net/faq/morework

Approaching final keyspace - workload adjusted.

7196759210defdc0:hashcat

Session..........: hashcat
Status...........: Cracked
Hash.Type........: MySQL323
Hash.Target......: 7196759210defdc0
Time.Started.....: Sat May  9 17:00:25 2020 (0 secs)
Time.Estimated...: Sat May  9 17:00:25 2020 (0 secs)
Guess.Base.......: File (example.dict)
Guess.Queue......: 1/1 (100.00%)
Speed.Dev.#1.....:        0 H/s (0.03ms)
Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts
Progress.........: 17/17 (100.00%)
Rejected.........: 0/17 (0.00%)
Restore.Point....: 0/17 (0.00%)
Candidates.#1....: wow -> again
HWMon.Dev.#1.....: N/A

Started: Sat May  9 17:00:17 2020
Stopped: Sat May  9 17:00:27 2020

در نهایت ما خروجی 7196759210defdc0 را در Hashcat بدست خواهیم آورد. به این معنی که مقدار هش MySQL323 را با مقایسه آن با تمام کلمات موجود در فایل example.dict پیدا کردیم که کلمه Hashcat است.

نکته: علت ایجاد یک فایل دیکشنری به خاطر به سریع نتیجه رسیدن در این مثال بوده است.

به یاد داشته باشید، زمانی که با یک نوع ناشناخته Hash سروکار دارید، اولین قدم، شناسایی صحیح آن است. هرچند Hash identifier ابزار ایده ­آل و کاملی نیست اما روش آسانی برای ردیابی اکثر Hash­ها و تمایز بین چندین نوع Hash متداول و مشابه است که در Hashcat مد (حالت) متفاوتی دارند. حتی اگر Hash identifier مطمئن نباشد که شما با چه نوع Hash­ای سروکار دارید، با مقایسه پاسخ نمونه Hash­ها از وب­سایت Hashcat، می­تواند به شما در تایید صحت Hash مناسب کمک کند.

       
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x