Магия консоли. Подбираем полезные утилиты для работы в терминале. Часть 2
Еще один красивый инструмент в твою копилку «псевдографических свистоперделок» — ping с визуализацией прямо в окне терминала.
grepcidr — анализ IP-адресов
Утилита для тех, кому уже надоело писать регулярки для поиска IP-адресов с помощью grep
. Работает оно несколько шустрее, чем grep
, но, чтобы нужна была отдельная утилита, у тебя должно быть действительно много работы с IP-адресами.
sish
Когда тебе нужно пробросить какой‑то сервис в интернете, при этом не имея честного «белого» IP, ты можешь воспользоваться сервисами вроде Ngrok или Serveo. Альтернатив по большому счету немного: голый SSH или кустарные self-hosted-решения.
Туннелирование через SSH
Ты, конечно, знаешь о возможности пробрасывать порты через SSH. А что насчет полноценного VPN? На эту тему есть отличный материал на Хабре и на Robotmoon, если ты знаешь английский. Впрочем, текст приправлен картинками со схемами работы команд, а все примеры можно безболезненно запустить у себя и попробовать в действии.
К таким самоделкам относится и проект sish — красивая и удобная альтернатива Ngrok, сделанная поверх обычного SSH.
Sish — это не просто пачка скриптов для запуска SSH-форвардинга. Это полноценная реализация SSH-сервера, который только форвардинг и знает, зато делает это куда лучше, чем официально распространяемая версия. В частности, sish умеет слушать и мультиплексировать HTTP- и HTTPS-трафик с поддержкой WebSocket (в том числе шифрованного), если при запуске форвардинга указать удаленный порт 80 или 443. В противном случае будет проброшен TCP-порт, если он не занят на сервере.
Официальная инструкция по установке состоит всего из двух команд:
docker pull antoniomika/sish:latest docker run -itd --name sish \ -v ~/sish/ssl:/ssl \ -v ~/sish/keys:/keys \ -v ~/sish/pubkeys:/pubkeys \ --net=host antoniomika/sish:latest \ --ssh-address=:22 \ --http-address=:80 \ --https-address=:443 \ --https=true \ --https-certificate-directory=/ssl \ --authentication-keys-directory=/pubkeys \ --private-key-location=/keys/ssh_key \ --bind-random-ports=false
После этого можно просто пробрасывать порты как через обычный SSH. Но это можно было бы делать и так, а ты лучше посмотри, что будет, если сделать некоторые настройки по инструкции в репозитории:
ssh -R xakep_ru:80:localhost:8080 your_domain.com
Оп — и http://xakep_ru.your_domain.com
будет прозрачно перенаправлен на твой локальный порт 8080! Само собой, одновременно может жить сколько угодно сессий.
Termshark
Termshark — это консольный фронтенд для tshark. Умеет, например, читать pcap или захватывать трафик в реальном времени, прямо как «взрослый» Wireshark.
Есть поддержка фильтров, можно автоматически собирать TCP-потоки из отдельных пакетов, просматривать содержимое пакетов в соответствии с протоколом.
Написан Termshark на Go и собирается под любую платформу — готовые билды уже доступны для Linux, Windows, BSD, Android (поверх Termux) и даже macOS!
Скрипты для SSH
Для SSH мы собрали сразу несколько полезных, да и просто интересных инструментов.
Для начала — уведомления в Telegram при SSH-авторизации. Мелочь, а приятно!
Установка проста как два рубля: скачиваем скрипт в /usr/local/bin/ssh2tg.sh
(или другую удобную папку), меняем настройки в скрипте (API-токен бота и ID чата, в который слать уведомления), вешаем атрибут исполнения и прописываем в конец /etc/pam.d/sshd
следующую строку:
session optional pam_exec.so type=open_session seteuid /usr/local/bin/ssh2tg.sh
Вторым покажу тебе маленького агента SSH Attack Stats, который выведет оперативную сводку атак на твой сервер.
Скрин взят из репозитория с программой
После установки можно малость кастомизировать вывод. К примеру, следующая команда заставит показывать не больше пяти записей из логов SSH:
/usr/local/bin/log-stats ssh -c 5
Все пояснения есть в репозитории с программой.
asroute
Если ты инженер какого‑нибудь телеком‑оператора, то тебе регулярно приходится ковыряться с трассировкой, пингами и большими роутерами. Для тебя написали asroute — утилиту, которая позволяет к выводу traceroute
добавить информацию об ASN транзитных маршрутизаторов. На примере это выглядит так:
$ traceroute -a www.bhutan.gov.bt | asroute
traceroute to bhutan.gov.bt (202.144.128.217), 64 hops max, 52 byte packets
-> AS0 (Reserved)
-> *
-> BRESNAN-33588, US
-> LIGHTOWER, US
-> BRESNAN-33588, US
-> CHARTER-20115, US
-> TELIANET Telia Carrier, EU
-> *
-> NTT-COMMUNICATIONS-2914, US
-> DRUKNET-AS DrukNet ISP, BT
-> BTTELECOM-AS-AP Bhutan Telecom Ltd, BT
Установка пока доступна только для macOS, но зато делается одной командой.
$ brew install asroute
Asroute написан на Rust, так что теоретически может быть без проблем скомпилирован под любую другую платформу, но на момент написания статьи у меня при себе есть только комп с Windows, у которого с компиляцией нетрадиционного кода есть известные трудности.
Outrun
Гвоздь программы — скрипт outrun, который позволяет запросто вынести вычисления за пределы слабого тонкого клиента на мощный удаленный сервер, причем наличие требуемой утилиты на удаленном хосте совсем не обязательно. Единственное, что нужно для работы, — установленный outrun на обоих хостах (и на локальном, и на удаленном), причем с наличием прав root (используется chroot).
Как самый очевидный пример (приведенный даже авторами outrun) — можно запустить локальный видеоконвертер, вроде FFmpeg, с использованием ресурсов сервера. На гифке заметна весьма значительная разница во времени выполнения.
Установить можно прямо из pip
.
pip3 install outrun
Потом можно запустить требуемую команду на удаленной машине:
outrun srv4.local neofetch
Файловая система будет доступна, будто локальная, и результаты работы команды (если есть) тоже будут записаны в текущую папку на локальном компе.
ВЕБ
Webify — транслируем вывод консоли
С помощью Webify можно вывод практически любой команды транслировать как веб‑сервис. Хорошее решение для простого шеринга консоли: ты запускаешь Webify со своим сервисом, а другой человек расчехляет браузер (или curl) и взаимодействует с твоим приложением.
tmpmail
Этот скрипт — отличный способ получить временный почтовый ящик прямо из терминала. Если ты читаешь «Хакер» — мне, очевидно, не нужно пояснять, что это такое и зачем нужно, так что перейдем сразу к установке.
$ sudo dnf install jq curl w3m $ wget https://raw.githubusercontent.com/sdushantha/tmpmail/master/tmpmail $ chmod +x tmpmail
Генерируем ящик:
$ ./tmpmail --generate qpasixkauet@1secmail.net
Проверяем почту:
./tmpmail --recent
ZeroSSL
Ты ведь тоже думал, что бесплатные SSL-сертификаты можно получить только у Let’s Encrypt? Уже нет! Ребята из ZeroSSL выкатили альтернативный сервис, где можно получить все те же сертификаты на те же 90 дней. Использовать можно старый добрый ACME. Если по каким‑то причинам искал замену старичку Let’s Encrypt — вот она.
Процедура выпуска совсем нехитрая: просто указываешь почту и пароль и подтверждаешь владение доменом через DNS или загрузкой на него заданного файла. Через несколько минут сайт сгенерирует твой сертификат и предложит его скачать, а что делать дальше — не мне тебя учить.
TestTLS
testtls.com — это очередной сервис для проверки SSL/TLS, аналог SSLLabs.
С его помощью можно легко проверить, правильно ли настроен HTTPS на твоем (или чужом) сайте.
Полезные сайты и сервисы
Вот еще несколько ссылок, которые не входят в категорию утилит командной строки, но могут оказаться полезными.
Public API
Public API — сайт, на котором собрана информация о публичных интерфейсах самых разных сервисов и ссылки на документацию. Может пригодиться в самых разных случаях — от маркетинга до OSINT.
GitExplorer
GitExplorer — хорошая интерактивная шпаргалка по Git.
Grep.app
Теперь можно грепнуть по всему GitHub нужное нам вхождение прямо из браузера. Пригодится для поиска секретов при пентесте (или на программе bug bounty) или флагов от CTF, например.
Authenticator
Если ты пользуешься двухфакторной аутентификацией — тебе явно приятно было бы иметь ключи для входа под рукой, а не в телефоне, который еще найти надо. Плагин Authenticator для Chrome, Firefox и Microsoft Edge умеет генерировать коды для 2FA прямо в браузере. Также делает бэкап с шифрованием на Google Drive, Dropbox или OneDrive. Поддерживает классические TOTP и HOTP, а еще Steam Guard и Blizzard Authenticator, на случай, если ты пользуешься этими площадками.
Free for Dev
Free for Dev — подборка бесплатных сервисов, которые могут быть полезны для разработчиков. Разумеется, не все они бесплатны, но везде указан срок или лимит бесплатного использования, которого почти всегда более чем достаточно для личного использования или тестов.
ИТОГИ
Конечно, ты можешь сказать, что легко прожить без всего этого, а рутинные задачи автоматизировать самописными скриптами. Но зачем, если есть готовые отлаженные инструменты, которые бесплатно улучшат твою работу и сэкономят время и нервы? Хакер — он на то и хакер, что может сделать свое рабочее место лучше, чем у других.