Объединение функций в PHP для использования в URL

Я тестирую веб-приложение на проникновение, и мне нужно объединить две функции в один URL. (Да я уже проверял этот а также этот)

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

<?php
if(isset($_GET['function'])){
$_GET['function']();
}
?>

Есть ли возможность создать что-то подобное?
http://localhost/?function=shell_exec('ls') AND phpinfo

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

2

Решение

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

http://localhost/?function=shell_exec('ls');phpinfo

Таким образом, ваш фактический код станет:

if(isset($_GET['function'])){
$functions =  explode(';',$_GET['function']);
foreach($functions as $function){
$function();
}
}

Вы также можете использовать eval функция:

http://localhost/?function=?eval=shell_exec('ls');phpinfo();

с последующим eval($_GET['eval']);, как предлагается в комментариях ниже.

0

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

Здесь есть две проблемы, я сначала отвечу на вопрос.

Почему бы не сделать это массивом?

Адрес:

http://localhost/?function[]=phpinfo&function[]=bob

Код:

$functions = (array)$_GET['function'];
foreach($functions as $function) {
$function();
}

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

Это огромное предположение, но что-то вроде:

$matches = [];
preg_match('/(\w+)\(('?(\w+)'?,?)+\)/', $functions, $matches);

После этого вы сможете извлечь имя и параметры функции (при условии, что они являются строками) и вызвать функцию с параметрами. Но это регулярное выражение явно хитроумно: /

1

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