Login
да возрадуются SQL-программисты...
244
NEW 30.03.04 11:10
седня столкнулся с веселой попыткой взлома веб-приложения, работающего под SQL Server'ом и использующего собственный (оч-оч простой) механизм авторизации.
А именно, логин и пароль пользователя хранятся открытым текстом в таблице.
На логин подается след. строка:
' or 1=1 --
und scho sind ma drin
Не повторяйте эту ошибку 
--------------
Авиатор х#ев
А именно, логин и пароль пользователя хранятся открытым текстом в таблице.
На логин подается след. строка:
' or 1=1 --
und scho sind ma drin


--------------
Авиатор х#ев
NEW 30.03.04 11:44
in Antwort digital_pilot 30.03.04 11:10
шо-то я не поэл прикола. Давай в деталях :)
F*ck it, Dude. Let's go bowling (c)
F*ck it, Dude. Let's go bowling (c)
NEW 30.03.04 11:53
in Antwort Simple 30.03.04 11:44
вкратце выглядит так:
при авторизации серверу посылается стейтмент с логином и паролем для проверки существования такой строки в таблице логинов:
statement = "SELECT ... FROM [my_logins] WHERE [login] = '" & varLogin "' AND [password] = '" & varPwd & "'"
(внимательно следим за апострофами, их тут плохо видно)
На логин подается
' or 1=1 --
В итоге чистый стейтмент приобретает вид
SELECT ... FROM [my_logins] WHERE [login] = '' or 1=1 --' AND [password] = 'MyPwd'
т.е. запрашивается пустой логин, но это неважно, т.к. из-за or 1=1 это всегда будет true, а часть с паролем получается закомментированной :)
--------------
Авиатор х#ев
при авторизации серверу посылается стейтмент с логином и паролем для проверки существования такой строки в таблице логинов:
statement = "SELECT ... FROM [my_logins] WHERE [login] = '" & varLogin "' AND [password] = '" & varPwd & "'"
(внимательно следим за апострофами, их тут плохо видно)
На логин подается
' or 1=1 --
В итоге чистый стейтмент приобретает вид
SELECT ... FROM [my_logins] WHERE [login] = '' or 1=1 --' AND [password] = 'MyPwd'
т.е. запрашивается пустой логин, но это неважно, т.к. из-за or 1=1 это всегда будет true, а часть с паролем получается закомментированной :)
--------------
Авиатор х#ев
NEW 30.03.04 11:58
in Antwort digital_pilot 30.03.04 11:53
Первую часть мог бы и опустить :)
И что, это фурычит?.. Что-то мне не верится.
F*ck it, Dude. Let's go bowling (c)
И что, это фурычит?.. Что-то мне не верится.
F*ck it, Dude. Let's go bowling (c)
NEW 30.03.04 11:59
in Antwort digital_pilot 30.03.04 11:53
упс 
Повезло, что у меня защита двухуровневая - скрипт пропустил, но фильтр блокировал
Но простит ли тебя Кирдык-Mирдык из Монголии, чей дух ворвался в мои кисти? (с)

Повезло, что у меня защита двухуровневая - скрипт пропустил, но фильтр блокировал

Но простит ли тебя Кирдык-Mирдык из Монголии, чей дух ворвался в мои кисти? (с)
NEW 30.03.04 12:12
in Antwort digital_pilot 30.03.04 11:53
Мля, пардон. Конечно, работает.
F*ck it, Dude. Let's go bowling (c)
F*ck it, Dude. Let's go bowling (c)
NEW 30.03.04 12:13
in Antwort Findеr 30.03.04 11:59
В смысле, проверка на левые символы?
F*ck it, Dude. Let's go bowling (c)
F*ck it, Dude. Let's go bowling (c)
NEW 30.03.04 12:36
in Antwort Findеr 30.03.04 11:59
в моем случае тоже дальше не прошел, но это потому, что вся доступная информация строго привязана к каждому конкретному логину.
--------------
Авиатор х#ев
--------------
Авиатор х#ев
NEW 30.03.04 16:03
in Antwort digital_pilot 30.03.04 11:10, Zuletzt geändert 30.03.04 16:09 (scorpi_)
Вообще никогда не следует хранить пароль. Для чего в конце концов существуют MD5, SHA и прочие hash-функции?
NEW 30.03.04 16:26
in Antwort digital_pilot 30.03.04 11:53
Вообще придумано интересно 
Я сейчас у себя сделал для проверки подобное и получилось, что если поставить вот так:
SELECT ... FROM [my_logins] WHERE [login] = '" & varLogin "' AND [password] = '" & varPwd & "'"
AND table1 = table2
AND table2 = table3
То все после ' обрезается вылетает ошибка компайлера SQL
Если поставить в конец
SELECT ... FROM [my_logins]
WHERE
table1 = table2
AND table2 = table3
AND [login] = '" & varLogin "'
AND [password] = '" & varPwd & "'"
То запрос ничего не возвращает, парольто пустой
А если доработать немного, что б пароль был не пустой
То уже интересней
...гребанный экибастус, блин...

Я сейчас у себя сделал для проверки подобное и получилось, что если поставить вот так:
SELECT ... FROM [my_logins] WHERE [login] = '" & varLogin "' AND [password] = '" & varPwd & "'"
AND table1 = table2
AND table2 = table3
То все после ' обрезается вылетает ошибка компайлера SQL
Если поставить в конец
SELECT ... FROM [my_logins]
WHERE
table1 = table2
AND table2 = table3
AND [login] = '" & varLogin "'
AND [password] = '" & varPwd & "'"
То запрос ничего не возвращает, парольто пустой

А если доработать немного, что б пароль был не пустой

То уже интересней

...гребанный экибастус, блин...
NEW 30.03.04 22:36
in Antwort scorpi_ 30.03.04 16:03
ну хорошо, будем все дружно не пароль, а хеш хранить... речь все рно не о том. В описанной схеме неважно, хеш там или хрен с маслом :)
--------------
Авиатор х#ев
--------------
Авиатор х#ев
30.03.04 22:49
in Antwort digital_pilot 30.03.04 22:36
NEW 30.03.04 22:52
in Antwort scorpi_ 30.03.04 22:49
мне помогать не нужно, я вообще под родную сиквельную авторизацию пишу :)
--------------
Авиатор х#ев
--------------
Авиатор х#ев
NEW 31.03.04 01:07
in Antwort Simple 30.03.04 12:13
Да не, банальный http-фильтр, который нужные странички прикрывает - делает маппинг всех юзеров сайта на двух-трех зарегистрированных в системе.
Но простит ли тебя Кирдык-Mирдык из Монголии, чей дух ворвался в мои кисти? (с)
Но простит ли тебя Кирдык-Mирдык из Монголии, чей дух ворвался в мои кисти? (с)
NEW 31.03.04 13:06
in Antwort digital_pilot 30.03.04 11:53
Так у тебя ж тогда больше 1 записи получается. Да и пароль у тебя похоже на регистр не чувствительный? Хоть большие/хоть маленькие.
NEW 31.03.04 13:21
in Antwort toptop 31.03.04 13:06
1. это не у меня. Я с этим приложением работаю исключительно в качестве техсуппортера :)
2. Да, получается полная выборка. Тут все зависит, что с ней дальше делать. Я намеренно поставил многоточия. А вдруг там SELECT TOP 1 [login] ;)
3. Чувствительность к регистру зависит от коллэйшена. В данном случае это Latin1_General_CI_AS, он case insensitive.
--------------
Авиатор х#ев
2. Да, получается полная выборка. Тут все зависит, что с ней дальше делать. Я намеренно поставил многоточия. А вдруг там SELECT TOP 1 [login] ;)
3. Чувствительность к регистру зависит от коллэйшена. В данном случае это Latin1_General_CI_AS, он case insensitive.
--------------
Авиатор х#ев
NEW 31.03.04 14:35
in Antwort Sergey Schwarz 30.03.04 16:26
Если поставить в конец
SELECT ... FROM [my_logins]
WHERE
table1 = table2
AND table2 = table3
AND [login] = '" & varLogin "'
AND [password] = '" & varPwd & "'"
То запрос ничего не возвращает, парольто пустой
Ту же самую последовательность (' or 1=1 --) можно ввести и в поле "password" на маске, тогда сработает:
AND [login] = '' or 1=1 --
AND [password] = '' or 1=1 --
SELECT ... FROM [my_logins]
WHERE
table1 = table2
AND table2 = table3
AND [login] = '" & varLogin "'
AND [password] = '" & varPwd & "'"
То запрос ничего не возвращает, парольто пустой
Ту же самую последовательность (' or 1=1 --) можно ввести и в поле "password" на маске, тогда сработает:
AND [login] = '' or 1=1 --
AND [password] = '' or 1=1 --
В действительности всё совсем не так, как на самом деле. (Станислав Ежи Лец)