Socat — универсальный CLI-инструмент для создания двунаправленных потоков данных. При этом каналами данных могут быть совершенно различные объекты, такие как физические и виртуальные последовательные устройства, сетевые сокеты (TCP, UDP, raw и т.д.), пайпы, стандартные потоки ввода-вывода и некоторые другие (подробное описание можно найти в man).

Утилита socat

Общий синтаксис команды

socat [параметры] <канал1> <канал2>

Некоторые примеры использования

  • Создание двустороннего моста между последовательным устройством и сетевым сокетом (Serial-over-IP):

    socat /dev/ttyS0,raw,echo=0 UDP4-DATAGRAM:192.168.0.10:1051,bind=:1050 

    В данному примере все данные, поступающие с последовательного порта, будут отправляться в виде UDP-датаграммы на 192.168.0.10:1051, а приходящие на локальный порт 1050/udp также передаваться на устройство.

  • Проксирование (проброс) портов

    socat TCP4-LISTEN:4422,fork TCP4:192.168.0.10:22

    В данном случае все запросы к локальному порту 4422/tcp будут перенаправляться на 192.168.0.10:22. Опция fork позволяет создавать отдельный процесс для нового конкурентного соединения. Аналоичным образом можно настроить проброс UDP. Также имеется возможность задать собственный TLS/SSL-сертификат.

  • Вывод данных в консоль

    socat TCP-LISTEN:8080, STDOUT

    При обращении на порт 8080/tcp все данные будут перенаправлены в стандартный поток вывода (по умолчанию в консоль). Может быть довольно полезным при отладке.

  • Организация bind shell

    socat -d -d TCP4-LISTEN:5432 EXEC:/bin/sh

    При отправке команд на порт 5432/tcp (обычно используемый легитимной службой PostgreSQL) они будут интерпретироваться sh. Дополнительное маскирование канала также может обеспечиваться с помощью шифрования.

  • Аналогичным образом можно организовать и Reverse Shell

Предыдущая запись Следующая запись