Я только что вернул машину в предыдущее рабочее состояние и понял, что, по-видимому, некоторые периметры конфигурации не работают в этой версии vsftpd.
То, что вы хотите сделать, невозможно. Это не имеет ничего общего с C или SUID, а связано с тем, как оболочка расширяет переменные.
Анализ входных данных для оболочки в отдельные команды оболочки происходит перед расширением переменных среды. Содержимое переменной не интерпретируется в соответствии с синтаксисом оболочки (, иначе foo='$foo' ; : $foo
было бы бесконечным циклом ). Это означает, что интерполяция переменной в командную строку никогда не может разделить ее на несколько отдельных командных строк. Если переменная не заключена в кавычки, это означает, что содержимое переменной может быть разделено пробелами на несколько аргументов команды. Это может создать или не создать какую-либо уязвимость, которую можно использовать, но это не будет прямой инъекцией оболочки.
Если вы замените свой скрипт hello.sh
на этот:
#!/bin/sh
i=1
for arg in "$@"; do
echo "argument #$i: [[$arg]]"
i="$(expr "$i" + 1)"
done
вы заметите, что он вызывается с первым аргументом ;cat
и вторым аргументом /home/bob/secret-file
. Оболочка не интерпретирует ;
как разделитель команд, она просто передает его дальше.