Помогите найти уязвимость

chelya

Новичок
Помогите найти уязвимость

Господа и товарищи, помогите найти уязвимость....
Ситуция следующая... Сегодня супруге пришло сообщение от хостера, что дескать ее сайт заблокирован, ибо какая-то нехорошая редиска воспользовалась ф-цией mail() и разослала кучу спама...
Итак ф-ция mail() там всего в одном месте.
При этом, помимо, собственно отправки сообщения (до отправки сообщения) все передаваемые переменные:
1) сначала валидируются (или как там правильно это слово) - код валидации приведу ниже
2) записываются в БД.
валидация :)
PHP:
$deny_signs = array("'\r'", "'\n'");
if ($email != '')
{
$email = preg_replace($deny_signs, "", $email);
$email = substr($email,0,strpos($email,";")+1); 
//на тот случай, если кому-то захочется через точку запятой пустить кучу адресов, при этом рассылая сервисное сообщение
.....
//.еще несколько if по  $name и др. передаваемым параметрам
...
$WH='INSERT into....';
$Res=mysql(DBName, $WH) or die ("Invalid query");
...
$message = 'Уважаемый(ая) '.$name.', bla-bla-bla.bla-bla-bla';
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=' .$rr["charset"]. "\r\n";
$headers .= 'From: ' . "\r\n";
mail("мыло@моей.жены", "Новая задача", "бла-бла-бла....");
mail($email, $subject, $message, $headers);
}{
Таким образом, получается, что если кто-то использовал бы эту функцию (допустим обошел мою кривую валидацию) то перед отправкой спама
1) все переменные записались бы в БД.
2) моей жене пришло бы сообщение

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

Больше ни в одном скрипте ф-ция mail() не имеет место быть. (разве что в phpBB, который у нее также установлен, но я вроде не слышал, чтобы подобные штуки случались с phpBB... там много других дырок, но про такие не слышал)...
Таким образом вопрос - как некий дядя-хацкер смог отправить спам с сайта спуруги?... Какие еще дырки могут быть, которые могут использовать спамеры? (я о многих дырках не знаю)

PS.
.htaccess
php_value allow_url_fopen 0
 

Ermitazh

Новичок
наверное тебе лучше привести здесь свой код полностью и показать как ты фильтруешь данные...
версия php какая?
 

chelya

Новичок
Автор оригинала: Ermitazh
наверное тебе лучше привести здесь свой код полностью и показать как ты фильтруешь данные...
версия php какая?
PHP Version 5.2.1
по поводу полного кода...
а данные я фильтрую точно также, как и $email (все переменные могут содержать текст)
PHP:
$name = preg_replace($deny_signs, "", $name);
// - имя оставившего запрос 
$request = preg_replace($deny_signs, "", $request);
// - запрос
$situation = preg_replace($deny_signs, "", $situation);
// - ситуация
$time_limits = preg_replace($deny_signs, "", $time_limits);
// - желаемые сроки
и все-таки, если дядя-хацкер отправил спам через этот скрипт, то почему тогда нет записей в БД и нет письма у жены?....

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

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
А логи сервера, те что access_log уж никак посмотреть не можете?
>grep 'POST' access_log
Данные скорее всего разосланы методом пост.
Скорее всего через левый скрипт, который "впарен" через дырявый ПХПбб.
 

chelya

Новичок
к сожалению доступа к логам нет :(

спасибо за совет... посмотрим что там пхпББ могла принести....
 

kruglov

Новичок
PHP:
$deny_signs = array("'\r'", "'\n'"); 
...
$email = preg_replace($deny_signs, "", $email);
Что это за двойные вложенные кавычки?
 

Андрейка

Senior pomidor developer
kruglov
а вы предпочитаете использовать / или ~ вместо одинарных кавычек?
 

p0is0n

Новичок
Что-то я непойму... причем валидация и отправка ёмайла? Чем ваша валидация помешает мне использовать сокеты и заспамить вашу жену?=)) Поставте каптча.

ЗюЫю Может спамили вообще со своего скрипта залитого к вам на хост?
 

440hz

php.ru
если $subject не фильтрует \n то заспамить можно без проблем, т.к. подсовываются заголовки после этого и вперед...

как пример:
Код:
Subject:
=?koi8-r?b?7s/Xz8Ug08/Pwt3FzsnFIM7BIPfP0NLP09kg0M8g0NLPx9LBzc3J0s/Xwc7JwCDOwSDy7vIgKFBIUCBDbHViIMbP0tXN2TopIPDPzc/HydTFIM7BytTJINXR2tfJzc/T1Ng=?=
From: "PHP Club ЖПТХНЩ: Mailer" <[email protected]>
вот есди перед From: удается воткнуть \n, то можно впихнуть туда что угоджно. заголовки, тело письма и т.д.

идея понятна?
 

chelya

Новичок
440hz
неа... $subject - назначается не из данных передаваемых из формы... subject - прошит в скрипте... точнее выбирается из таблицы БД config (текстовая строка)...
p0is0n
хм... про сокеты... я что-то не совсем представляю, как можно при помощи сокетов разослать спам... есть какие-нить статьи?
а про скрипт залитый на сайт... я, конечно по всем директориям не проверял... но в корне и в корне форума левых скриптов не обнаружил.... сейчас только с работы вернулся... голова совсем не соображает.... завтра посмотрю...
 

Parsek

Новичок
А злому дядьке никто не мешал залить скрипт, разослать спам а потом удалить его... ИМХО без логов пытаться что-либо выяснить бесполезно
 
Сверху