본문 바로가기

Pwnable/HackCTF

[ProjectH4C] HackCTF (1996)

1996을 실행하면 다음과 같다.

 

코드부터 확인해주도록 한다.

 

int __cdecl main(int argc, const char **argv, const char **envp)
{
  __int64 v3; // rdx
  __int64 v4; // rax
  __int64 v5; // rdx
  __int64 v6; // rbx
  char *v7; // rax
  __int64 v8; // rdx
  __int64 v9; // rax
  char name; // [rsp+0h] [rbp-410h]

  std::operator<<<std::char_traits<char>>(&_bss_start, "Which environment variable do you want to read? ", envp);
  std::operator>><char,std::char_traits<char>>(&std::cin, &name);
  v4 = std::operator<<<std::char_traits<char>>(&_bss_start, &name, v3);
  v6 = std::operator<<<std::char_traits<char>>(v4, "=", v5);
  v7 = getenv(&name);
  v9 = std::operator<<<std::char_traits<char>>(v6, v7, v8);
  std::ostream::operator<<(v9, &std::endl<char,std::char_traits<char>>);
  return 0;
}

 

 

어떤 환경 변수를 읽어오겠냐고 출력한 다음 name에 입력을 받고, v4에 저장한다음 뒤에 "="을 붙여서 출력해준다. 그 후에 v7에 해당 환경 변수의 주소를 저장해준다. 단순한 BOF기법을 이용해서 공격 할 수 있을 것 같아 보인다.

 

또한, 쉘을 실행시켜주는 spawn_shell 함수도 존재하기 때문에, ret을 해당 함수의 주소로 덮어주면 될 듯 하다. 페이로드는 다음과 같다.

 

dummy * 0x418 + spawn_shell addr

 

어렵지 않게 flag를 획득하였다.

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

[ProjectH4C] HackCTF (poet)  (0) 2020.09.27
[ProjectH4C] HackCTF (g++ pwn)  (0) 2020.09.27
[ProjectH4C] HackCTF (RTL_World)  (0) 2020.09.27
[ProjectH4C] HackCTF (BOF_PIE)  (0) 2020.09.18
[ProjectH4C] HackCTF (Offset)  (0) 2020.09.18