В непроверенной версии bash он сохраняет экспортированные определения функций в качестве переменных среды.
Сохраните функцию x as,
$ x() { bar; }
$ export -f x
И проверьте ее определение как
$ env | grep -A1 x
x=() { bar
}
. Таким образом, можно использовать это, определяя его собственные переменные среды и интерпретирует их как определения функций. Например, env x='() { :;}' будет рассматриваться как
x() { :;
}
env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
Из man env,
env - запустить программу в измененной среде. : ничего не делает, кроме выходов с статусом выхода 0. подробнее. Когда новый экземпляр неуправляемого bash запущен как bash -c "echo this is a test", обработанная переменная окружения рассматривается как функция и загружается. Соответственно, получается выход vulnerable this is a test Примечание: эхо вне определения функции было неожиданно выполнено во время запуска bash. Определение функции - это всего лишь шаг, чтобы получить оценку и использование, само определение функции и используемая переменная среды произвольны. Оболочка рассматривает переменные среды, видит x, которая выглядит так, как будто она удовлетворяет ограничениям, которые она знает о том, как выглядит определение функции, и оценивает строку, непреднамеренно также выполняет эхо (которое может быть любой командой, злонамеренной или нет) , Также см. ЭтоПерейдите к значку сети на верхней панели. В разделе «Редактировать соединения ...» удалите профиль для этой конкретной беспроводной сети и любые дубликаты, такие как profilename1 / profilename2, а затем подключитесь к той же беспроводной сети. Он попросит пароль, поскольку он воссоздает профиль, но он не должен спрашивать снова.
перейти на значок сети в верхней панели. В "изменить соединения..." удалить профиль для конкретной беспроводной сети, и любые дубликаты, как profilename1/profilename2, а затем подключиться к этой же беспроводной сети. Он будет спрашивать Ваш пароль, так как он воссоздает профиль, но он не должен снова спросить.
Перейдите к значку сети на верхней панели. В разделе «Редактировать соединения ...» удалите профиль для этой конкретной беспроводной сети и любые дубликаты, такие как profilename1 / profilename2, а затем подключитесь к той же беспроводной сети. Он попросит пароль, поскольку он воссоздает профиль, но он не должен спрашивать снова.