Ес­ли ты чита­ешь «Хакер» и до сих пор не разоб­рался с тем, что такое реверс‑шелл, то эта статья для тебя. Мы с самого начала раз­берем, что такое bind shell и reverse shell, и я на прос­тей­ших при­мерах покажу, как такие обо­лоч­ки орга­низо­вать.

Ког­да ты пред­став­ляешь себе хакера, в голову при­ходит кар­тина: он сидит в тем­ной ком­нате, натянув капюшон, кла­цает по кла­вишам и кри­чит, что он в сис­теме. Ник­то не дума­ет о том, что он пеш­ком будет ходить к ата­куемо­му компь­юте­ру и самос­тоятель­но что‑то там нажимать, вер­но?

Что­бы, как в кино, вык­рикнуть «Я в сис­теме!», нуж­но получить к ней уда­лен­ный дос­туп. В ход идет все: фишинг, вре­доно­сы, экс­плу­ата­ция уяз­вимос­тей, под­купы, моль­бы самос­тоятель­но ввес­ти коман­ды на компь­юте­ре. Этот этап мы здесь рас­смат­ривать не будем, а погово­рим о том, как, собс­твен­но, работа­ет этот самый уда­лен­ный дос­туп.

warning

Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

 

Шелл

Да­вай сна­чала пой­мем, что это вооб­ще за шелл такой. Любой ата­кующий заин­тересо­ван в том, что­бы получить поболь­ше все­го с ата­куемо­го компь­юте­ра. Украсть фай­лик в этом пла­не далеко не так инте­рес­но, как запус­тить коман­ду. Если есть воз­можность выпол­нять коман­ды от име­ни адми­нис­тра­тора, то компь­ютер пол­ностью в наших руках: можем читать любые дан­ные, незамет­но запус­кать прог­раммы, делать сним­ки камерой или даже управлять каким‑то под­клю­чен­ным обо­рудо­вани­ем, если такое име­ется.

По­это­му уда­лен­ное выпол­нение команд (remote command execution, RCE) обыч­но счи­тает­ся кри­тичес­кой уяз­вимостью, и получе­ние инте­рак­тивно­го тер­минала с воз­можностью выпол­нять коман­ды в сис­теме, как наибо­лее опас­ный слу­чай RCE, — это самый лакомый кусочек для хакера.

Шел­лом называ­ют прог­рам­мную обо­лоч­ку, которая пре­дос­тавля­ет интерфейс для вза­имо­дей­ствия поль­зовате­ля с опе­раци­онной сис­темой. Через шелл мож­но выпол­нять коман­ды, запус­кать прог­раммы, управлять фай­лами и про­цес­сами.

В Windows есть две такие коман­дные обо­лоч­ки — cmd.exe и powershell.exe, а в Linux их может быть сколь­ко угод­но. Самая рас­простра­нен­ная и при­сутс­тву­ющая в любом Linux — /bin/bash, но может быть /bin/sh (в сти­ле Unix), /bin/zsh (более сов­ремен­ная) и так далее.

С тех­ничес­кой точ­ки зре­ния шелл — это обыч­ный поль­зователь­ский про­цесс, который чита­ет коман­ды из вхо­да (stdin), обра­баты­вает их и выводит резуль­тат на выход (stdout) или сооб­щение об ошиб­ке — в Unix/Linux для это­го пред­назна­чен спе­циаль­но выделен­ный поток stderr.

В Linux есть понятие перенап­равле­ния потоков, и оно отлично упро­щает работу для ата­кующе­го. Если он может перенап­равить к себе стан­дар­тные потоки, то смо­жет поль­зовать­ся сис­темой, буд­то он физичес­ки сидит за нуж­ным компь­юте­ром.

Для Linux файл и сетевой сокет выг­лядят оди­нако­во: это прос­то источни­ки вво­да и вывода. Поэто­му шел­лу, по сути, все рав­но, обща­ется он с кла­виату­рой или с сетью.

Даль­ше в при­мерах я буду исполь­зовать /bin/bash, но все осталь­ные обо­лоч­ки устро­ены схо­жим обра­зом и раз­лича­ются либо реали­заци­ей, либо тон­костя­ми син­такси­са команд.

Но что­бы иметь воз­можность запус­кать коман­ды уда­лен­но, тре­бует­ся еще сетевое соеди­нение, через которое и будет про­исхо­дить обще­ние. Далее мы его рас­смот­рим.

 

Bind shell

Са­мый прос­той спо­соб уста­новить уда­лен­ное соеди­нение с компь­юте­ром — это запус­тить там прог­рамму, которая будет слу­шать порт и переда­вать получен­ные коман­ды про­цес­су с обо­лоч­кой.

На схе­ме вид­но сле­дующие три шага:

  1. На хос­те жер­твы запус­кает­ся сер­вер, который ожи­дает вхо­дящее соеди­нение.
  2. Ата­кующий ини­циирует сетевое соеди­нение с хос­том жер­твы.
  3. Жер­тва при­нима­ет вхо­дящее соеди­нение.

Та­кой спо­соб называ­ется bind shell. Про­ще все­го будет исполь­зовать ути­литу Netcat.

Netcat (nc) — это сетевая ути­лита для чте­ния и записи дан­ных через TCP- и UDP-соеди­нения. Она поз­воля­ет откры­вать сокеты, при­нимать вхо­дящие под­клю­чения, уста­нав­ливать исхо­дящие соеди­нения и переда­вать дан­ные меж­ду про­цес­сами и сетью. Бла­года­ря сво­ей прос­тоте и гиб­кости Netcat широко исполь­зует­ся для отладки сетевых сер­висов, тес­тирова­ния соеди­нений, переда­чи фай­лов, а так­же в задачах информа­цион­ной безопас­ности — в том чис­ле для орга­низа­ции bind shell и reverse shell.

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

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

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

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

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

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

    Подписаться

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