За основу файловой гостевухи было взято: http://irbis-team.com/15/5
Проблема в том что я сам не могу понять как надо составить текст в полях формы, чтоб моя гостевая книга рухнула. Ктонибудь может показать "плохой" запрос чтоб сработал? <_<
Вот так выглядит кусок отправки в базу:
...
$m_dt = date('Y.m.d [H:i:s]');
$m_ip = $_SERVER["REMOTE_ADDR"];
$sql = "INSERT INTO gb(username, dt, message, user_ip) VALUES ('$username', '$m_dt', '$message', '$m_ip')";
$r = mysql_query($sql);
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
exit();
...
Вот так выглядит кусок вывода из базы:
...
$name = htmlspecialchars($row['username']);
$message = bb_tags($row['message'], 'normal');
$date = $row['dt'];
...
----------------
Я уже прочитал креплёную тему в этой ветке про безопасность и поюзал чутка функцию mysql_real_escape_string. Мне неочень нравится что она мне напихивает слешов в текст, но если это даёт защиту, то бог с ним.
А вот так планирую защитится:
$m_username = mysql_real_escape_string($username);
$m_message = mysql_real_escape_string($message);
$m_dt = mysql_real_escape_string(date('Y.m.d [H:i:s]'));
$m_ip = mysql_real_escape_string($_SERVER["REMOTE_ADDR"]);
$sql = "INSERT INTO gb(username, dt, message, user_ip) VALUES ('$m_username', '$m_dt', '$m_message', '$m_ip')";
Спустя 8 минут, 10 секунд (16.03.2012 - 13:10) m4a1fox написал(а):
Ну так вроде все нормально.... делайте дальше.
Спустя 6 минут, 26 секунд (16.03.2012 - 13:16) Sopromatenot написал(а):
Эт то понятно. Просто по сути этот код:
подвержен SQL-inj, и мне чисто ради расширения кругозора интересно как имено его можно атаковать. Сам я попытался, но ничего не вышло. Тоесть либо гдето идёт защита (хотя я смотрел, ненашёл), либо у меня руки крюки, что тоже не исключено )
Или если же он защищен то применять mysql_real_escape_string уже вроде и не к чему... что с трудом верится.
...
$m_dt = date('Y.m.d [H:i:s]');
$m_ip = $_SERVER["REMOTE_ADDR"];
$sql = "INSERT INTO gb(username, dt, message, user_ip) VALUES ('$username', '$m_dt', '$message', '$m_ip')";
$r = mysql_query($sql);
header('location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']);
exit();
...
подвержен SQL-inj, и мне чисто ради расширения кругозора интересно как имено его можно атаковать. Сам я попытался, но ничего не вышло. Тоесть либо гдето идёт защита (хотя я смотрел, ненашёл), либо у меня руки крюки, что тоже не исключено )
Или если же он защищен то применять mysql_real_escape_string уже вроде и не к чему... что с трудом верится.
Спустя 1 минута, 7 секунд (16.03.2012 - 13:17) killer8080 написал(а):
Цитата (Sopromatenot @ 16.03.2012 - 12:02) |
Мне неочень нравится что она мне напихивает слешов в текст, но если это даёт защиту, то бог с ним. |
В базу слеши не попадают, экранирование нужно для формирования корректной строки sql запроса. Причем нужно это не только для безопасности, но и вообще для нормальной работы с БД. Если у тебя в базу пихаются слеши, значит включен magic qutes pgc, их как раз и нужно отключить.
Спустя 22 минуты, 4 секунды (16.03.2012 - 13:39) Sopromatenot написал(а):
В htaccess выставлено php_flag magic_quotes_gpc Off.
Как раз после использования защиты в виде обработки фун-й mysql_real_escape_string слеши заносятся в базу. Мне казалось что так и должно происходить... покрайней мере мой код делает имено так.
Как раз после использования защиты в виде обработки фун-й mysql_real_escape_string слеши заносятся в базу. Мне казалось что так и должно происходить... покрайней мере мой код делает имено так.
Спустя 15 минут, 12 секунд (16.03.2012 - 13:55) killer8080 написал(а):
Цитата (Sopromatenot @ 16.03.2012 - 12:39) |
В htaccess выставлено php_flag magic_quotes_gpc Off. Как раз после использования защиты в виде обработки фун-й mysql_real_escape_string слеши заносятся в базу. |
значит htaccess не отрабатывает, убедись что они отключены
echo get_magic_quotes_gpc() ? 'magic quotes влючены' : 'magic quotes вылючены';
Спустя 7 минут, 51 секунда (16.03.2012 - 14:02) Sopromatenot написал(а):
Ой, точно. У меня Денвер и в винде не разрешают делать файл без имени в проводнике.
Передалал тоталом.
Да, теперь не заносятся
А что с запросом? Как будет выглядить запрос чтоб моя гостевая книга (без защиты, первоначальная версия кода) повела себя не так как должна?
Передалал тоталом.
Да, теперь не заносятся
А что с запросом? Как будет выглядить запрос чтоб моя гостевая книга (без защиты, первоначальная версия кода) повела себя не так как должна?
Спустя 14 минут, 12 секунд (16.03.2012 - 14:17) killer8080 написал(а):
Цитата (Sopromatenot @ 16.03.2012 - 13:02) |
А что с запросом? Как будет выглядить запрос чтоб моя гостевая книга (без защиты, первоначальная версия кода) повела себя не так как должна? |
можно стырить данные из бд, подставив вложенный запрос или вставить сразу множество сообщений, или ...
Да мало ли что ещё
Спустя 9 минут, 47 секунд (16.03.2012 - 14:26) Sopromatenot написал(а):
А, удалось испортить запрос вписав ', 'k
Но мне кажется нереально в даном случае сделать чтото с базой не видя код. Максимум это будет ошибка в запросе и в базу ничего не пойдёт.
Всем спасибо, разобрался болеменее
Но мне кажется нереально в даном случае сделать чтото с базой не видя код. Максимум это будет ошибка в запросе и в базу ничего не пойдёт.
Всем спасибо, разобрался болеменее
Спустя 2 минуты (16.03.2012 - 14:28) killer8080 написал(а):
Цитата (Sopromatenot @ 16.03.2012 - 13:26) |
Но мне кажется нереально в даном случае сделать чтото с базой не видя код. Максимум это будет ошибка в запросе и в базу ничего не пойдёт. |
ошибаешься, еще как можно
Спустя 36 минут, 34 секунды (16.03.2012 - 15:05) johniek_comp написал(а):
Sopromatenot
а ты выложи, мы поломаем, и увидишь что можно сделать не видя кода
а ты выложи, мы поломаем, и увидишь что можно сделать не видя кода
Спустя 12 минут, 48 секунд (16.03.2012 - 15:18) Sopromatenot написал(а):
Я верю )
Просто ради интереса хочу попробывать на своей гостевухи пока она на Денвере. Чтоб видеть как это обычно происходит со стороны взломщиков, дабы осмыслено подходить к защите.
Вот например я предполагал что достаточно в поле вставить:
inj','1','2','3')";//
и тогда выполнится запрос:
Но ничего не выполняется. Запись не происходит. Хотя если написать так в файле php то работает.
Просто ради интереса хочу попробывать на своей гостевухи пока она на Денвере. Чтоб видеть как это обычно происходит со стороны взломщиков, дабы осмыслено подходить к защите.
Вот например я предполагал что достаточно в поле вставить:
inj','1','2','3')";//
и тогда выполнится запрос:
$sql = "INSERT INTO gb(username, dt, message, user_ip) VALUES ('inj','1','2','3')";//$username', '$m_dt', '$message', '$m_ip')";
Но ничего не выполняется. Запись не происходит. Хотя если написать так в файле php то работает.
Спустя 1 минута, 39 секунд (16.03.2012 - 15:19) killer8080 написал(а):
Цитата (Sopromatenot @ 16.03.2012 - 14:18) |
Но ничего не выполняется. Запись не происходит. Хотя если написать так в файле php то работает. |
нужно обрезку делать sql, а не php комментарием (--)
Спустя 10 минут, 5 секунд killer8080 написал(а):
Вот например, как может выглядеть атака на твой код. Здесь мы крадем пароль админа, или его хеш
$message = "',NULL),(NULL, NULL, (SELECT password FROM users WHERE login='admin'), NULL)-- ";
$sql = "INSERT INTO gb(username, dt, message, user_ip) VALUES ('$username', '$m_dt', '$message', '$m_ip')";
UPD запятую пропустил
Спустя 27 минут, 25 секунд (16.03.2012 - 15:47) Sopromatenot написал(а):
У меня там нет паролей, всего 4 поля )
Всёравно чтото не проходит. (--) тож чтото не пашет, хот так, хоть сяк
Всёравно чтото не проходит. (--) тож чтото не пашет, хот так, хоть сяк
Спустя 14 минут, 43 секунды (16.03.2012 - 16:02) killer8080 написал(а):
Цитата (Sopromatenot @ 16.03.2012 - 14:47) |
У меня там нет паролей, всего 4 поля ) |
это я для примера привел
Цитата (Sopromatenot @ 16.03.2012 - 14:47) |
Всёравно чтото не проходит. (--) тож чтото не пашет, хот так, хоть сяк |
должен быть пробел после --
Спустя 16 минут, 36 секунд (16.03.2012 - 16:18) Sopromatenot написал(а):
О, теперь работает. Спасибо