CTF Writeup 39

AmateursCTF 2023 - flagchecker Writeup

퍼블 딴 문제 스크래치 문제인데 나름 재밌었다. 더러운 코드들이 보인다. 실행해보면 플래그를 입력하라 하고 zz 플래그가 틀리면 화낸다. 일단 분석을 위해 모든 변수, 리스트, 함수이름을 바꿔준다. 먼저 기본 변수 및 리스트 초기화를 해주는데, var26이 0임을 계속 생각하면 좋다. (상수 역할) the_ball object 에 flag를 list2에 입력받고 check 신호를 보낸다. 이후 배경 오브젝트 에서 check 신호를 받는다. list2 값들을 list1에 넣고 check2 신호를 보낸다. 분석하기 귀찮으니 동적분석 check2 신호를 받는 core object 코드를 살짝 떼놓고 실행해본다. list1 과 list2를 화면에 띄우고 abcd1234를 입력해보면 그냥 통상적인 encode 임..

CTF Writeup 2023.07.19

zer0ptsCTF 2023 - decompile_me Writeup

간단해보이는 문제인데, 약간의 함정을 파놨다. 먼저 RC4_setkey 로 넘기는 key와 sbox는 사용하는 척 사용 안한다. 위처럼 매개변수를 사용하지 않는다. memcmp 도 직접 구현하였고, 매개변수로 넘긴 data를 사용 안하고 다른 값과 비교한다. encrypt 함수는 아래와 같고 sbox는 아래와 같이 고정되는데, 를 통해 추출한다. 정연산 역연산: Flag : zer0pts{d0n'7_4lw4y5_7ru57_d3c0mp1l3r}

CTF Writeup 2023.07.19

zer0ptsCTF 2023 - mimikyu Writeup

문제 바이너리와 두 개의 라이브러리 파일을 준다. strip 되지 않았다. mimikyu main 을 보자 일단 flag 길이가 40자인 것은 알 수 있다. ResolveModuleFunction 일부: 매개변수로 받은 값이 해시값이고, 해시값을 통해 특정 라이브러리의 특정 함수를 호출하는 것을 알 수 있다. LoadLibrary 후 ResolveModuleFunction 에 라이브러리와 해시값을 넘겨 원하는 함수를 호출하는 것을 유추할 수 있다. 실제로 call 하는 곳에 브포 걸고 확인하면 라이브러리 내의 함수를 호출한다. 첫 ResolveModuleFunction 호출은 gmpz_init 임을 알 수 있다. (r10) 브포걸고 계속 continue 해서 호출되는 함수들을 확인한다. srand 로 시..

CTF Writeup 2023.07.19

zer0ptsCTF 2023 - fvm Writeup

vm 문제로 보인다. 여러 vm 문제를 풀어보면서 터득한 루틴이 있다. instruction 분석 disassembler 간단 제작 후 전체 코드 뽑아보기 동적 실행으로 조건문/반복문 판별하며 흐름 분석 각 instruction 들이 모인 코드 덩이들의 목적이나 역할 분석 - 함수화 정연산 짜기 복호화 코드 짜기 1. instruction 분석 모든 연산을 fpu 위에서 한다. fpu 에 대해 아예 몰랐었는데, 이번에 많이 알게 되었다. 먼저 fpu 는 8개의 st register를 stack 구조로 관리한다. 그리고 top 을 이동시키며 push/pop 을 구현하기 때문에 8번 push/pop 하면 제자리로 돌아오게 된다. 예를 들어보자면 위 그림과 같다. top 을 기준으로 st0 부터 st1 st2..

CTF Writeup 2023.07.18

2023 Codegate UNIV division writeup

some of Reversing chall 1. BackTo1986 - Reversing ( 839 p ) 커널 파일이 주어진다. gunzip initramfs.cpio.gz mkdir tmp && cd tmp cpio -idmv < ../initramfs.cpio main 바이너리가 주어진다. qemu로 start.sh 명령을 실행시키면 다음 화면이 뜬다. qemu-system-x86_64 -kernel ./bzImage -initrd ./initramfs.cpio.gz -vga std --append "console=ttyS0 console=tty0" 블록을 깨는 핑퐁게임임을 알 수 있다. 바이너리를 분석해보자. 문자열로 유추할 수 있는 함수부터 살펴보면 UI를 그려주는 함수임을 알 수 있다. 이 함..

CTF Writeup 2023.06.18

2022 Incognito CTF Writeup

1. Mic Check Flag : INCO{L3t's_G0!!} 2. Forensic 1) Bondee 주어진 jpg 파일에 비밀번호로 추정되는 문자열과 하단부에 PK 포맷 파일이 있다. 해당 비밀번호로 zip 파일 압축 해제하면 pdf 파일이 존재한다. Ctrl + A 로 전체 선택해보면 하단에 안 보이는 글자가 있음을 알 수 있고, 이를 복사하여 확인하면 파이썬 코드가 나온다. number_list = [73, 78, 67, 79, 123, 105, 110, 99, 111, 95, 115, 119, 108, 117, 103, 95, 50, 48, 50, 51, 125] text_list = [] for i in range(len(number_list)): text_list.append(chr(num..

CTF Writeup 2023.03.26

2023 ACSC CTF Writeup - warmup + ngo

24문제 중 6문제 풀었다. 웜업 문제를 푼 다음 easy-ssti를 보다가, 깃헙 소스를 다 뒤져도 방법이 없어보여서 포기하고 다음 날 ngo를 풀었다. 1. Merkle Hellman #!/usr/bin/env python3 import random import binascii def egcd(a, b): if a == 0: return (b, 0, 1) else: g, y, x = egcd(b % a, a) return (g, x - (b // a) * y, y) def modinv(a, m): g, x, y = egcd(a, m) if g != 1: raise Exception('modular inverse does not exist') else: return x % m def gcd(a, b):..

CTF Writeup 2023.02.26

2022 Iris CTF

일요일 잠깐 시간내서 씨텦 참여 metacalc - __lookupGetter__('__proto__').constructor 를 통한 RCE Nonces and Keys - 첫 블록의 원문이 파일 시그니처임을 이용한 IV 구하기 1. metacalc (Web) metacalc 라는 node module 에서 RCE 취약점을 찾는 건데, 약간의 코드 패치가 이루어졌다. 아래는 metacalc/lib/sheet.js 이다. 'use strict'; const metavm = require('metavm'); const wrap = (target) => new Proxy(target, { get: (target, prop) => { if (prop === 'constructor') return null; +..

CTF Writeup 2023.01.08