• XSS.stack #1 – первый литературный журнал от юзеров форума

USB Army Knife (LilyGo T-Dongle S3)

rand

CooL-Lamer
Эксперт
Регистрация
24.05.2023
Сообщения
581
Реакции
1 153
Депозит
0.07 Ł и др.
Кто что думает, никто не тестил?

Арсенал пентестера: USB Army Knife.

• Почти год усердной работы потребовалось автору данного проекта, чтобы реализовать компактный и универсальный инструмент для различных атак типа BadUSB. Устройство называется USB Army Knife, а исходный код является открытым и написан на JavaScript и C++.

• Проект представляет собой ПО, которое обладает универсальными возможностями, включая эмуляцию запоминающих устройств, имитацию сетевых устройств, эксплойты для WiFi/Bluetooth, мониторинг рабочего стола цели, функционал отключения всех пользователей от точки Wi-Fi и еще кучу разных плюшек, которые описаны вот тут: https://github.com/i-am-shodan/USBArmyKnife

• Стоит отметить, что на базе USB Army Knife можно развернуть свой собственный комплект инструментов! Ну, а само устройство реализовано на плате ESP32-S3 в форме USB-флешки LilyGo T-Dongle S3 (на Ali продается всего за 14 евро) в версии с цветным ЖК-экраном, физической кнопкой, адаптером для карт micro SD, а также адаптером SPI.

Новость на хабре: https://habr.com/ru/news/848308/

Вот тут продается: https://aliexpress.ru/item/1005004860003638.html
 
эмуляцию запоминающих устройств
выполнение кода через специально сформированную ФС https://www.opennet.me/opennews/art.shtml?num=59664
имитацию сетевых устройств
кража данных с помощью Responder https://malicious.link/post/2016/snagging-creds-from-locked-machines/

мониторинг рабочего стола цели
вот тут непонятно. как это сделано? эмуляция юсб монитора? :D

функционал отключения всех пользователей от точки Wi-Fi
и тут непонятно. разве для 5 GHz уже сделали deauther? вроде только 2.4 GHz поддерживал.

короче, интересная игрушка.
 
вот тут непонятно. как это сделано? эмуляция юсб монитора?
Может что-то типа драйвера перехвата как это реализовано в радмине? Я заказал, как приедет, опробую. Потом отпишу.
 
вот тут непонятно. как это сделано? эмуляция юсб монитора? :D
Im not sure if you were joking, but that's definitely a real thing.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Тоже думаю прикупить, но хз, мне кажется надо сразу штуки 3 брать, так как по отзывам что сгорают платки часто)
 
вот тут непонятно. как это сделано? эмуляция юсб монитора?
Посмотрел исходники, VNC юзается через класс DX11ScreenCaptureService из библиотеки ScreenCapture.NET, тоесть для захвата изображения используется DirectX API.

Вот исходник:

C#:
using HPPH;
using RemoteViewing.Vnc;
using ScreenCapture.NET;

namespace Agent.VNC
{
    internal class VNCFramebufferSource : IVncFramebufferSource, IDisposable
    {
        public bool SupportsResizing => false;

        public int Width { get; set; } = 200;

        public int Height { get; set; } = 400;

        private readonly IScreenCaptureService screenCaptureService;
        private readonly IEnumerable<GraphicsCard> graphicsCards;
        private readonly IEnumerable<Display> displays;
        private readonly IScreenCapture screenCapture;
        private readonly ICaptureZone fullscreen;
        private readonly int downscale = 2;
        private VncFramebuffer? framebuffer = null;
        private bool disposedValue;
        private DateTime lastUpdateTime = DateTime.MinValue;
        private Action onNewFrame;

        public VNCFramebufferSource(Action onNewFrame, int downscale = 2)
        {
            this.onNewFrame = onNewFrame;

            // Create a screen-capture service
            screenCaptureService = new DX11ScreenCaptureService();

            // Get all available graphics cards
            graphicsCards = screenCaptureService.GetGraphicsCards();

            // Get the displays from the graphics card(s) you are interested in
            displays = screenCaptureService.GetDisplays(graphicsCards.First());

            // Create a screen-capture for all screens you want to capture
            screenCapture = screenCaptureService.GetScreenCapture(displays.First());

            this.downscale = downscale;

            // Register the regions you want to capture on the screen
            // Capture the whole screen
            fullscreen = screenCapture.RegisterCaptureZone(0, 0, screenCapture.Display.Width, screenCapture.Display.Height, downscaleLevel: downscale);

            Width = fullscreen.Width;
            Height = fullscreen.Height;
        }

        public VncFramebuffer Capture()
        {
            onNewFrame();

            // Capture the screen
            // This should be done in a loop on a separate thread as CaptureScreen blocks if the screen is not updated (still image).
            screenCapture.CaptureScreen();

            using (fullscreen.Lock())
            {
                IImage image = fullscreen.Image;

                if (this.framebuffer == null || this.framebuffer.Width != image.Width || this.framebuffer.Height != image.Height)
                {
                    this.framebuffer = new VncFramebuffer("VNC", image.Width, image.Height, new VncPixelFormat());
                }

                RefImage<ColorBGRA> refImage = image.AsRefImage<ColorBGRA>();

                lock (this.framebuffer.SyncRoot)
                {
                    for (int row = 0; row < image.Height; row++)
                    {
                        for (int col = 0; col < image.Width; col++)
                        {
                            this.framebuffer.SetPixel(col, row, new byte[] { refImage[col, row].B, refImage[col, row].G, refImage[col, row].R, refImage[col, row].A, });
                        }
                    }
                }

                lastUpdateTime = DateTime.UtcNow;

                return this.framebuffer;
            }
        }

        public ExtendedDesktopSizeStatus SetDesktopSize(int width, int height)
        {
            return ExtendedDesktopSizeStatus.Prohibited;
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    screenCapture.Dispose();
                }

                disposedValue = true;
            }
        }

        public void Dispose()
        {
            // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
            Dispose(disposing: true);
            GC.SuppressFinalize(this);
        }

        internal void Reset()
        {
            lastUpdateTime = DateTime.UtcNow;
        }
    }
}
 
Последнее редактирование:
Посмотрел исходники, VNC юзается через класс DX11ScreenCaptureService из библиотеки ScreenCapture.NET, тоесть для захвата изображения используется DirectX API.

Вот исходник:

C#:
using HPPH;
using RemoteViewing.Vnc;
using ScreenCapture.NET;

namespace Agent.VNC
{
    internal class VNCFramebufferSource : IVncFramebufferSource, IDisposable
    {
        public bool SupportsResizing => false;

        public int Width { get; set; } = 200;

        public int Height { get; set; } = 400;

        private readonly IScreenCaptureService screenCaptureService;
        private readonly IEnumerable<GraphicsCard> graphicsCards;
        private readonly IEnumerable<Display> displays;
        private readonly IScreenCapture screenCapture;
        private readonly ICaptureZone fullscreen;
        private readonly int downscale = 2;
        private VncFramebuffer? framebuffer = null;
        private bool disposedValue;
        private DateTime lastUpdateTime = DateTime.MinValue;
        private Action onNewFrame;

        public VNCFramebufferSource(Action onNewFrame, int downscale = 2)
        {
            this.onNewFrame = onNewFrame;

            // Create a screen-capture service
            screenCaptureService = new DX11ScreenCaptureService();

            // Get all available graphics cards
            graphicsCards = screenCaptureService.GetGraphicsCards();

            // Get the displays from the graphics card(s) you are interested in
            displays = screenCaptureService.GetDisplays(graphicsCards.First());

            // Create a screen-capture for all screens you want to capture
            screenCapture = screenCaptureService.GetScreenCapture(displays.First());

            this.downscale = downscale;

            // Register the regions you want to capture on the screen
            // Capture the whole screen
            fullscreen = screenCapture.RegisterCaptureZone(0, 0, screenCapture.Display.Width, screenCapture.Display.Height, downscaleLevel: downscale);

            Width = fullscreen.Width;
            Height = fullscreen.Height;
        }

