Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL инъекция 
:(
    Опции темы
Ripper
Дата 1.4.2013, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lonely soul...
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 30.6.2004
Где: г. Москва

Репутация: 1
Всего: 23



Добрый вечер.

Допустим, имеется URL: site.ru/image/get/5/, где 5 - айдишник картинки.
На сервере ничего не фильтруется, 
Код

$result = db::query("SELECT * FROM img WHERE id = '$id'");


Как здесь провести инъекцию? Вот почитал примеры, типа можно приписать WHERE id='5' OR 'x'='x', и можно вытащить все картинки например. Но ведь если парсится URL, то пробел заменяется на %20, и в запрос идет %20 вместо пробела, и выскакивает ошибка на получении данных ($data = $result->fetch_array(), но $data = false)

Если id передавался бы как get параметр, то тогда все получается, а в случае если парсится url? 

Спасибо.


--------------------
"Он знает: надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума" - Над кукушкиным гнездом
PM MAIL ICQ   Вверх
Arantir
Дата 1.4.2013, 18:45 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(Ripper @  1.4.2013,  15:24 Найти цитируемый пост)
Но ведь если парсится URL, то пробел заменяется на %20, и в запрос идет %20 вместо пробела

А вы уверены? То есть, нет ли где-то там обратной конвертации ссылки в текст? Чтобы могли работать ссылки на подобии /user/Иван, ведь не во всех случаях можно заменить кириллические символы латинскими.

Не каждый запрос является потенциальной дырой. Чтобы выбрать что-то из БД надо знать ее структуру. И то не факт, что даже при успешном запросе это будет выведено на экран, например, если php выводит данные по названиям полей, то надо как минимум подменить их аналогичными алиасами в злополучном запросе, иначе они просто пройдут мимо вывода.
Кроме того, на СУБД есть неплохая система прав и полномочий. Обычно СУБД-пользователю, которым пользуется сайт, совершенно не нужно иметь прав на вывод списка таблиц, удаление таблиц и подобное, а уж тем более доступа к базам 'mysql' и 'information_schema'. Так что и узнать структуру БД с помощью инъекции может не представляться физически возможным.

Пример явной дыры, это что-то вроде:
Код
SELECT * FROM users WHERE login = '$login' AND password = '$password'
где апостроф + знак комментария после логина позволит авторизироваться без пароля, ведь эти символы передаются в неизменном виде по ссылке. И никаких пробелов не нужно.

Тем не менее, разумным является создание запросов, в которых невозможно вообще ничего, кроме заранее предусмотренного разработчиком. Например, допустим, значение фильтруется как числовое. А что будет, если ввести туда 999999999999999? В лучшем из плохих случаев будет ошибка php, а в худшем может и ошибка SQL с куском запроса и названиями полей и таблиц.
Кстати, старые добрые предподготовленные запросы спасают сразу от многих проблем. Штука, поверенная временем =)

Это сообщение отредактировал(а) Arantir - 1.4.2013, 18:46


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Aliance
Дата 2.4.2013, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Цитата(Arantir @  1.4.2013,  19:45 Найти цитируемый пост)
Например, допустим, значение фильтруется как числовое. А что будет, если ввести туда 999999999999999? В лучшем из плохих случаев будет ошибка php, а в худшем может и ошибка SQL с куском запроса и названиями полей и таблиц.

Эм, точно? Ввел число 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 - ничего плохого не произошло, написало лишь что rowset не найден.
PM MAIL WWW ICQ Skype   Вверх
Arantir
Дата 2.4.2013, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(Aliance @  2.4.2013,  09:11 Найти цитируемый пост)
Эм, точно?

А о точности утверждения сказано во второй части процитированного вами фрагмента =)
Но если бы сам не встречал подобной проблемы — не писал бы.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Gold Dragon
Дата 3.4.2013, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Ripper @  1.4.2013,  17:24 Найти цитируемый пост)
Как здесь провести инъекцию?
а зачем?



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0678 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.