SQL Server 2005 — взлом зашифрованных данных с помощью пароля

В части 1 этой серии мы представили метод шифрования и декодирования паролей. В этой части 2 мы расскажем, как восстановить эти данные.

Как вы знаете, шифрование паролей — это основной метод шифрования данных, который использует только пароли и может расшифровать с помощью того же пароля. Теперь предположим, что мы забыли пароль, который мы установили, и нам нужно восстановить данные в прежнем виде.

Шаг 1

Зашифровать данные методом шифрования пароля

выберите EncryptedData = EncryptByPassPhrase (‘MAK’, ‘123456789’)

Результат

EncryptedData
————————————————— ————————
0x01000000F75D553409C74570F6DDBCADA53FD489DDD52D9277010050565ADF30F244F8CC

Шаг 2

Создайте пользовательские процедуры для восстановления связанных данных. Эта процедура будет использовать функцию DecryptByPassPhrase для расшифровки данных и отображения их на пароле.
ИСПОЛЬЗОВАТЬ [Master]
GO / ****** Объект: StoredProcedure [dbo]. [Hack_encryption] Дата сценария: 18.12.2007 18:18:36 ****** /
ЕСЛИ СУЩЕСТВУЕТ (ВЫБРАТЬ * ИЗ sys.objects ГДЕ object_id = OBJECT_ID (N ‘[dbo]. [Hack_encryption]’)
И введите (N’P ‘, N’PC’))
ПРОЦЕДУРА УДАЛЕНИЯ [dbo]. [Hack_encryption]
ИДТИ
не ставить счет на
ВЫКЛЮЧИТЬ CONCAT_NULL_YIELDS_NULL
идти
ИСПОЛЬЗОВАТЬ [Master]
GO / ****** Объект: StoredProcedure [dbo]. [Hack_encryption] Дата сценария: 18.12.2007 18:18:55 ****** /
УСТАНОВИТЬ ANSI_NULLS ON
ПЕРЕЙТИ УСТАНОВИТЬ QUOTED_IDENTIFIER ВКЛ.
GO CREATE процедура [dbo]. [Hack_encryption] @encryptedtext varbinary (макс.)
в виде
объявить @password varchar (6)
объявить @i int
объявить @j int
объявить @k int
объявить @l int
объявить @m int
объявить @n int set @ i = -1
установить @ j = -1
установить @ k = -1
установить @ l = -1
установить @ m = -1
установить @ n = -1
установите @password = », а @i
начинать
а @j
начинать
а @k
начинать
а @l
начинать
а @m
начинать
а @n
начинать
установить @ password = isnull (char (@i), »)
+ isnull (char (@j), »)
+ isnull (char (@k), ») + isnull (char (@l), »)
+ isnull (char (@m), ») + isnull (char (@n), »)
если convert (varchar (100), DecryptByPassPhrase (ltrim (rtrim (@password)),
@encryptedtext)) не равно нулю
начинать
print ‘Это зашифрованный текст:’ + @ пароль
установить @ i = 256; установить @ j = 256; установить @ k = 256; установить @ l = 256; установить @ m = 256; установить @ n = 256;
print ‘Фактические данные:’ + convert (varchar (100),
DecryptByPassPhrase (ltrim (rtrim (@password)), @encryptedtext))
конец
—print ‘A’ + ltrim (rtrim (@password)) + ‘B’
—print convert (varchar (100), DecryptByPassPhrase (ltrim (rtrim (@password)), @ encryptedtext))
установить @ n = @ n + 1
конец
установить @ n = 0
установить @ m = @ m + 1
конец
установить @ m = 0
установить @ l = @ l + 1
конец
установить @ l = 0
установить @ k = @ k + 1
конец
установить @ k = 0
установить @ j = @ j + 1
конец
установить @ j = 0
установить @ i = @ i + 1
конец GO

Шаг 3

Предположим, вы забыли пароль, который использовался для шифрования данных в 0x01000000F75D553409C74570F6DDBCADA53FD489DDD52D9277010050565ADF30F244F8CC ‘. Мы можем получить пароль и зашифрованные данные, используя следующую процедуру.

использовать мастер
идти
выберите getdate () как StartingTime
идти
объявить @myencryptedtext varbinary (max)
установить @ myencryptedtext = 0x01000000F75D553409C74570F6DDBCADA53FD489DDD52D9277010050565ADF30F244F8CC
печать @myencryptedtext
exec hack_encryption @ encryptedtext = @ myencryptedtext
идти
выберите getdate () как EndingTime
идти

Результат

Время начала
————————
2007-12-18 18:24: 10.843

0x01000000F75D553409C74570F6DDBCADA53FD489DDD52D9277010050565ADF30F244F8CC
Это зашифрованный текст: MAK
Файл данных: 123456789

EndingTime
————————
2007-12-18 18:26: 36.080

Изображение 1 SQL Server 2005 - Взлом зашифрованных данных с помощью пароля

фигура 1

Как вы можете видеть в результате (рисунок 1), получение данных и пароля занимает всего 2 минуты. По сути, эта процедура повторяет все возможные вероятности символов ASCII длиной более 6 символов, чтобы найти пароль и использовать его для расшифровки данных.

Создание процедуры не очень поможет, когда зашифрованные данные находятся в таблице. Таким образом, мы должны изменить эту процедуру на скалярную функцию, как показано ниже.

Шаг 1

Создайте процедуру следующим образом

ИСПОЛЬЗОВАТЬ [master]
ИДТИ

/ ****** Объект: UserDefinedFunction [dbo]. [Hack_encryption_password] Дата сценария: 18.12.2007 18:36:29 ****** /
ЕСЛИ СУЩЕСТВУЕТ (ВЫБРАТЬ * ИЗ sys.objects ГДЕ object_id = OBJECT_ID (N ‘[dbo]. [Hack_encryption_password]’)
И введите (N’FN ‘, N’IF’, N’TF ‘, N’FS’, N’FT ‘))
ФУНКЦИЯ ПЕРЕПАДА [dbo]. [Hack_encryption_password]
ИДТИ
использовать [Master]
идти

СОЗДАТЬ функцию [dbo]. [Hack_encryption_password] (@encryptedtext varbinary (макс.))
возвращает varchar (6)
с реализацией как вызывающий
в виде
начинать
объявить @password varchar (6)
объявить @i int
объявить @j int
объявить @k int
объявить @l int
объявить @m int
объявить @n int

установить @ i = -1
установить @ j = -1
установить @ k = -1
установить @ l = -1
установить @ m = -1
установить @ n = -1
установить @password = »

в то время как я
начинать
а @j
начинать
а @k
начинать
а @l
начинать
а @m
начинать
а @n
начинать
установить @ password = isnull (char (@i), ») + isnull (char (@j), »)
+ isnull (char (@k), ») + isnull (char (@l), »)
+ isnull (char (@m), ») + isnull (char (@n), »)
если convert (varchar (100), DecryptByPassPhrase (ltrim (rtrim (@password)),
@encryptedtext)) не равно нулю
начинать
—print ‘Это зашифрованный текст:’ + @ пароль
установить @ i = 256; установить @ j = 256; установить @ k = 256; установить @ l = 256; установить @ m = 256; установить @ n = 256;
—print ‘Фактические данные:’ + convert (varchar (100),
DecryptByPassPhrase (ltrim (rtrim (@password)), @ encryptedtext))
конец
—print ‘A’ + ltrim (rtrim (@password)) + ‘B’
—print convert (varchar (100), DecryptByPassPhrase (ltrim (rtrim (@password)), @ encryptedtext))
установить @ n = @ n + 1
конец
установить @ n = 0
установить @ m = @ m + 1
конец
установить @ m = 0
установить @ l = @ l + 1
конец
установить @ l = 0
установить @ k = @ k + 1
конец
установить @ k = 0
установить @ j = @ j + 1
конец
установить @ j = 0
установить @ i = @ i + 1
конец

вернуть @password
КОНЕЦ

Шаг 2

Создать таблицу с зашифрованными данными

ИСПОЛЬЗОВАТЬ [tempdb]
ИДТИ
/ ****** Объект: Таблица [dbo]. [MyTable] Дата сценария: 18.12.2007 18:44:40 ****** /
ЕСЛИ СУЩЕСТВУЕТ (ВЫБРАТЬ * ИЗ sys.objects ГДЕ object_id = OBJECT_ID (N ‘[dbo]. [MyTable]’) И введите (N’U’))
ТАБЛИЦА ПАДЕНИЯ [dbo]. [MyTable]
ИДТИ
создать таблицу MyTable (int, encrypteddata varbinary (max))
идти
вставить в MyTable выберите 1, EncryptByPassPhrase (‘Do’, ‘1112228333’)
вставить в MyTable выберите 2, EncryptByPassPhrase (‘Re’, ‘1212223833’)
вставить в MyTable выберите 3, EncryptByPassPhrase (‘Me’, ‘1132223393’)
вставить в MyTable выберите 4, EncryptByPassPhrase (‘Fa’, ‘1114223383’)
вставить в MyTable выберите 5, EncryptByPassPhrase (‘So’, ‘1112523333’)
вставить в MyTable выберите 6, EncryptByPassPhrase (‘La’, ‘1112263373’)
вставить в MyTable выберите 7, EncryptByPassPhrase (‘Si’, ‘1112227338’)
идти

Шаг 3

Запросить данные с помощью следующего оператора SQL

Выберите * из MyTable

Вы увидите данные, отображаемые следующим образом (Рисунок 2).

