Unpwnable shop - PascalCTF-2025 - Pwn
1 Исходные данные
Описание
You can try to pwn us, but my cousin already tried it and he says it’s impossible!
Файлы
task.zip
Описание
You can try to pwn us, but my cousin already tried it and he says it’s impossible!
Файлы
task.zip
Описание
I’ve recently started studying a new cooking book and I think I’ve found the best recipe ever.
Do you wanna read it? Ask my dear friend DNS!
Файлы
capture.pcapng
Описание
My friend Marco recently dived into studying bitwise operators, and now he’s convinced he’s invented pseudorandom numbers!
Could you help me figure out his secrets?
Файлы
mind-blowing.py
TCP сервер
0.0.0.0:420
Описание
Alice and Bob are playing a fun game, can you guess Alice’s favourite number too?
Файлы
my-favourite-number.py
output.txt
Содержимое файла my-favourite-number.py
:
from Crypto.Util.number import getPrime,bytes_to_long
import os
FLAG = os.environ["FLAG"]
assert FLAG.startswith("pascalCTF{")
assert FLAG.endswith("}")
e = 65537
alice_p, alice_q = getPrime(1024), getPrime(1024)
alice_n = alice_p * alice_q
print(f"hi, i'm Alice, my public parameters are:\nn={alice_n}\ne={e}")
def sendToAlice(msg):
pt = bytes_to_long(msg.encode())
assert pt < alice_n
ct = pow(pt, e, alice_n)
print(f"bob: {ct}")
bob_p, bob_q = getPrime(1024), getPrime(1024)
bob_n = bob_p * bob_q
print(f"hi Alice! i'm Bob, my public parameters are:\nn={bob_n}\ne={e}")
def sendToBob(msg):
pt = bytes_to_long(msg.encode())
assert pt < bob_n
ct = pow(pt, e, bob_n)
print(f"alice: {ct}")
alice_favourite_number = bytes_to_long(FLAG.encode())
assert alice_favourite_number < 2**500
sendToBob("let's play a game, you have to guess my favourite number")
upperbound = 2**501
lowerbound = 0
while upperbound - lowerbound > 1:
mid = (upperbound + lowerbound) // 2
sendToAlice(f"Is your number greater than {mid}?")
if alice_favourite_number > mid:
sendToBob(f"Yes!, my number is greater than {mid}")
lowerbound = mid
else:
sendToBob(f"No!, my number is lower or equal to {mid}")
upperbound = mid
sendToAlice(f"so your number is {upperbound}?")
assert upperbound == alice_favourite_number
sendToBob("yes it is!")
sendToAlice("that's a pretty cool number")
Функция sendToAlice
:
alice_p, alice_q = getPrime(1024), getPrime(1024)
alice_n = alice_p * alice_q
print(f"hi, i'm Alice, my public parameters are:\nn={alice_n}\ne={e}")
def sendToAlice(msg):
pt = bytes_to_long(msg.encode())
assert pt < alice_n
ct = pow(pt, e, alice_n)
print(f"bob: {ct}")
Числа alice_p
, alice_q
приватные.
Числа Nalice_
, alice_e
публичные.
Используя функцию sendToAlice
Боб может зашифровать сообщение для Алисы, зная публичными параметры alice_N
, alice_e
.
Расшифровать это сообщение может тоолько Алиса. Боб не сможет расшифровать т.к. не знает alice_p
, alice_q
.
Иногда в целях отладки хочется посмотреть содержимое https трафика.
Например, клиент с помощью cURL
взаимодействует с публичный API сервера.
Но иногда что-то идет не так. Клиент не получает ответ, хотя сервер залогировал, что запрос был успешно выполнен и ответ был отправлен. Выглядит что где-то среди различных проксей и различных подсетей что-то теряется.
В этом случае можно попробовать записать сетевую активность между клиентом и сервисом в разных местах, расшифровать данные, сопоставить запросы и ответы и проверить не потерялось ли что-то.
Advent of Code 2024 успешно завершился!
Каждый день с 1 по 25 декабря открывались по 2 задачи.
Обычно первая задача простая, для понимания всех условий задачи.
Вторая - более сложная, с измененными условиями так, что решение из первой задачи уже не подходит и приходится сильно оптимизировать алгоритм решения или использовать совершено другой подход.
Первая половина заданий была относительно простой, в то время как для решения финальных задач потребовались подсказки.
В целом, это была отличная возможность вспомнить алгоритмы.
Для изучения ассемблера предлагается создать простой веб-сервер, который будет эмулировать базу данных key-value.
GET /{key}
- получить значение по ключу key
.POST /{key}
- сохранить значение из тела запроса по ключу key
.Т.к. писать код на ассемблере сложно и недостаточно комфортно, то допустимы упрощения.
Padding Oracle Attack — это криптографическая атака, которая эксплуатирует механизм паддинга в некоторых схемах шифрования, таких как CBC (Cipher Block Chaining), использующий симметричное шифрование, например AES. Она позволяет злоумышленнику расшифровывать или изменять данные, не зная ключа шифрования.
С помощью этой атаки можно:
Завершился челендж ежедневного решения задач на LeetCode на протяжении года (за исключением отпусков).
За год решил 707 задач. Из них: 261 - легкий уровень, 365 - средний уровень, 81 - сложный уровень.
В основном решал ежедневные задачи и среди “избранных” тем. Самые интересные темы: Trie, Dynamic Programming, Design.
Почти все задачи решены на языке C++.
Пробовал решать на Go. Go не подходит для алгоритмических задач, слишком ограничен. Язык C++ поддерживает намного больше концепций, позволяющих решить задачу более красиво и оптимальнее.
Решал задачи для подготовки к алгоритмическим секциям на интерью. Все секции успешно пройдены.
Больше не планирую заниматься решением задач на алгоритмы. Если хочется что-то порешать, то лучше попробовать CTF задачи. Это намного практичнее и разнообразнее.
Мой профиль: amyasnikov - LeetCode Profile
Software Engineer
Ссылка на задачу
Прометей 2077
Описание
Греческие боги наносят ответный удар.
Они забрали у всех пользователей интернета эмодзи 🔥 и запечатали его в надёжной таблице Sacred
рядом с другими артефактами.
Герой с ником Prometheus решил выкрасть огонёк. Помогите ему и верните огонь в интернеты и переписки.
Форум
t-fire-oudjc9cv.spbctf.net
Исходный код форума
fire_64f7cd8.tar.gz
Ссылка на задачу
Галера
Описание
Аутстафф-компания заманила разработчиков интересными задачами, а потом заперла их на настоящей галере, приковала к вёслам и отправила в плавание.
Освободите команду.
Приложение программы корпоративной лояльности: Galera_be1756d.ipa
Приложение
galera.zip
Ссылка на задачу
Робошулер
Описание
В космопоездах беда: появился обаятельный андроид-шулер, который обыгрывает всех в наперстки и обирает до нитки
Совершите маленькую шалость — выиграйте у робошулера весь миллион монет, которые звенят в его карманах.
Android приложение
robotrickster.zip
Ссылка на задачу
Счастливый билетик
Описание
Талантливый разработчик хочет устроиться в бигтех, но боится неудачи. Он планирует съесть сто счастливых билетиков. И у него нет времени их искать, да и в кармане только 5000 ₽.
Заставьте терминал городского транспорта выдать ему пачку счастливых билетов — с равной суммой первых и последних трех цифр.
Терминал
t-luckyticket-w8mg6qr0.spbctf.ru
Исходный код терминала
luckyticket.tar.gz
Ссылка на задачу
crypto/ROSSAU
Описание
My friend really likes sending me hidden messages, something about a public key with n = 5912718291679762008847883587848216166109
and e = 876603837240112836821145245971528442417
.
What is the name of player with the user ID of the private key exponent? (Wrap with osu{})
Ссылка на задачу
crypto/base727
Описание
You: Write a program that encodes any string in base 727
ChatGPT: Here’s a Python program to encode any string into base 727
Файлы
base727.zip
Ссылка на задачу
crypto/no-dorchadas
Описание
i hate dorchadas!!!
Сервер
nc chal.osugaming.lol 9***
Файлы
server.py
Ссылка на задачу
Alice doesn’t know algebra
Описание
Alice took a long time to decide which exponent to choose when encrypting the key. In the end, she decided to use both…
Сложность
Medium
Сервер
62.173.***.***:11***