Hash-Mode для SQL Server.

Тут общаясь с программистом, он оговорился, что у него есть пароль от учетной записи SQL Login: sa, на вопрос откуда, ой как он увиливал от ответа. Якобы всегда был, но это неправда, в последствии анализ показал, что наш исполняющий обязанности руководитель в дополнении программист 1С 7.7, прям явно в коде указала данные аутентификации. Ну тут, бессильны все. Ну пусть это будет на их совести, моего недочета тут нет. Это ладно, я решил, а можно ли узнать хеш SQL учетной записи Login: sa, плюс есть ли способ провести сопоставление хешу и составленной базе с используемые паролям. Так сказать, провести собственный анализ безопасности. К тому же не лишним будет оформить все это в виде заметки, как я на тот момент видел себе данную задачу.

В наличии есть

Шаг №1: Подключаюсь к серверу по RDP, открываю оснастку SQL Management Studio, подключаюсь через Windows Authentications и формирую запрос:

File - New - Query with Current Connection — ниже текст запроса:

SELECT

    name,

    password_hash

FROM sys.sql_logins

WHERE name = 'sa';

или такой запрос:

SELECT

   name, CAST(password AS varbinary(max)) AS PasswordHash

FROM sys.syslogins

WHERE name = 'sa'

Результат:

Name: sa

password_hash: 0x02008F845EFB7D3AE4B3D8C78B2CDCBAA55248C66D689C8D4380B8C0C44E57CB0AC87254173B322C382B272D303CA347575E801EC3B41CC0FE508C872C3A9E050897DD1F9764

изучение информации по полученному, вывело меня на информацию, что по выводу password_hash можно узнать какая версия SQL Server использовалась, т.е.

Hash-Mode для SQL Server.

На заметку: А если используется SQL Server 13.0.5850.14, то в моем случае извлеченный хеш:

password_hash: 0x020068144730389848F4D959806C28D6EBF0E1CD7713EE6ECB87019E59CF0FFF572805E9759264FD87B8673064FBF6356DB1CA09D404D9F4B667691DD300566ED741FDF3FBB3

как видно у него совпадает ябы сказал префикс что ли 0x0200, но это не точно.

Шаг №2: Моя задумка, а могу ли я путем подбора с использованием hashcat извлечь пароль зная его hash?

Нашел таблицу по поддерживаемым Hash-Mode: https://gist.github.com/CalfCrusher/6b87a738d0fe7b88e04f4a36eb6d722d

Шаг №3: Произвожу установку утилиты hashcat из дефолтных репозитариев на операционную систему Ubuntu 22.04 Server которая развернута у меня на тестовом полигоне под управлением связки Debian 11 + Proxmox 7.4-3

  • Sockets: 1
  • Type: Default (kvm64)
  • Cores: 2

Текущий характеристики VM по части CPU, т.к. на его основе идет вычисления подбора пароля.

apt-cache show hashcat | grep Version

Version: 6.2.5+ds1-2

sudo apt-get install -y hashcat

hashcat

Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...

Try --help for more help.

Шаг №4: Скачиваю словарь по которому будет производиться вычисление согласно используемому алгоритму для SQL Server зашифрованного пароля с последующим сравнением:

wget 'https://gitlab.com/kalilinux/packages/wordlists/-/raw/kali/master/rockyou.txt.gz'

file rockyou.txt.gz

rockyou.txt.gz: gzip compressed data, was "rockyou.txt", last modified: Sun Mar  3 13:09:37 2013, from Unix, original size modulo 2^32 139921507

gunzip rockyou.txt.gz

du -sh rockyou.txt

134M    rockyou.txt

cat rockyou.txt | wc -l

14344392

На заметку: Размер словаря 134 мегабайт и очень много строк с различными наиболее часто используемыми паролями.