        public VncFramebuffer Capture()
        {
            onNewFrame();

            // Capture the screen
            // This should be done in a loop on a separate thread as CaptureScreen blocks if the screen is not updated (still image).
            screenCapture.CaptureScreen();

            using (fullscreen.Lock())
            {
                IImage image = fullscreen.Image;

                if (this.framebuffer == null || this.framebuffer.Width != image.Width || this.framebuffer.Height != image.Height)
                {
                    this.framebuffer = new VncFramebuffer("VNC", image.Width, image.Height, new VncPixelFormat());
                }

                RefImage<ColorBGRA> refImage = image.AsRefImage<ColorBGRA>();

                lock (this.framebuffer.SyncRoot)
                {
                    for (int row = 0; row < image.Height; row++)
                    {
                        for (int col = 0; col < image.Width; col++)
                        {
                            this.framebuffer.SetPixel(col, row, new byte[] { refImage[col, row].B, refImage[col, row].G, refImage[col, row].R, refImage[col, row].A, });
                        }
                    }
                }

                lastUpdateTime = DateTime.UtcNow;

                return this.framebuffer;
            }
        }

        public ExtendedDesktopSizeStatus SetDesktopSize(int width, int height)
        {
            return ExtendedDesktopSizeStatus.Prohibited;
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    screenCapture.Dispose();
                }

                disposedValue = true;
            }
        }

        public void Dispose()
        {
            // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
            Dispose(disposing: true);
            GC.SuppressFinalize(this);
        }

        internal void Reset()
        {
            lastUpdateTime = DateTime.UtcNow;
        }
    }
}
а юсб флешка там при чём? этот код как-то выполнить надо, винда же не будет сама запускать VNC сервер при втыкании флешки.
оно эмуляцией нажатий на клавиши запускается? то есть флешка работает как клавиатура "badUSB"?
 
то есть флешка работает как клавиатура "badUSB"?
Почти год усердной работы потребовалось автору данного проекта, чтобы реализовать компактный и универсальный инструмент для различных атак типа BadUSB.
 
Кто что думает, никто не тестил?

Арсенал пентестера: USB Army Knife.

• Почти год усердной работы потребовалось автору данного проекта, чтобы реализовать компактный и универсальный инструмент для различных атак типа BadUSB. Устройство называется USB Army Knife, а исходный код является открытым и написан на JavaScript и C++.

• Проект представляет собой ПО, которое обладает универсальными возможностями, включая эмуляцию запоминающих устройств, имитацию сетевых устройств, эксплойты для WiFi/Bluetooth, мониторинг рабочего стола цели, функционал отключения всех пользователей от точки Wi-Fi и еще кучу разных плюшек, которые описаны вот тут: https://github.com/i-am-shodan/USBArmyKnife

• Стоит отметить, что на базе USB Army Knife можно развернуть свой собственный комплект инструментов! Ну, а само устройство реализовано на плате ESP32-S3 в форме USB-флешки LilyGo T-Dongle S3 (на Ali продается всего за 14 евро) в версии с цветным ЖК-экраном, физической кнопкой, адаптером для карт micro SD, а также адаптером SPI.

Новость на хабре: https://habr.com/ru/news/848308/

Вот тут продается: https://aliexpress.ru/item/1005004860003638.html
Можеш дать актуальный линк на товар где продається, спасибо!
 
Пришел этот чудо девайс. Скоро опробую и попытаюсь рассказать как оно.
Тоже заказал, буду следить за твоим продвижением !)
 
Запустил. Инструмент настроил, что-то проверил. Пока нет времени все детально описать. Если кому-то нужна будет помощь по первоначальной настройке (Visual Code, компиляция VNC, прошивка девайса). Пишите в ПМ.
 
Если кому-то не хочется заморачиваться после прошивки девайса, вот скомпилированный VNC по доке (Ужато с 512 мегабайт). Там в архиве образ и сам скрипт для запуска атаки BadUSB. Также есть недостаток, при вставке девайса, запуск произойдет только с английской раскладки. Алгоритм следующий после вставки девайса: открывается Win+R, в командную строку пишется команда монтирования образа и запуска VNC. После этого подключаетесь к девайсу по Wi-Fi и идете по адресу http://4.3.2.1, там и будет рабочий стол таргета.
 

Вложения

  • BadUSB_VNC.zip
    2.7 МБ · Просмотры: 24


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх