Я имею в виду следующую статью, посвященную атакам с использованием символьных ссылок:
struct stat st;
FILE * fp;
if (argc != 3) {
fprintf (stderr, "usage : %s file message\n", argv [0]);
exit(EXIT_FAILURE);
}
if (stat (argv [1], & st) < 0) {
fprintf (stderr, "can't find %s\n", argv [1]);
exit(EXIT_FAILURE);
}
if (st . st_uid != getuid ()) {
fprintf (stderr, "not the owner of %s \n", argv [1]);
exit(EXIT_FAILURE);
}
if (! S_ISREG (st . st_mode)) {
fprintf (stderr, "%s is not a normal file\n", argv[1]);
exit(EXIT_FAILURE);
}
sleep (25);
if ((fp = fopen (argv [1], "w")) == NULL) {
fprintf (stderr, "Can't open\n");
exit(EXIT_FAILURE);
}
fprintf (fp, "%s\n", argv [2]);
fclose (fp);
fprintf (stderr, "Write Ok\n");
exit(EXIT_SUCCESS);
Теперь, когда программа спит, я rm
arg[1] (используя другой терминал), который является именем файла, а затем создаю символическую ссылку для того же файла. Когда я выполнил, как сказано в статье, я пишу в файл, на который указывает ссылка.
Затем я использовал strace, передал те же аргументы, которые он дал мне, не могу открыть, что означает, что у меня нет доступа к файлу, переданному как arg[1]. Но это не тот случай, когда я выполнял нормально, как strace обнаруживает это? Любая помощь очень ценна.
Я пишу свое собственное приложение, используя ptrace для обнаружения таких атак. Я попытался использовать номера инодов, чтобы обнаружить это, но мое приложение по-прежнему ссылается на номер инода файла, который я передаю.
stat (filename)
для получения разрешений. Но внутри исполняемого файла я не вмешивался. - person kidd0   schedule 11.05.2012chmod +s a.out
означает, что он работает как двоичный файл suid. Да, я делаю это. Значит ли это, что strace работает так, как если бы я не выполнял эту команду? - person kidd0   schedule 11.05.2012strace -u username
на странице руководства говорит примерно то же самое. Сослался на это - person kidd0   schedule 11.05.2012