[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: sql injection
287_08
Всем привет. В общем узнал в инете, что на движке моем есть аж более 20 уязвимостей. И большинство из них реализуется как раз таки через эти инъекции. Полез на ютуб, поглядел это видео: http://www.youtube.com/watch?v=7H358PrFagc&feature=related

Для изученияв всего этого дела создал простую талицу мискл, и файлик php на локальном хосте, который подключается к базеи тянет от туда данные. Естественно ничего не защищал, передавал данные GET, никак их не фильтруя.

<?php
// данные доступа к базе данных
$db_host="localhost"; // обычно не нужно изменять
$db_user="root"; // имя пользователя БД
$db_password=""; // пароль БД
$db_name = "spl"; // имя БД

$table = "category";
$where = $_GET['var']; // имя таблицы статистики


// соединение с БД

mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());
mysql_select_db($db_name) or die (mysql_error());
mysql_query('SET NAMES utf8');


// Выполняем запрос: выбрать ID пользователей, которые посетили приложение более 10 раз
$query = "SELECT name FROM " . $table . " where parent=" .$where;
echo $query;
$sql = mysql_query($query);


// обрабатываем полученный результат
// если нужно, то узнаем количество выбранных значений

$num_rows = mysql_num_rows($sql);
echo "<hr> количество полей = " . $num_rows.'<hr />';

// выводим данные
while ($sql_data = mysql_fetch_array($sql)) {
echo $sql_data['name'].' - '.$sql_data['post_title'].'<br />';
}



В результате исполнения запроса: index.php?var=-1 order by 20 выдается ошибка: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\test2.ru\www\index.php on line 30, а в том видео это прокатило.

Далее почитал факи, везде описывается именно данный метод инъекции. И у все все работает. Проверил на локалке у себя, на хостере (1gb.ru) - везде такая песня(((



Спустя 1 час, 5 минут, 5 секунд (9.01.2012 - 09:36) Игорь_Vasinsky написал(а):
говоря об атаках на БД, то реч скорее всего подразумевается использование POST или GET

а если злоумышленник из твоего кода... тут уже считай хост порвали.

Спустя 53 минуты, 53 секунды (9.01.2012 - 10:30) Michael написал(а):
Цитата (287_08)
На форуме: 2 года, 4 месяца, 2 дня


Цитата
sql injection, Время пришло узнать


и не говори wink.gif laugh.gif

По теме ТЫЦ

Спустя 3 часа, 49 минут, 8 секунд (9.01.2012 - 14:19) 287_08 написал(а):
Цитата
и не говори

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

Каким GET запросом произвести инъекцию в тот код, на все запросы которые я вводил просто выдается ошибка, запрос не исполняется.

Спустя 2 часа, 12 минут, 9 секунд (9.01.2012 - 16:31) SlavaFr написал(а):
index.php?var=-1 or 1=1

Спустя 29 минут, 13 секунд (9.01.2012 - 17:01) inpost написал(а):
287_08
Честно? Отвратительный пример взлома :) Я недавно парню показывал пример, так я на деле показывал, как можно авторизироваться с правами администратора имея такой похожий запрос.
Если ты в скрипт передаёшь значение, то обрабатывай его (int), а если ты передаёшь текст, то в запросе mysql текст обрамляется одинарными кавычками (Что ты не сделал для parent!!!) и в добавок переменную обрабатываешь mysql_real_escape_string. Теперь проблем со взломом не будет.

Перед тестом надо не забыть ОТКЛЮЧИТЬ МАГИЧЕСКИЕ КАВЫЧКИ, потому что они будут портить возможность тестирования такого метода.
if(mysql_num_rows($sql))
{
while() {
тут содержание
}
}

else
echo 'Таких записей в БД нет!';

Смысл в том, что если хотя бы 1 запись была выбрана, тогда прогонять цикл.

Но беда не в этом, беда в самом запросе, поэтому напиши:
mysql_query($query) or die(mysql_error());

Дело в том, что матюкаться на запрос он будет в том случае, если mysql_query вернёт ошибку, а не 0 записей, а ошибка из-за синтаксиси либо чего другого.

Инъекция - это не ошибка запроса, а удачно пройденный запрос, поэтому не стесняйся в этих целях использовать or die(), потому что если sql-inj пройдет успешно, то or die не сработает!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.