Шаг №5: Нацеливаю хеш на словарь, я знаю, что моего пароля нет в словаре, от слова как совсем, но если я его внесу в словарь где-нить в конце, то строка сопоставления будет выглядеть так:

hashcat -m 1731 -a 0 mssql_hash_pass.txt rockyou.txt --force

hashcat (v6.2.5) starting

You have enabled --force to bypass dangerous warnings and errors!

This can hide serious problems and should only be done when debugging.

Do not report hashcat issues encountered when using --force.

OpenCL API (OpenCL 2.0 pocl 1.8  Linux, None+Asserts, RELOC, LLVM 11.1.0, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]

=====================================================================================================================================

* Device #1: pthread-Common KVM processor, 1434/2933 MB (512 MB allocatable), 2MCU

Minimum password length supported by kernel: 0

Maximum password length supported by kernel: 256

Minimim salt length supported by kernel: 0

Maximum salt length supported by kernel: 256

Hashes: 1 digests; 1 unique digests, 1 unique salts

Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates

Rules: 1

Optimizers applied:

* Zero-Byte

* Early-Skip

* Not-Iterated

* Single-Hash

* Single-Salt

* Raw-Hash

* Uses-64-Bit

ATTENTION! Pure (unoptimized) backend kernels selected.

Pure kernels can crack longer passwords, but drastically reduce performance.

If you want to switch to optimized kernels, append -O to your commandline.

See the above message to find out about the exact limits.

Watchdog: Hardware monitoring interface not found on your system.

Watchdog: Temperature abort trigger disabled.

Host memory required for this attack: 0 MB

Dictionary cache built:

* Filename..: rockyou.txt

* Passwords.: 14344393

* Bytes.....: 139921520

* Keyspace..: 14344386

* Runtime...: 1 sec

0x02008f845efb7d3ae4b3d8c78b2cdcbaa55248c66d689c8d4380b8c0c44e57cb0ac87254173b322c382b272d303ca347575e801ec3b41cc0fe508c872c3a9e050897dd1f9764:<password>

Session..........: hashcat

Status...........: Cracked

Hash.Mode........: 1731 (MSSQL (2012, 2014))

Hash.Target......: 0x02008f845efb7d3ae4b3d8c78b2cdcbaa55248c66d689c8d4...1f9764

Time.Started.....: Mon Feb  2 13:19:08 2026, (0 secs)

Time.Estimated...: Mon Feb  2 13:19:08 2026, (0 secs)

Kernel.Feature...: Pure Kernel

Guess.Base.......: File (rockyou.txt)

Guess.Queue......: 1/1 (100.00%)

Speed.#1.........:   116.3 kH/s (0.28ms) @ Accel:256 Loops:1 Thr:1 Vec:2

Recovered........: 1/1 (100.00%) Digests

Progress.........: 7680/14344386 (0.05%)

Rejected.........: 0/7680 (0.00%)

Restore.Point....: 7168/14344386 (0.05%)

Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1

Candidate.Engine.: Device Generator

Candidates.#1....: droopy -> tyler2

Started: Mon Feb  2 13:18:39 2026

Stopped: Mon Feb  2 13:19:10 2026

и пароль найден, вот он, если к примеру вывод без служебной информации:

hashcat -m 1731 -a 0 mssql_hash_pass.txt rockyou.txt --show

0x02008f845efb7d3ae4b3d8c78b2cdcbaa55248c66d689c8d4380b8c0c44e57cb0ac87254173b322c382b272d303ca347575e801ec3b41cc0fe508c872c3a9e050897dd1f9764:<password>

Шаг №6: А если не указывать пароль в словаре rockyou.txt, то:

sudo apt-get remove --purge hashcat

sudo rm -rf /home/ekzorchik/.local/share/hashcat/

sudo rm -Rf /usr/share/doc/hashcat

sudo rm -Rf /usr/share/hashcat

rm -rf ~/.cache/hashcat/

rm rockyou.txt

sudo apt-get reinstall -y hashcat

wget 'https://gitlab.com/kalilinux/packages/wordlists/-/raw/kali/master/rockyou.txt.gz'

gunzip rockyou.txt.gz

hashcat -m 1731 -a 0 mssql_hash_pass.txt rockyou.txt --show

/usr/share/hashcat/OpenCL/: No such file or directory

Так разбираюсь, что есть OpenCL и как его переустановить.

На заметку: OpenCL (see https://en.wikipedia.org/wiki/OpenCL) is a programming language and a framework. Most modern CPUs and GPUs support OpenCL and have compilers and runtimes for the OpenCL kernels.

sudo apt install -y intel-opencl-icd ocl-icd-libopencl1 ocl-icd-opencl-dev pocl-opencl-icd

sudo usermod -aG video ekzorchik

sudo usermod -aG render ekzorchik

apt-cache search clinfo

clinfo - Query OpenCL system information

sudo apt-get install -y clinfo

sudo reboot

clinfo | head

Number of platforms                               1

  Platform Name                                   Portable Computing Language

  Platform Vendor                                 The pocl project

  Platform Version                                OpenCL 2.0 pocl 1.8  Linux, None+Asserts, RELOC, LLVM 11.1.0, SLEEF, DISTRO, POCL_DEBUG

  Platform Profile                                FULL_PROFILE

  Platform Extensions                             cl_khr_icd cl_pocl_content_size

  Platform Extensions function suffix             POCL

  Platform Name                                   Portable Computing Language

Number of devices                                 1

clinfo -l

Platform #0: Portable Computing Language

 `-- Device #0: pthread-Common KVM processor

hashcat

Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...

Try --help for more help.

Создаю файл с хешем:

nano mssql_hash_pass.txt

0x02008F845EFB7D3AE4B3D8C78B2CDCBAA55248C66D689C8D4380B8C0C44E57CB0AC87254173B322C382B272D303CA347575E801EC3B41CC0FE508C872C3A9E050897DD1F9764

после на забываем сохранить внесенные изменения.

hashcat -m 1731 -a 0 mssql_hash_pass.txt rockyou.txt --show

/usr/share/hashcat/OpenCL/: No such file or directory

ls /usr/share/hashcat/

modules

sudo apt-get reinstall -y hashcat-data

На заметку: кстати так сперва и происходит, зацепился взглядом что нет OpenCL и был невнимателен, уже полез в какие-то дебри что в системе этого нет, а оказалось, что нужно просто файлы данных hashcat переустановить. Делов то.

hashcat -m 1731 -a 0 mssql_hash_pass.txt rockyou.txt --force

hashcat (v6.2.5) starting

You have enabled --force to bypass dangerous warnings and errors!

This can hide serious problems and should only be done when debugging.

Do not report hashcat issues encountered when using --force.

OpenCL API (OpenCL 2.0 pocl 1.8  Linux, None+Asserts, RELOC, LLVM 11.1.0, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]

=====================================================================================================================================

* Device #1: pthread-Common KVM processor, 1434/2933 MB (512 MB allocatable), 2MCU

Minimum password length supported by kernel: 0

Maximum password length supported by kernel: 256

Minimim salt length supported by kernel: 0

Maximum salt length supported by kernel: 256

Hashes: 1 digests; 1 unique digests, 1 unique salts

Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates

Rules: 1

Optimizers applied:

* Zero-Byte

* Early-Skip

* Not-Iterated

* Single-Hash

* Single-Salt

* Raw-Hash

* Uses-64-Bit

ATTENTION! Pure (unoptimized) backend kernels selected.

Pure kernels can crack longer passwords, but drastically reduce performance.

If you want to switch to optimized kernels, append -O to your commandline.

See the above message to find out about the exact limits.

Watchdog: Hardware monitoring interface not found on your system.

Watchdog: Temperature abort trigger disabled.

Host memory required for this attack: 0 MB

Dictionary cache built:

* Filename..: rockyou.txt

* Passwords.: 14344392

* Bytes.....: 139921507

* Keyspace..: 14344385

* Runtime...: 1 sec

[s]tatus [p]ause [b]ypass [c]heckpoint [f]inish [q]uit => s

Session..........: hashcat

Status...........: Running

Hash.Mode........: 1731 (MSSQL (2012, 2014))

Hash.Target......: 0x02008f845efb7d3ae4b3d8c78b2cdcbaa55248c66d689c8d4...1f9764

Time.Started.....: Mon Feb  2 13:58:59 2026, (12 secs)

Time.Estimated...: Mon Feb  2 13:59:11 2026, (0 secs)

Kernel.Feature...: Pure Kernel

Guess.Base.......: File (rockyou.txt)

Guess.Queue......: 1/1 (100.00%)

Speed.#1.........:  1161.9 kH/s (0.27ms) @ Accel:256 Loops:1 Thr:1 Vec:2

Recovered........: 0/1 (0.00%) Digests

Progress.........: 13830656/14344385 (96.42%)

Rejected.........: 0/13830656 (0.00%)

Restore.Point....: 13830656/14344385 (96.42%)

Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1

Candidate.Engine.: Device Generator

Candidates.#1....: 081952576670 -> 0819331452

Approaching final keyspace - workload adjusted.

Session..........: hashcat

Status...........: Exhausted

Hash.Mode........: 1731 (MSSQL (2012, 2014))

Hash.Target......: 0x02008f845efb7d3ae4b3d8c78b2cdcbaa55248c66d689c8d4...1f9764

Time.Started.....: Mon Feb  2 13:58:59 2026, (13 secs)

Time.Estimated...: Mon Feb  2 13:59:12 2026, (0 secs)

Kernel.Feature...: Pure Kernel

Guess.Base.......: File (rockyou.txt)

Guess.Queue......: 1/1 (100.00%)

Speed.#1.........:  1149.9 kH/s (0.27ms) @ Accel:256 Loops:1 Thr:1 Vec:2

Recovered........: 0/1 (0.00%) Digests

Progress.........: 14344385/14344385 (100.00%)

Rejected.........: 0/14344385 (0.00%)

Restore.Point....: 14344385/14344385 (100.00%)

Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1

Candidate.Engine.: Device Generator

Candidates.#1....: $HEX[206b72697374656e616e6e65] -> $HEX[042a0337c2a156616d6f732103]

Started: Mon Feb  2 13:58:57 2026

Stopped: Mon Feb  2 13:59:13 2026

Не находит сопоставление пароля с файлом паролей в словаре.

Шаг №7: Раз так, что мой используемый пароль устойчив к подбору, ну как устойчив, просто не содержится в файле с наиболее используемыми паролями я взял себе правило, прошерстить все свои отчеты, обращения ко мне на предмет ведения своего файла с паролями и на его основе делать прогон на подбор.

Шаг №8: Откроем самую последнюю строку файла с паролями и внесу свой пароль от учетной записи Login sa:

nano +$(wc -l < rockyou.txt) rockyou.txt

hashcat -m 1731 -a 0 mssql_hash_pass.txt rockyou.txt --force --show

0x020068144730389848f4d959806c28d6ebf0e1cd7713ee6ecb87019e59cf0fff572805e9759264fd87b8673064fbf6356db1ca09d404d9f4b667691dd300566ed741fdf3fbb3:<password>

и о чуда сопоставление хешу найдено.

На заметку: В справке по ключам натыкался что можно задействовать GPU (вычислительные мощности видеокарты), а сейчас я через CPU (вычислительные мощности процессора) взаимодействовал.

Ладно, короче, что хотел добиться заметкой того добился, вывод мой задействованный пароль не подбирается и теперь собираю свой собственный словарь.

На этом заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.

От ekzorchik