Наши продукты

Все продукты →
  • Подписка на «Хакер»

    Все статьи, архив, PDF выпуски и бонусы при покупке товаров

    6000₽ в год

    Подписаться
  • Предзаказ четвертого печатного выпуска «Хакера»

    лучшее август..ноябрь 2026

    2000₽

    Заказать
  • Третий печатный выпуск «Хакера»

    лучшие материалы мая..июля 2026

    2000₽

    Заказать
  • Печатный спецвыпуск №4.

    Лучшие материалы 2021-2022 годов

    2000₽

    Заказать
Ес­ли ты хочешь пен­тестить машины с Linux, но не до кон­ца понима­ешь тон­кости работы коман­дной обо­лоч­ки, эта статья — для тебя. В ней я объ­ясняю нюан­сы работы в Bash, которые важ­но знать каж­дому пен­тесте­ру.
 

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

Bash — это интер­пре­татор, который уме­ет выпол­нять пол­ноцен­ные скрип­ты из фай­лов и работать в виде коман­дной стро­ки. Он нужен для выпол­нения опе­раций с фай­лами, запус­ка прог­рамм и управле­ния служ­бами.

Ког­да мы исполь­зуем скрип­товый файл, скрипт Bash работа­ет как пол­ноцен­ная прог­рамма со сво­ими опе­рато­рами управле­ния и цик­лами. Единс­твен­ное отли­чие кода в том, что для запус­ка сто­рон­них ути­лит не нуж­но исполь­зовать допол­нитель­ные коман­ды и биб­лиоте­ки. Bash мак­сималь­но интегри­рован в ОС, поэто­му мы прос­то пишем наз­вание коман­ды и получа­ем резуль­тат. При­мер прос­того скрип­та:

# Шебанг указывает, какой интерпретатор использовать
#!/bin/bash
# Берем первый аргумент из строки запуска
TARGET=$1
# Запускаем утилиту ping
ping -c 2 $TARGET > /dev/null 2>&1

Сох­рани в файл pinger.sh и сде­лай его исполня­емым: chmod +x pinger.sh. Запус­ти коман­дой ./pinger.sh <ip>. Ядро сис­темы про­верит шебанг (пер­вую стро­ку, которая начина­ется с #!) и запус­тит скрипт через ассо­цииро­ван­ный интер­пре­татор. Что­бы гаран­тирован­но запус­тить с помощью Bash, вво­ди коман­ду bash pinger.sh <ip>. В этом слу­чае шебанг будет про­игно­риро­ван и скрипт при­нуди­тель­но выпол­нится в Bash.

Ин­терак­тивный режим — это обыч­ный REPL (read-eval-print loop — «цикл чте­ния, вычис­ления и вывода»). Написал коман­ду в тер­минале, он передал ее Bash, тот запус­кает нуж­ные ути­литы через fork и exec и воз­вра­щает резуль­тат.

Важ­но отде­лять нес­коль­ко режимов инте­рак­тивнос­ти. В обыч­ных усло­виях, ког­да у тебя открыт тер­минал с Bash пря­мо в опе­раци­онной сис­теме, он работа­ет в режиме TTY (Teletype). Это абс­трак­ция опе­раци­онной сис­темы для управле­ния вво­дом и выводом. С ее помощью тер­минал может отклю­чать показ сим­волов при вво­де пароля. Этот же режим поз­воля­ет работать с управля­ющим вво­дом. Нап­ример, MySQL при­нима­ет коман­ды поль­зовате­ля, воз­вра­щает резуль­тат и сно­ва ждет вво­да коман­ды.

 

Стабилизируем реверс-шелл

Ес­ли ты под­клю­чил­ся через реверс‑шелл, ввод‑вывод будет перенап­равлен на сетевой сокет, который не пре­дос­тавля­ет TTY. В таком режиме тебе дос­тупны коман­ды, которые не ждут вво­да и воз­вра­щают резуль­тат сра­зу. Не получит­ся редак­тировать файл через Vim или nano. Работать в таких усло­виях мож­но, но не очень ком­фор­тно. Нап­ример, исполь­зовать подоб­ные конс­трук­ции:

# Дописать свой код в чужой скрипт
echo 'evil code' >> backup.sh
# Переписать скрипт полностью
echo 'evil script' > backup.sh
# Заменить текст в конфиге с помощью sed
sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication yes/' /etc/ssh/sshd_config

Кро­ме неудобств в работе, есть высокая веро­ятность дис­коннек­та. Дос­таточ­но по при­выч­ке нажать Ctrl-C или запус­тить инте­рак­тивную коман­ду. Такой шелл счи­тает­ся нес­табиль­ным, его лег­ко потерять. Имен­но по этой при­чине в сооб­щес­твах хакеров и пен­тесте­ров исполь­зует­ся тер­мин «ста­били­зиро­вать». Име­ется в виду ста­били­зация не самого кон­некта, а имен­но тер­минала.

На этот слу­чай есть клас­сичес­кий обход — исполь­зовать псев­до-TTY в Python. Python уже дав­но есть в любой сис­теме, поэто­му трюк работа­ет поч­ти всег­да:

python3 -c 'import pty; pty.spawn("/bin/bash")'

Пос­ле соз­дания псев­до-TTY наж­ми Ctrl-Z, что­бы твой реверс‑шелл спря­тал­ся в фон, и вве­ди

stty raw -echo; fg

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии