Ничто неправильно с setuid
в TinyCore. Однако простая программа в вопросе не так проста использовать в TinyCore.
system
вызов вызывает указанное использование команды /bin/sh -c
. В TinyCore, /bin/sh
символьная ссылка на busybox ash
, который отбрасывает setuid
полномочия. Таким образом, даже если Вы создаете сценарий оболочки или даже двоичный файл, который делает что-то злонамеренное и называет его date
для обманывания уязвимой программы для выполнения его он не будет работать как setuid
. Исходная программа будет работать setuid
, но не команда, порожденная system
.
Как примечание стороны, стандарт bash
также отбрасывания setuid
полномочия при вызове как /bin/sh
, начиная с версии 2. Однако уязвимость, описанная в вопросе, может быть продемонстрирована в Debian и его производных, как по-видимому, версия Debian bash
не отбрасывает полномочия. (Очевидно, существует серьезное основание для этого, но я не исследовал.)
Наконец, я мог обойти поведение отбрасывания полномочий путем изменения программы на:
int main(int argc, char **argv)
{
// circumvent busybox ash dropping privileges
uid_t uid = geteuid();
setreuid(uid, uid);
printf("Current time: ");
fflush(stdout);
system("date");
return 0;
}
Читается model-list.csv, в котором все модели и их описания хранятся в строково-индексированном массиве (например, [113421]a["Z800"] == "HP Z800 Workstation"[113422]). Затем он считывает данные из списка, заменяя каждую модель строкой описания из массива.
OFS=',' "$file2" "$file1"[113627] - устанавливает выходной разделитель полей запятой (по умолчанию - пробел), затем считывается в 2 файлах в указанном порядке. [12150]
Bash - ужасный язык для эмуляции баз данных. Вы уверены, что не можете использовать для этого реляционную базу данных?
Избегайте [113592]бесполезного использования [113646]cat
grep -F[113609] будет искать буквенные строки.
Вы можете проверить код выхода [113610]grep[113611], чтобы посмотреть, не нашел ли он что-нибудь. Это должно быть быстрее, чем проверка размера файла.