1 0x01000000D8ED1498BEA4023D541C6EA9766A6B7B0585FAE91B942C88C23677550C6FD7FA
2 0x01000000F0725A52501A41D125F049011BE87C5C4A42263E7538B837B8278ADEE5FC2678
3 0x01000000C8804D8516B944B0AE35C71F79130DA415CED5CCF58E522692AC749115EEF0D9
4 0x010000007A91A24638C0E0354336AE5682805312CCB0B1E6BBACB6D9E65DC5D9DA73906E
5 0x010000008FB6BDD91C3D1A8C94FAF647DE1F931CEE5104045BD03DE4E809565E74604DF3
6 0x01000000C3A41428A21EDE8D8579AF9C42132678448A9113A31A869276A7631A58A32BE3
7 0x01000000BD829E12D3EAAF96BB66930301BA1D9CD3748946F354301922A03AE49047FE00

Изображение 2 SQL Server 2005 - Взлом зашифрованных данных с помощью пароля

фигура 2

Шаг 4

Использовать hack_encryption_password функция для восстановления всех паролей из зашифрованных данных в таблице MyTable. Выполните следующий оператор SQL

выберите ID, мастер. [dbo]. [hack_encryption_password] (encrypteddata) как пароль от MyTable

Вы увидите следующий результат (Рисунок 3)

1 Do
2 Re
3 меня
4 Fa
5 Итак
6
7 Да

Изображение 3 SQL Server 2005 - Взлом зашифрованных данных с помощью пароля

Рисунок 3

Вышеупомянутую функцию можно отредактировать для возврата зашифрованных данных следующим образом

Шаг 1

Создайте следующую функцию

ИСПОЛЬЗОВАТЬ [master]
ИДТИ

/ ****** Объект: UserDefinedFunction [dbo]. [Hack_encryption_password] Дата сценария: 18.12.2007 18:36:29 ****** /
ЕСЛИ СУЩЕСТВУЕТ (ВЫБРАТЬ * ИЗ sys.objects ГДЕ object_id = OBJECT_ID (N ‘[dbo]. [Hack_encryption_data]’)
И введите (N’FN ‘, N’IF’, N’TF ‘, N’FS’, N’FT ‘))
ФУНКЦИЯ ПЕРЕПАДА [dbo]. [Hack_encryption_data]
ИДТИ
использовать [Master]
идти

СОЗДАТЬ функцию [dbo]. [Hack_encryption_data] (@encryptedtext varbinary (макс.))
возвращает varchar (8000)
с реализацией как вызывающий
в виде
начинать
объявить @data varchar (8000)
объявить @password varchar (6)
объявить @i int
объявить @j int
объявить @k int
объявить @l int
объявить @m int
объявить @n int

установить @ i = -1
установить @ j = -1
установить @ k = -1
установить @ l = -1
установить @ m = -1
установить @ n = -1
установить @password = »

в то время как я
начинать
а @j
начинать
а @k
начинать
а @l
начинать
а @m
начинать
а @n
начинать
установить @ пароль = isnull (char (@i), ») + isnull (char (@j), ») + isnull (char (@k), »)
+ isnull (char (@l), ») + isnull (char (@m), ») + isnull (char (@n), »)
если convert (varchar (100), DecryptByPassPhrase (ltrim (rtrim (@password)),
@encryptedtext)) не равно нулю
начинать
—print ‘Это зашифрованный текст:’ + @ пароль
установить @ i = 256; установить @ j = 256; установить @ k = 256; установить @ l = 256; установить @ m = 256; установить @ n = 256;
установить @data = convert (varchar (100), DecryptByPassPhrase (ltrim (rtrim (@password)), @ encryptedtext))
конец
—print ‘A’ + ltrim (rtrim (@password)) + ‘B’
—print convert (varchar (100), DecryptByPassPhrase (ltrim (rtrim (@password)), @ encryptedtext))
установить @ n = @ n + 1
конец
установить @ n = 0
установить @ m = @ m + 1
конец
установить @ m = 0
установить @ l = @ l + 1
конец
установить @ l = 0
установить @ k = @ k + 1
конец
установить @ k = 0
установить @ j = @ j + 1
конец
установить @ j = 0
установить @ i = @ i + 1
конец

вернуть @data
КОНЕЦ

<

p style=»text-align: justify;»>Шаг 2

Расшифровать данные с помощью созданной функции

выберите ID, мастер. [dbo]. [hack_encryption_data] (encrypteddata) как пароль от MyTable

Результат показан на рисунке 4.

Изображение 4 SQL Server 2005 - Взлом зашифрованных данных с помощью пароля

Рисунок 4

Примечание :

  1. Процедуры и функции можно взломать только на пароли из 6 символов.
  2. Эта процедура и функция могут потребовать много ресурсов ЦП для получения данных и получения пароля.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован.