Очередной заказчик попросил проверить безопасность «ихнего» SQL Server.

На работе накатал скрипт, проверил не у заказчика, а на работе в банке (не буду уточнять название) правда на DEV сервере, и вуаля! — 522 SQL Login с простыми паролями. А это уже дыра в безопасности.

В общем, предлагаю проверить у себя на SQL Server-ах подобные уязвимости. Список паролей простых дополняйте по мере вспоминания, каких то паролей простых, я его взял с первых 2-3х страниц после гугления.

Сам скрипт:

declare @popular_passwords table
(
    pwd varchar(4000) not null
)
insert @popular_passwords
VALUES
 ('!@#$%^&*')
,('000000')
,('1')
,('11')
,('111')
,('1111')
,('11111')
,('111111')
,('121212')
,('123123')
,('12')
,('123')
,('1234')
,('12345')
,('123456')
,('1234567')
,('12345678')
,('123456789')
,('1234567890')
,('131313')
,('1qaz2wsx')
,('55555')
,('654321')
,('666666')
,('696969')
,('7777777')
,('987654')
,('987654321')
,('aa123456')
,('abc123')
,('abcd1234')
,('admin')
,('affair')
,('amanda')
,('andrew')
,('anthony')
,('asdfasdf')
,('asdfg')
,('asdfgh')
,('asdfghjkl')
,('ashley')
,('ashleymadison')
,('asshole')
,('baseball')
,('batman')
,('bigdick')
,('buster')
,('charlie')
,('cheater')
,('computer')
,('corvette')
,('cowboys')
,('dallas')
,('DEFAULT')
,('donald')
,('dragon')
,('football')
,('freedom')
,('fuckme')
,('fuckoff')
,('fuckyou')
,('george')
,('harley')
,('hello')
,('hockey')
,('horny')
,('hosts')
,('hunter')
,('iloveyou')
,('jackson')
,('jennifer')
,('jessica')
,('jordan')
,('jordan23')
,('kazuga')
,('killer')
,('letmein')
,('liverpool')
,('looking')
,('madison')
,('maggie')
,('master')
,('matthew')
,('michael')
,('money')
,('monkey')
,('mustang')
,('P@ssw0rd')
,('P@ssword')
,('Pa$$w0rd')
,('Pa$$word')
,('password')
,('password1')
,('pepper')
,('princess')
,('pussy')
,('qazwsx')
,('qwert')
,('qwerty')
,('qwerty123')
,('qwertyuiop')
,('ranger')
,('robert')
,('secret')
,('shadow')
,('soccer')
,('steelers')
,('summer')
,('sunshine')
,('superman')
,('thomas')
,('tigger')
,('welcome')
,('whatever')
,('william')
,('yankees')
,('zxcvbnm')

select
    l.name,
    p.pwd,
    l.type_desc,
    l.is_disabled,
    sl.sysadmin,
    sl.dbcreator,
    sl.serveradmin
from @popular_passwords p
join sys.sql_logins l
    on pwdcompare(p.pwd,l.password_hash)=1
join sys.syslogins sl
    on sl.name = l.name
union all
select -- здесь ситуация когда логин и пароль совпадают
    l.name,
    l.name,
    l.type_desc,
    l.is_disabled,
    sl.sysadmin,
    sl.dbcreator,
    sl.serveradmin
from sys.sql_logins l
join sys.syslogins sl
    on sl.name = l.name
    and pwdcompare(l.name,l.password_hash)=1
order by 4, 5 desc, 1
option(recompile)

Комментарии (11)


  1. sinneren
    18.06.2019 13:42
    +1

    «ихнего», запятые перед «а», код не под катом, и хранение паролей в открытом виде — тут прекрасно всё.


    1. Koneru
      18.06.2019 14:16

      Ещё и в банке.


    1. oxidmod
      18.06.2019 14:22

      хранение паролей в открытом виде


      Я не шарю в MS SQL Server, но вроде как pwdcompare намекает на то, что пароли захешированы


    1. abkurenkov Автор
      18.06.2019 14:34

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


  1. helg1978
    18.06.2019 13:47
    +4

    если пароли нешифрованные и несоленые, то скрипт для подсчета количества ненадежных паролей короче:
    SELECT COUNT(*) from users


  1. HansHelmut
    18.06.2019 13:48

    Это перевод? Словарик явно не под наш регион. Ожидал увидеть русские слова написанные латинскими буквами и всякого рода транслит. Как заметили выше, хранить пароли в не загифрованом виде это беда.


    1. abkurenkov Автор
      18.06.2019 14:33

      Это не перевод. Как я уже писал выше, пароли скопипастены через гугление, да пароли в основном англоязычные без русских слов в английской раскладке. По сути можно погуглить и найти БД простых паролей для России, наверняка это есть.
      Но тем не менее пароли типа «password», «123456» встречаются очень часто )))).


  1. tempick
    18.06.2019 14:46

    Если честно, давно не видел сайтов/приложений, где разрешают делать пароль только из цифр. Я думаю, в последнее время пароль, состоящий как минимум из одной маленькой буквы, одной большой буквы и одной цифры — это стандартное условие при регистрации. В «серьёзных» приложениях ещё обязателен и символ, который не относится ни к буквам, ни к цифрам. Да и большую роль играет подтверждение входа по смс. У меня от лк банка тоже пароль простой. Но там двухфакторная авторизация, и если у злоумышленника есть доступ к просмотру моих смс — то уже не имеет значения, какой сложности пароль у меня стоит.
    А вообще, если у ребят пароли в базе хранятся не в виде хэша (или просто хэш вроде md5), то все аккаунты всех пользователей уязвимы изначально


    1. Graf54r
      18.06.2019 14:56

      как раз доступ к смс сейчас уже не новость. и считать что раз смс у них есть, то спасения нет — как минимум не безопасно.


      1. tempick
        18.06.2019 15:43

        ну это-то понятно) Я имею в виду, что если доступ к смс есть — то никакой пароль уже, как правило, не спасёт, каким бы сложным он не был. Второе ваше предложение не понял, сори


  1. dss_kalika
    18.06.2019 14:59

    На Dev-среде, частенько, пароли одинаковые у всех пользователей/клиентов, что бы можно было легко зайти под ними и посмотреть что как выглядит с их стороны.