간만에 휴식기에 풀었던 CTF 암호학 문제 라이트업을 아주 간단하게만 올려본다.1. Investigation> chall.sagefrom flag import flagassert len(flag) == 110 p = random_prime(2**100)q = random_prime(2**100)n = p * qRn = Zmod(n)SIZE = 4 M = GL(SIZE, Rn)def matrix_random(): while True: try : rands = [randint(0, n-1) for _ in range(SIZE ** 2)] Mat = M(rands) return Mat except : ..
뒤늦게 라이트업 쓰느라 사진 찍어둔게 하나도 없어서 운영진분들이 올려주신 깃허브 소스코드 참고해서 작성합니다... https://github.com/SSTF-Office/SamsungCTF 1. Investigation 문제 설명을 읽어보니 쿠키는 쓸데 없고 취약하다면서 AES 암호화를 이용하여 커스텀 제작한 세션을 만들었으니 자신은 이제 안전하다고 한다. 그리고 문제 풀이에 필요한 웹페이지를 제공해주었다. 들어가보면 다음과 같은 로그인 화면이 나온다. Register 버튼을 눌러도 관리자만이 계정을 추가할 수 있다면서 아무것도 되지 않았기 때문에 페이지 소스코드에 힌트를 남겨놓지 않을까 해서 살펴보았더니 아니나 다를까 게스트 계정에 대한 아이디/패스워드를 알려주고 있었다. 주어진 게스트 계정으로 로그인..
1. Investigation RSA-OAEP 가 너무 복잡해서 RSA-OOPS 라고 불리는 자신만의 RSA Original Optimal Padding Scheme 을 만들었다고 합니다. 접속 제공 정보 : nc 159.65.232.9 10333 이 CTF 에서는 특이하게 디스코드에서 운영진들이 각 문제에 대한 소스코드를 제공해주고 있어서 디스코드 서버에 접속해 별도로 받아와야 했습니다. >> challenge.py #!/usr/local/bin/python # # Polymero # # Imports from Crypto.Util.number import getPrime, inverse import os, random # Local imports with open('flag.txt', 'rb') as..
1. Investigation 문제에서 주어진 파일의 압축을 풀면 3 개의 파일이 나옵니다. >> app.py from flask import Flask, request, jsonify from flask.templating import render_template from navigation_system import calculatePointsInSpace, checkDestinationPoint from utils import generateLocation app = Flask(__name__) E = None Q, nQ = None, None P, nP = None, None FLAG = "HTB{--REDACTED--}" @app.route('/', methods=['GET', 'POST']) d..
1. Investigation >> source.py import os with open('super_secret_messages.txt', 'r') as f: SUPER_SECRET_MESSAGES = [msg.strip() for msg in f.readlines()] def deriveKey(key): derived_key = [] for i, char in enumerate(key): previous_letters = key[:i] new_number = 1 for j, previous_char in enumerate(previous_letters): if previous_char > char: derived_key[j] += 1 else: new_number += 1 derived_key.app..
1. Investigation >> chall.py from Crypto.Cipher import AES from Crypto.Util.Padding import pad import random import signal import subprocess import socketserver FLAG = b'HTB{--REDACTED--}' prefix = random.randbytes(12) key = random.randbytes(16) def encrypt(key, msg): msg = bytes.fromhex(msg) crypto = AES.new(key, AES.MODE_ECB) padded = pad(prefix + msg + FLAG, 16) return crypto.encrypt(padded)...