System Hacking (pwnable)/CTF Write-up 27

[Hacktheon] Hacktheon CTF pwn ( write - up )

2년만에 포스팅 ... 대학생 신분(대학부)로서는 처음으로 하는대회! 대학원생 형들 두분 / 새내기 친구 한명과 우수상 수상했습니다. 다만 문제의 대부분이 CCE 2021 예선 문제를 재탕한 경우가 많아서 아쉬웠네요. 규모로보나 상금으로보나 큰 대회였는데 .. PWNABLE 3 (SJ-004) 리턴 지향 프로그래밍 int __cdecl main(int argc, const char **argv, const char **envp) { int v4; // [rsp+Ch] [rbp-14h] BYREF char s[8]; // [rsp+10h] [rbp-10h] BYREF __int64 v6; // [rsp+18h] [rbp-8h] setvbuf(stdin, 0LL, 2, 0LL); setvbuf(stdout,..

[RCTF] vm ( write - up )

RCTF vmConcept64bit짜리(?) 스택 구현구현된 instruction은 ADD,MUL,DIV,SUB,MOV,JR(JUMP REGITSER),JMP 등등등... Analysisstruct vm { uint64_t *registers[8]; uint64_t *rsp; uint64_t *rbp; uint8_t *pc; uint32_t stackSize; uint32_t stackCheck; };일단 사용하는 구조체는 위와 같다. enum{ OP_ADD = 0, // add OP_SUB, // sub OP_MUL, // mul OP_DIV, // div OP_MOV, // mov OP_JSR, // jump register OP_AND, // bitwise and OP_XOR, // bitwise ..

[DefenitCTF] Variable-machine ( write-up )

DefenitCTF Variable-machineConcept원하는 자료형(int, char, string)의 변수를 Allocate, Delete, Edit, Print, Operate, Concat 할 수 있는 프로그램을 VM으로 구현한 바이너리. Analysis동작 방식 : Code입력 -> (getOpcode -> startVM) 반복 -> 종료 initProgram()__int64 initProgram() { pthread_t newthread; // [rsp+18h] [rbp-8h] ​ setvbuf(stdin, 0LL, 2, 0LL); setvbuf(stdout, 0LL, 2, 0LL); if ( pthread_create(&newthread, 0LL, initGclist, 0LL) ptr ..

[codegate] 7amebox1 ( write-up )

CODEGATE2018 7amebox1일단 요즘 분석능력을 기르기 위해서이기도 하고 일반적인 힙문제도 안나오는거같고 해서 vm문제를 좀 보려고 하는데 많은분들이 추천해주셔서 보게되었다.문제를 구성하는 파일은 총 4개이다._7amebox.py : vm을 구현해둔 python 파일해당 파일에서 *.firm파일을 파싱flag : 플래그mic_check.firm : 바이트코드로 이루어짐vm_original.py : 에물레이터 일단 특징을 보면, 21bit로 구현되어있다. (1byte = 7bit) 그리고 31개의 명령어와 6개의 syscall이 구현되어있다.이제 vm_original에서 핵심 부분을 살펴보자. 먼저, EMU calss의 execute이다.def execute(self): try: while 1:..

[SECCON] Secure Keymanager ( write-up )

SECCON 2017 Secure Keymanager ( write - up )Vulnabilityuninitialized stackdouble free(fastbin dup) 세콘이 맞나 싶을정도로 쉽..signed __int64 check_account() { signed __int64 result; // rax char buf; // [rsp+0h] [rbp-50h] unsigned __int64 v2; // [rsp+48h] [rbp-8h] ​ v2 = __readfsqword(0x28u); printf("Input Account Name >> "); read(0, &buf, 0x40uLL); if ( !strcmp(account, &buf) ) { if ( master[0] ) { printf(..

[ASIS CTF] asvdb ( write-up )

ASIS CTF asvdb ( write - up )Contenttcache duplogic error Analysisstruct bug { _DWORD year; _DWORD id; _QWORD *title; _QWORD *desc; _DWORD severity; };위와 같은 구조체를 사용한다. create()int create() { void *title; // ST20_8 void *buf; // ST28_8 unsigned int bug_index; // [rsp+4h] [rbp-2Ch] unsigned int size; // [rsp+10h] [rbp-20h] bug *bug; // [rsp+18h] [rbp-18h] ​ bug_index = find_buglist(); if ( bug_ind..