C++

    [Pwnalbe] 1996

    오늘은 1996이라는 문제를 풀어볼거다. 굉장히 쉬운 문제였던거 같다. NX bit가 enabled 되어 있고 partial relro가 걸려있어 _DYNAMIC 섹션에 write 권한이 없다. 바로 아이다로 열어보자 c++ 바이너리이다. 우선 "Which environment variavle do you want to read"라는 문자열을 출력해주고 getenv로 name에 입력을 받는다 하지만 getenv에서 length check를 해주지 않으니 BOF가 터질거 같다. 취약점은 파악했으니 어떤 방식으로 익스를 해야될지를 생각해봐야된다. 위에서 이 문제가 어렵지 않다고 한 이유가 쉘을 띄워주는 함수가 내장되어 있다. 그럼 익스 코드를 쉽게 구상할 수 있다. buf [0x410] + SFP [0x8]..

    [Pwnable] g++ pwn

    오늘은 g++ pwn 문제에 대해서 정리를 해보려한다. 32bit ELF파일이며 다이나믹 링킹되어 있다. NX만 enabled 되어 있으므로 쉘 코드 사용은 힘들어 보인다. 바로 아이다로 열어보자. 메인 함수에는 별게 없으니 넘기자 HackCTF에서는 처음 C++ 바이너리를 보는거 같다. 하나하나 분석을 해보자 우선 fgets로 입력을 받을 때 length check를 해주니 BOF는 힘들거 같다. 코드를 유심히 보면 replace 함수가 있다. 맞다. "I"라는 문자를 입력하게 되면 "you"라는 문자열로 변환을 해준다. 그럼 우리는 strcpy 함수를 이용해서 BOF를 터트릴 수 있다. 익스를 구상해보자면 1. "I"를 이용해서 buffer 0x3C만큼 채우기 2. Dummy 값으로 SFP 채우기 3..