• 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

Проблема Анонимные каналы и поиск файлов через консольную команду "dir"

  • Автор темы Автор темы |Snake|
  • Дата начала Дата начала

|Snake|

Green Team
14.03.2018
37
3
Приветствую. Есть задача: разработать программу для вывода списка файлов в указанном каталоге. Для получения списка использовать анонимные каналы.

Как пытаюсь решить: создаю приложение которое вызывает консоль, процессу консоли передаются дескрипторы канала. Вбиваю в консоли нужные команды, вывод идёт на "сервер". Но что-то не получается, запускается консоль не реагирующая ни на что:

C++:
#include <windows.h>
#include <conio.h>
#include <iostream>

using namespace std;

int main()
{
    WCHAR CommandLine[] = L"C:\\Windows\\System32\\cmd.exe";
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    HANDLE hWritePipe, hReadPipe;
    SECURITY_ATTRIBUTES sa;

    // устанавливает атрибуты защиты канала
    sa.nLength = sizeof(SECURITY_ATTRIBUTES);
    sa.lpSecurityDescriptor = NULL;
    // защита по умолчанию
    sa.bInheritHandle = TRUE;
    // дескрипторы наследуемые

    // создаем анонимный канал
    if (!CreatePipe(
        &hReadPipe,
        // дескриптор для чтения
        &hWritePipe,
        // дескриптор для записи
        &sa,
        // атрибуты защиты по умолчанию,
        // в этом случае дескрипторы
        // hReadPipe и hWritePipe ненаследуемые
        0))
        // размер буфера по умолчанию
    {
        _cputs("Create pipe failed.\n");
        _cputs("Press any key to finish.\n");
        _getch();
        return GetLastError();
    }

    ZeroMemory(&si, sizeof(si));  //обнуляем память
    ZeroMemory(&pi, sizeof(pi));
    si.cb = sizeof(STARTUPINFO);
    // использовать стандартные дескрипторы
    si.dwFlags = STARTF_USESTDHANDLES;
    // устанавливаем стандартные дескрипторы
    si.hStdInput = hReadPipe;
    si.hStdOutput = hWritePipe;
    si.hStdError = hWritePipe;

    // запускаем новый консольный процесс
    if (!CreateProcess(
        CommandLine,
        // имя процесса
        NULL,
        // командная строка
        NULL,
        // атрибуты защиты процесса по умолчанию
        NULL,
        // атрибуты защиты первичного потока по умолчанию
        TRUE,
        // наследуемые дескрипторы текущего процесса
        // наследуются новым процессом
        CREATE_NEW_CONSOLE,
        // новая консоль
        NULL,
        // используем среду окружения процесса предка
        NULL,
        // текущий диск и каталог, как и в процессе предке
        &si,
        // вид главного окна - по умолчанию
        &pi      
    ))
    {
        _cputs("Create process failed.\n");
        _cputs("Press any key to finish.\n");
        _getch();
        return GetLastError();
    }
    // закрываем дескрипторы нового процесса
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
   
    // читаем из анонимного канала
    WIN32_FIND_DATA FindFileData;
    do
    {
        DWORD dwBytesRead;
        if (!ReadFile(
            hReadPipe,
            &FindFileData.cFileName,
            sizeof(FindFileData),
            &dwBytesRead,
            NULL))
        {
            _cputs("Press any key to finish.\n");
            _getch();
            return GetLastError();
        }
        wcout << FindFileData.cFileName << endl;
    } while (FindFileData.cFileName);
    // закрываем дескриптор канала
    CloseHandle(hReadPipe);
    _cputs("The process finished reading from the pipe.\n");
    _cputs("Press any key to exit.\n");
    _getch();
    return 0;
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD