목록Write-up (52)
또 뭐하지
풀이문제파일을 실행해보고 아무거나 입력을 해보았다. IDA를 통해 문제파일을 열어서 바이너리에 포함된 문자열을 확인했다. Compar3_the_str1ng이 의심스럽지만, 일단 Wrong에 반대되는 Correct를 찾았다. 이게 어떻게 출력되는지 찾으면 원하는 문자열을 찾을 수 있을 것 같다. 단축키 'x'를 통해서 Correct가 참조되는 함수를 확인했다. 단축키 'F5'를 통해서 해당 부분을 디컴파일 해보았다. 디컴파일된 코드가 나왔다. 여기서 sub_7FF7C5CF1000 함수의 결과에 따라서 Correct 또는 Wrong이 출력되는 것을 확인할 수 있다. 그럼 이제 sub_7FF7C5CF1000를 확인해봤다. Compar3_the_str1ng과 입력값을 비교해서 같은지 확인하고 있다. 원하는 문..
풀이제공된 문제파일에는 암호화된 플래그 파일 flag.txt와 공개키 파일 public_key.pem이 포함되어 있다. RSA-wiener에 대한 내용은 아래 글을 참고하였다.https://dokhakdubini.tistory.com/289 [RSA] RSA 공격법RSA 공격법 CTF에서 크립토문제로 생각보다 자주 출제되는 RSA 이다. 크게 분류하면 적절하지 못한 소수를 택한 경우 / 구조상 문제로 나뉜다. 0. 개인키 유출 p, q, ϕ(n), d 중 단 하나라도 노출된다면dokhakdubini.tistory.comWiener attack은 RSA 암호에서 공개된 큰 모듈러스 n과 비교적 작은 비밀 지수 d를 가진 경우, 연속된 분수를 사용하여 d를 추정하는 공격 방법이라고 한다. 블로그 글에 나온..
풀이 문제 페이지에 들어가면 위와 같은 화면이 나온다. #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver from selenium.webdriver.chrome.service import Service import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): co..
풀이 문제 페이지에 접속하면 위와 같다. #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver from selenium.webdriver.chrome.service import Service import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): cookie.upd..
풀이 문제 페이지에 접속하면 위와 같은 화면을 확인할 수 있다. #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver from selenium.webdriver.chrome.service import Service import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}..
풀이 #!/usr/bin/python3 from Crypto.Util.number import getStrongPrime, bytes_to_long, inverse class RSA(object): def __init__(self): self.p = getStrongPrime(512) self.q = getStrongPrime(512) self.N = self.p * self.q self.e = 0x10001 self.d = inverse(self.e, self.N - self.p - self.q + 1) def encrypt(self, pt): return pow(pt, self.e, self.N) def decrypt(self, ct): return pow(ct, self.d, self.N) rsa ..
풀이 CRT (중국인의 나머지 정리, Chinese Remainder Theorem) - 정수론에서 중요한 정리 중 하나 - 소수로 나눈 나머지 연산에서 유용하게 사용 제공된 문제 파일을 살펴보면 prob.py와 output.txt 파일이 있다. prob.py는 flag를 정수로 변환하고, CRT를 적용할 수 있도록 3개의 소수와 이를 이용한 연립합동식을 생성하는 코드이다. output.txt는 prob.py 코드의 실행결과이다. 위 코드를 수식으로 바꿔보면 flag = c1 (mod p1) flag = c2 (mod p2) flag = c3 (mod p3) 이다. from sympy.ntheory.modular import solve_congruence from Crypto.Util.number imp..
풀이 문제 페이지에 접속하면 위와 같이 나온다. #!/usr/bin/python3 from flask import Flask, request, render_template, g import sqlite3 import os import binascii app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' DATABASE = "database.db" if os.path.exists(DATABASE) == False: db = sqlite3.connect(DATABASE) db.execute('create table users(userid c..