|
|||||||
Получение пароля любого пользователя путем сканирования /proc/kcore
Время создания: 01.02.2019 13:42
Автор: Akme
Текстовые метки: linux, память, образ, слепок, пароль, пользователь, строка, kcore, john the ripper
Раздел: Компьютер - Linux - Безопасность
Запись: xintrea/mytetra_syncro/master/base/1549017736kipppdkhxx/text.html на raw.github.com
|
|||||||
|
|||||||
А вы довольны памятью своей Linux системы? Ни для кого не секрет, что в Unix системах вся информация предоставляется в виде файлов. В Linux есть файл /proc/kcore, который является «алиасом» на физическую память системы. Мануалы говорят, что полная длина этого файла — это размер физической памяти (RAM) плюс 4KB, но повертев этот файл на разных системах я пришел к выводу, что размер файла равен размеру RAM + SWAP. Аналогично этому файлу можно использовать устройства /dev/mem или /dev/kmem, но взаимодействие с ними в данном топике я не буду рассматривать. Имея под рукой «слепок памяти», первое что захотелось проверить — можно ли использовать эту «память» для восстановления/получения паролей пользователей системы. Непечатные символы нам для этой задачи не пригодятся точно, т.к. в паролях мы их использовать все равно не можем/не будем, поэтому используя команду strings мы можем от них избавиться, перегнав /proc/kcore в текстовый файл: # strings /proc/kcore > /tmp/kdump Подсчитаем количество получившихся строк # wc -l /tmp/kdump 4438050 (данная цифра была получена на системе с 3 гигабайтами оперативной памяти) при таком варианте запуска команды мы получаем очень много ненужных и неуникальных данных, добавим сортировку: # strings /proc/kcore | sort -u > /tmp/kdump.uniq # wc -l /tmp/kdump.uniq 3330526 Записей все равно много, давайте представим, что используемые пароли больше 6 символов — добавим ключик -n 6: # strings -n 6 /proc/kcore | sort -u > /tmp/kdump.uniq.6 # wc -l /tmp/kdump.uniq.6 674397 Таким образом мы получили некий файл с некими данными, давайте попробуем его использовать в качестве словаря для программы john the ripper и посмотрим получится ли расшифровать пароли из файла /etc/shadow # john --wordlist=/tmp/kdump.uniq.6 /etc/shadow Loaded 5 password hashes with 5 different salts (FreeBSD MD5 [32/32]) ... Если аккаунты активны и для входа использовались пароли, а не ключи, то есть шанс расшифровать /etc/shadow с нашим свеженьким словарем.Из 5 машин, на которых я тестировал данную методологию удалось расшифровать 3 неизвестных мне пароля. С помощью kcore можно получить много интересной информации, например обнаружение LKM руткитов или исполнение скрытых команд, предлагаю пообсуждать это в комментах ;) P.S. ради эксперимента был написан свой парсер kcore, который в качестве параметров принимает минимальную и максимальную длину возможных паролей, если кому-то интересно, то могу выложить. UPD: ниже исходник парсера, который был написан для тестов #include <stdio.h> #include <unistd.h> #include <ctype.h> void usage(char* argv0) { printf("Usage: %s [options] <filename>\n",argv0); printf("-m [MIN] minimal length of string (Default: 4)\n"); printf("-M [MAX] maximal length of string (Default: 12)\n"); printf("<filename> file that u want to dump\n"); exit(1); } int main(int argc, char* argv[]) { FILE *fp; int arg, i, binvalid; int MIN=4; int MAX=12; char pass[MAX+1],ch; char* filename; while((arg = getopt(argc, argv, "m:M:")) != EOF) { switch(arg) { case 'm' : MIN=atoi(optarg); break; case 'M' : MAX=atoi(optarg); break; default : usage(argv[0]); break; } } if(optind >= argc) { usage(argv[0]); } filename = argv[optind]; fp=fopen(filename,"r"); if(!fp) { printf("ERROR: Unable open file: %s\n",filename); return 1; } i=0; do { ch=(char)fgetc(fp); if(feof(fp)) break; if( ch>33 && ch < 127 ) { i++; pass[i-1]=ch; if(i>= MAX) { pass[i]='\0'; printf("%s\n",pass); i=0; } } else { if(i>=MIN) { pass[i] = '\0'; printf("%s\n",pass); } i=0; } } while(1); fclose(fp); } Из обсуждения: Со своим другом проводили подобные эксперименты. Чтобы сильно сократить количество строк можете пройтись так: strings /proc/kcore | grep -A 50 -B 50 {username} | sort -u | uniq > /tmp/kdump.uniq Странно но пароль всегда находился в пределах +-50 строк от имени пользователя. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|