Forwarded from Alexey Kirillov
CTF 2023
В скрипте видим, что шифрование симметричное, в
Проблема во времени генерации "гаммы": в массив кладётся по 8 байт, которые являются результатом тяжёлых вычислений в цикле.
Представим
тогда
Воспользуемся
Перепишем
Для степени из условия этого недостаточно, но мы видим, что само произведение у нас сразу урезается делением по модулю, поэтому используем алгоритм быстрого возведения в степень по модулю. Остаётся добавить заменённый код и запустить расшифровку.
В скрипте видим, что шифрование симметричное, в
generate_gamma генерируется массив по размеру шифруемого/расшифровываемого файла и xor'ится с ним.Проблема во времени генерации "гаммы": в массив кладётся по 8 байт, которые являются результатом тяжёлых вычислений в цикле.
Представим
n1 и m1 в виде последовательности f:f[0] = 0, f[1] = 1, f[i] = u * f[i-1] - v * f[i-2]тогда
m1 для n будет f[n+2].Воспользуемся
wolframalpha и постараемся упростить (первый скриншот). Подставим a, b, x, y из файла задания, корни сократились до единицы, а в вычислении теперь участвуют только степень и параметры a и x.Перепишем
m1 * n1 в виде со второго скриншота, и подставим a и x. Получим (13 ** i - 12 ** i) * (113 ** i - 112 ** i).Для степени из условия этого недостаточно, но мы видим, что само произведение у нас сразу урезается делением по модулю, поэтому используем алгоритм быстрого возведения в степень по модулю. Остаётся добавить заменённый код и запустить расшифровку.
Forwarded from Сергей Руденко ☭Серп☭
Элементарно, Ватсон! на С#
string str1 = "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";
for(int q=12; q<40; q = q + 4)
{
string str = "";
Console.WriteLine(q);
int first = q / 4;
for(int i = 0; i < first; i++)
{
for (int z = i; z < str1.Length; z = z + q)
{
str += str1[z];
}
}
for (int i = ((q/2)+(first-1)); i >= first ; i--)
{
for (int z = i; z < str1.Length; z = z + q)
{
str += str1[z];
}
}
for (int i =(q / 2) + first; i < q; i++)
{
for (int z = i; z < str1.Length; z = z + q)
{
str += str1[z];
}
}
for (int g = 0; g < str.Length; g++)
{
string ch = "";
if (str[g].ToString() == "t")
{
ch += str[g];
if (str.Length > g + 4)
{
if (str[g + 1].ToString() == "c")
{
ch += str[g + 1];
if (str[g + 2].ToString() == "t")
{
ch += str[g + 2];
if (str[g + 3].ToString() == "f")
{
ch += str[g + 3];
for (int t = 4; t < 50; t++)
{
ch += str[g + t];
}
Console.WriteLine(g.ToString() + "" + ch);
Console.ReadKey();
}
}
}
}
}
}
}🤡5
Forwarded from Кобяков Сергей
Ватсон
По схеме шифрования понимаем, что это модификация сциталы. Расшифровываем через онлайн декодер (https://www.dcode.fr/scytale-cipher). Получаем почти читаемый текст. Флаг из него не подходит, но это ожидаемо, потому что в этой схеме 2 цилиндра, а не один. Видим, что декодер расшифровал это с 32 буквами на виток, а значит нам на 2 цилиндра надо меньше. В шифротексте 864 символа, значит следующий меньший делитель после 32 будет 27. Разобьем недорасшифрованный текст по 27 символов. Видим начало флага
По схеме шифрования понимаем, что это модификация сциталы. Расшифровываем через онлайн декодер (https://www.dcode.fr/scytale-cipher). Получаем почти читаемый текст. Флаг из него не подходит, но это ожидаемо, потому что в этой схеме 2 цилиндра, а не один. Видим, что декодер расшифровал это с 32 буквами на виток, а значит нам на 2 цилиндра надо меньше. В шифротексте 864 символа, значит следующий меньший делитель после 32 будет 27. Разобьем недорасшифрованный текст по 27 символов. Видим начало флага
tctf{Cr1 и пытаемся найти продолжение для него на других строках. Долго искать не пришлось, потому что оно было на предыдущей строке👍3👏2
Forwarded from Michael Andersen
Лига новичков, задача Человек-Жук.
На сайте каждый note можно получить по его индексу, но некоторые репортажи зашифрованы в архивы. Посмотрел первые 20 записей по id, среди которых был пользователь petya.parkin, который публиковал незашифрованные репортажи про человека-жука. Но один из его репортажей все же был зашифрован (под индексом 10, https://t-bugman-18kk0hkv.spbctf.net/note/10). Я скачал этот архив и сегодня ночью ставил его на перебор. 6 часов, не перебрал.
Потом решил исходник разобрать, посмотрел как работает сайт скопировал себе генератор паролей для архивов. Он оказался уязвимым, я создал 100 млн паролей по такому же алгоритму и у них у всех первая буква была одна из 5 конкетных, вторая из 8, третья из 20, четвертая из 16 ну и дальше примерно по смыслу. А сам пароль всего из 8 символов. Благодаря этому количество перебора сократилось до 168 млн комбинаций, я сделал следующую маску для john-the-ripper и он уже перебрал все пароли. В архиве лежал адрес на веб-страницу с флагом.
Маска для джона:
На сайте каждый note можно получить по его индексу, но некоторые репортажи зашифрованы в архивы. Посмотрел первые 20 записей по id, среди которых был пользователь petya.parkin, который публиковал незашифрованные репортажи про человека-жука. Но один из его репортажей все же был зашифрован (под индексом 10, https://t-bugman-18kk0hkv.spbctf.net/note/10). Я скачал этот архив и сегодня ночью ставил его на перебор. 6 часов, не перебрал.
Потом решил исходник разобрать, посмотрел как работает сайт скопировал себе генератор паролей для архивов. Он оказался уязвимым, я создал 100 млн паролей по такому же алгоритму и у них у всех первая буква была одна из 5 конкетных, вторая из 8, третья из 20, четвертая из 16 ну и дальше примерно по смыслу. А сам пароль всего из 8 символов. Благодаря этому количество перебора сократилось до 168 млн комбинаций, я сделал следующую маску для john-the-ripper и он уже перебрал все пароли. В архиве лежал адрес на веб-страницу с флагом.
Маска для джона:
-mask='[M, N, O, Y, Z][2, D, G, T, W, j, m, z][A, B, E, F, I, J, M, N, Q, R, U, V, Y, Z, c, d, g, h, k, l][0, 1, 2, 3, 4, 5, h, i, j, k, l, m, w, x, y, z][M, N, O, Y, Z][2, D, G, T, W, j, m, z][A, B, E, F, I, J, M, N, Q, R, U, V, Y, Z, c, d, g, h, k, l][0, 1, 2, 3, 4, 5, h, i, j, k, l, m, w, x, y, z]'👍6👏1
Forwarded from S
Задача про землекопов лига опытных.
Открываем в режиме разработчика бразуер. Смотрим сеть.
Видим там запрос, раскрываем его и через курл тыкаем
curl -X PUT https://site.ctfapi/cloner/{id} -H "Content-Type: application/json" -d '{"config": {"count": 1000000}}'
Оно не срабатывает, подбираем количество каунтов опционально.
Как то так, вроде ничего не перепутал, но смысл точно тот.
Не записывал к сожалению решение(
Открываем в режиме разработчика бразуер. Смотрим сеть.
Видим там запрос, раскрываем его и через курл тыкаем
curl -X PUT https://site.ctfapi/cloner/{id} -H "Content-Type: application/json" -d '{"config": {"count": 1000000}}'
Оно не срабатывает, подбираем количество каунтов опционально.
Как то так, вроде ничего не перепутал, но смысл точно тот.
Не записывал к сожалению решение(
Forwarded from VRN
Гипнолуч
Скачиваем исходники на go и видим что с именем dr.cosmodinamikov не удастся зарегистрироваться. Пробуем им войти и использую это имя и как пароль. Внутри читаем прикольные комменты тех, кто побывал тут до тебя 😁👍
Скачиваем исходники на go и видим что с именем dr.cosmodinamikov не удастся зарегистрироваться. Пробуем им войти и использую это имя и как пароль. Внутри читаем прикольные комменты тех, кто побывал тут до тебя 😁👍
😱5👎3😁1
Forwarded from thxStuck
к доменному имени через / добавляем docs
https://t-bugman-18kk0hkv.spbctf.net/docs
мы переходим на FastApi
Тут у нас есть все Get и Post запросы сайта
😱5👍1
Forwarded from thxStuck
Видим /bugman-photos-stash-20240328
Нажимаем на него и тыкаем Try it out -> Execute
Forwarded from thxStuck
Получаем html code. Отсюда уже можно взять флаг, но мы обязаны увидеть картинку))