[NeoQuest2017] 6 планета или «Слишком много всего…»

в 9:42, , рубрики: ctf, neoquest, nq2017, информационная безопасность

Есть мнение, что после драки кулаками не машут.
Но первый в моей жизни ctf NeoQuest2017 показал, что бумажная ИБ от практической отличается достаточно сильно и с ходу флаги взять не получится. Хотя, как оказалось, подобрался я к флагу в плотную.
Итак:

«СЛИШКОМ МНОГО ВСЕГО…»
Эта планета напоминает тропики… Невероятное количество разнообразной флоры и фауны! Наши рюкзаки все заполнялись и заполнялись образцами, а журналы наблюдений – описаниями, а ведь мы только начали исследование планеты! Оглядевшись вокруг, мы поняли, что гораздо эффективнее будет заносить все сведения удаленно сразу в бортовой журнал. Вот только передача данных очень медленная, поэтому нужно грамотно расставить приоритеты.


Пробуем зайти посмотреть журнал по ссылке и получаем:

This page is under construction

Еще раз перечитываем текст задания и замечаем подсказку:

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

Первую половину дня я убил, думая, что разговор идет про поля HTTP запроса: Accept-Charset, Accept-Encoding, Accept-Language, Accept и т.д. Оказалось нет.
Дальнейшие поиски показали, что сервер поддерживает HTTP/2. А одно из разрекламированных его нововведений это именно приоритизация запросов.
Ищем что нибудь, с помощью чего можно менять приоритет и находим nghttp.

Пробуем

root@kali:~# nghttp -p 3 -v 213.170.100.212
[ 0.055] Connected
The negotiated protocol: h2
[ 0.166] send SETTINGS frame <length=12, flags=0x00, stream_id=0>
(niv=2)
[SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100]
[SETTINGS_INITIAL_WINDOW_SIZE(0x04):65535]
[ 0.167] send PRIORITY frame <length=5, flags=0x00, stream_id=3>
(dep_stream_id=0, weight=201, exclusive=0)
[ 0.167] send PRIORITY frame <length=5, flags=0x00, stream_id=5>
(dep_stream_id=0, weight=101, exclusive=0)
[ 0.168] send PRIORITY frame <length=5, flags=0x00, stream_id=7>
(dep_stream_id=0, weight=1, exclusive=0)
[ 0.168] send PRIORITY frame <length=5, flags=0x00, stream_id=9>
(dep_stream_id=7, weight=1, exclusive=0)
[ 0.169] send PRIORITY frame <length=5, flags=0x00, stream_id=11>
(dep_stream_id=3, weight=1, exclusive=0)
[ 0.169] send HEADERS frame <length=38, flags=0x25, stream_id=13>
; END_STREAM | END_HEADERS | PRIORITY
(padlen=0, dep_stream_id=11, weight=3, exclusive=0)
; Open new stream
:method: GET
:path: /
:scheme: https
:authority: 213.170.100.212
accept: */*
accept-encoding: gzip, deflate
user-agent: nghttp2/1.18.1
[ 0.232] recv SETTINGS frame <length=18, flags=0x00, stream_id=0>
(niv=3)
[SETTINGS_MAX_CONCURRENT_STREAMS(0x03):100]
[SETTINGS_INITIAL_WINDOW_SIZE(0x04):65536]
[SETTINGS_MAX_FRAME_SIZE(0x05):16384]
[ 0.233] recv WINDOW_UPDATE frame <length=4, flags=0x00, stream_id=0>
(window_size_increment=196605)
[ 0.233] recv SETTINGS frame <length=0, flags=0x01, stream_id=0>
; ACK
(niv=0)
[ 0.233] recv (stream_id=13) :status: 200
[ 0.234] recv (stream_id=13) etag: «21-58a4a130-a2bf2»
[ 0.234] recv (stream_id=13) last-modified: Wed, 15 Feb 2017 18:42:56 GMT
[ 0.234] recv (stream_id=13) content-type: text/html
[ 0.234] recv (stream_id=13) content-length: 33
[ 0.234] recv (stream_id=13) accept-ranges: bytes
[ 0.235] recv (stream_id=13) date: Mon, 20 Mar 2017 12:01:24 GMT
[ 0.235] recv (stream_id=13) server: NQ-webserver
[ 0.235] recv HEADERS frame <length=96, flags=0x04, stream_id=13>
; END_HEADERS
(padlen=0)
; First response header
This page is under construction
[ 0.236] recv DATA frame <length=33, flags=0x00, stream_id=13>
[ 0.236] recv DATA frame <length=0, flags=0x01, stream_id=13>
; END_STREAM
[ 0.236] send GOAWAY frame <length=8, flags=0x00, stream_id=0>
(last_stream_id=0, error_code=NO_ERROR(0x00), opaque_data(0)=[])

И на этом мой энтузиазм иссяк. На тот момент флаг этот еще никто взять не смог. Потыкав наугад пару различных значений приоритета, и не попав в нужный, я решил, что опять выбрал ложный путь и перешел к следующему заданию.
Как оказалось всего то надо было сделать перебор по всем возможным значениям:

!/bin/bash
until [$i -eq 256]
do
let "i=i+1"
nghttp  -p $i https://213.170.100.212/
done 
exit 0

Получаем:

root@kali:~# ./123
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
BB
14
7E
F9
2D
66
4D
52
18
14
0A
16
AD
3F
C5
03
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction
This page is under construction

Вводим полученный флаг на сайте и видим:

Ключ принят (время квеста истекло)

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

Автор: alsebr

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js