CTF/WRITEUP
-
[0x41414141 CTF] Return Of The ROPsCTF/WRITEUP 2021. 2. 2. 15:45
Disassembly 디스어셈블리 문제에서 제공하는 파일은 main.sh, PoW, return-of-the-rops로 세 개이다. #!/bin/bash `pwd`/PoW if [ $? == 0 ]; then echo "\n" `pwd`/ret-of-the-rops fi main.sh는 PoW가 통과하면 바이너리를 실행한다. def PoW(res): for x in tqdm(product(ascii_lowercase, repeat=4)): d = "" for i in x: d += i y = md5(d.encode()).digest().hex() if y[-6:] == res: log.info("key : " + d) p.sendline(d) p.recvline() break dest = p.recvli..
-
[0x41414141 CTF] The Pwn InnCTF/WRITEUP 2021. 1. 30. 23:55
Disassembly 디스어셈블리 undefined8 main(void) { int64_t iVar1; int64_t in_FS_OFFSET; int64_t canary; iVar1 = *(int64_t *)(in_FS_OFFSET + 0x28); ignore_me_init_buffering(); ignore_me_init_signal(); puts("Welcome to the pwn inn! We hope that you enjoy your stay. What\'s your name? "); vuln(); if (iVar1 != *(int64_t *)(in_FS_OFFSET + 0x28)) { // WARNING: Subroutine does not return __stack_chk_fail(); } ..
-
[0x41414141 CTF] externalCTF/WRITEUP 2021. 1. 27. 16:27
Disassembly 디스어셈블리 문제를 보면 별다른 설명 없이 라이브러리와 바이너리 파일이 있다. undefined8 main(void) { void *buf; puts("ROP me ;)"); printf(0x40201c); read(0, &buf, 0xf0); clear_got(); return 0; } main 함수는 puts, printf, read, clear_got를 차례대로 호출하고, read에서 스택 버퍼 오버플로우가 발생한다. void clear_got(void) { memset(reloc.puts, 0, 0x38); return; } clear_got 함수는 reloc.puts부터 0x38바이트 길이를 초기화한다. 초기화되는 부분은 got 영역 전체이다. 재할당된 라이브러리 함수들의 ..