Помогите пожалуйста, атакуют sql иньекциями!

123 4
Zion-i2
На сайте с 10.06.2011
Offline
108
2714

Запустили городской сайт, дали рекламу на бордах, радио, расклеили обьявления по всему городу, вобщем подошли к этому делу серьезно, и вот 1 местный умелец начал нас атаковать, добавлять в раздел обьявления и вакансии города записи вида "тест админ" во всех полях а в поле айди юзер было написано "0" мы поставили сесию на обработчик добавления (было упущение) и он зарегался и продолжил. так мы убедились что дырка действительно в этом файле, и + споймали его айпи, сейчас забанили. но на этом айпи целая сеть юзеров сидит с нашего города. так что нам срочно нужно исправить ситуацию. Если кого не затруднит прошу помощи, посмотрите пожалуйста файлик обработчик и если не сложно добавьте защиту. Вот ссылка на обработчик http://magic-8-ball.net/send.rar добавление идет аяксом, там 2 одинаковых сценария, 1 для если отклучен яваскрипт. Надеюсь мир не без добрых людей, поэтому за ранее большое спасибо, если кто-то решит отвлечся от дел и глянуть. Просто я незнаю какую проверку добавить.

siv1987
На сайте с 02.04.2009
Offline
427
#1

Это просто... габелла. Бессмысленная и беспощадная логика - if (isset($_POST['id_user_a'])) {$id_user_a = $_POST['id_user_a']; if ($id_user_a == '') {unset($id_user_a);}} И все остальное в том же духе.

id-шники - intval

остальное - htmlspecialchars (если не нужен html и нет обработки от xss) + mysql_real_escape_string

Zion-i2
На сайте с 10.06.2011
Offline
108
#2
siv1987:
Это просто... габелла. Бессмысленная и беспощадная логика - if (isset($_POST['id_user_a'])) {$id_user_a = $_POST['id_user_a']; if ($id_user_a == '') {unset($id_user_a);}} И все остальное в том же духе.

id-шники - intval
остальное - htmlspecialchars (если не нужен html и нет обработки от xss) + mysql_real_escape_string

Спасибо большое, но я как бы не дорос еще чтобы вас понять, а точнее я понимаю вродибы. но на риализацию (методом народного тыка) у меня уйдет несколько дней, а мы уже устали перезаливать бекап, вот я и пишу тут, чтоб на примере может кто покажет, а ответы типа: юзай тото и тото, я как бы плохо понимаю, то на что я гаразд в данный момент вы я думаю увидили.

bay_ebook
На сайте с 28.05.2010
Offline
111
#3

Нда, я такого уже ну ОЧЕНЬ давно не видел :0


$id_user_a = addslashes($id_user_a);
$id_user_a = htmlspecialchars($id_user_a);
$id_user_a = stripslashes($id_user_a);
$id_user_a = mysql_real_escape_string($id_user_a);

если юзер_айди идет тим интеджер, то достаточно

$id_user_a = intval($id_user_a);

или

$id_user_a = (int)$id_user_a;

в остальных случаях


$id_user_a = strip_tags($id_user_a);
$id_user_a = htmlspecialchars($id_user_a);
$id_user_a = mysql_real_escape_string($id_user_a);

а вот это переписать так

if (isset($_POST['text_a']))      {$text_a = $_POST['text_a']; if ($text_a == '') {unset($text_a);}}

на


$text_a = $_POST['text_a'];

а еще лучше сразу с $_POST['text_a'] работать, а не плодить переменные

