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 |