Эксплойт SUID-программы с использованием переменных среды.

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

1
28.09.2019, 13:37
1 ответ

То, что вы хотите сделать, невозможно. Это не имеет ничего общего с 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. Оболочка не интерпретирует ;как разделитель команд, она просто передает его дальше.

1
28.04.2021, 23:28

Теги

Похожие вопросы