Нужен прогер на php+mysql+понимание чужего кода? (/ru/forum/540660) Вам сюда PHP-шаман (http://php-shaman.pw/)
Zion-i2
На сайте с 10.06.2011
Offline
108
#4
bay_ebook:
Нда, я такого уже ну ОЧЕНЬ давно не видел :0

Это я с перепугу подабовлял...

Спасибо большое, я все сделал и перезалил архив, но это как я панимаю просто "почистил код", а меня атакуют sql иньекциями через этот обработчик, я не могу понять как? Я нашел такой код. нужен ли он мне в обработчике? Или это только для гет запросов и если нужен то как его внедрить?

 if (!preg_match("|^[\d]+$|", $id)) {
header("Location: index.php");
exit("<p>You hacker?</p>");
}

Так чтоли?

if (!preg_match("|^[\d]+$|", $id_user_a, $ip_user_a, $id_class_a, $tip_class_a, $header_a, $contact_a, $text_a, $date_end_a)) {
header("Location: index.php");
exit("<p>You hacker?</p>");
}

Кстати "hacker" уже отписал вконтакте, хочет денег... (пока только намекает) обидно, в одном городе живем...

siv1987
На сайте с 02.04.2009
Offline
427
#5

Zion-i2, как-то так http://pastebin.com/yZBCDiWm

Zion-i2:
а меня атакуют sql иньекциями через этот обработчик, я не могу понять как?

При всем говнокодости этого говнокода, инъекцию здесь не возможно провести.

MacDack
На сайте с 23.07.2012
Offline
55
#6
Zion-i2:

Кстати "hacker" уже отписал вконтакте, хочет денег... (пока только намекает) обидно, в одном городе живем...

[offtop]

"Да на кол его" (с)

----

Вспомнил название недавней темы

[/offtop]

CMS DLE (/ru/users/992868) icq:6три4девять924семь7
Zion-i2
На сайте с 10.06.2011
Offline
108
#7
siv1987:
При всем говнокодости этого говнокода, инъекцию здесь не возможно провести.

Я тоже так думал, пока в поле для текста обьявления не добавил вот этот простой и безобидный запрос

<?php
$result = mysql_query("INSERT INTO announce_data (id_class_a, id_user_a, header_a, contact_a, text_a, date_add_a, date_end_a, tip_class_a) VALUES ('$id_class_a', '$id_user_a', '$header_a', '$contact_a', '$text_a', '$date_add_a', '$date_end_a', '$tip_class_a')");
?>

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

<?php

$result = mysql_query("INSERT INTO announce_data (id_class_a, id_user_a, header_a, contact_a, text_a, date_add_a, date_end_a, tip_class_a) VALUES ('$id_class_a', '$id_user_a', '$header_a', '$contact_a', '$text_a', '$date_add_a', '$date_end_a', '$tip_class_a')");

?>

должно было вывестись как простой текст, вобщем я изучяя эти sql иньекции пол ночи, понял что у меня формы дырявые и он через них делал запросы.

UPD: Все работает, теперь все сценарии добавляются как текст. Но у него какойто софт так как он добавлял по 100 обьявлений чють ли не в секунду. теперь думаем как сделать ограничение на добавление обьявлений например максимум 3 в сутки с одного айпи.

Mik Foxi
На сайте с 02.03.2011
Offline
1217
#8

Если хакер живет по соседству - накатать на него заяву в полицию. И выложить на сайте скан заявы. Школьник этот испугается, получит ремня от родителей. А у вас будет больше времени на поиск и устранение уязвимостей.

Антибот, антиспам, веб фаервол, защита от накрутки поведенческих: https://antibot.cloud/ (8 лет на защите сайтов). Форум на замену серчу: https://foxi.biz/
siv1987
На сайте с 02.04.2009
Offline
427
#9
Zion-i2:
олько дата добавления была прописана и нули там где айдишники.... а это

Естественно нули, если у вас айдишник поле int, а переменную вы не приводите к типу int. Что будет если передать в качестве ид строку?.. (риторический вопрос)

arkadiy_a
На сайте с 11.06.2008
Offline
82
#10
Zion-i2:
Кстати "hacker" уже отписал вконтакте, хочет денег... (пока только намекает) обидно, в одном городе живем...

Не знаю целиком вашей ситуации но похоже вы адов неадекват.

Бюджет на рекламу есть:

Zion-i2:
Запустили городской сайт, дали рекламу на бордах, радио, расклеили обьявления по всему городу, вобщем подошли к этому делу серьезно

Ну ладно в целях "экономии" на кодере сэкономили что норм в принципе, но человек набивается в тестеры, не зловредит, в открытую записи со словом "тест" создает подавая сигналы о проблеме.

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

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий