-
Stack2 풀이System hacking training/Protostar 2018. 2. 4. 15:49
[문제]
문제를 보면 variable에 getenv()를 이용하여 환경변수의 값을 넣어주는것을 볼 수 있다.
그리고 취약점은 역시 strcpy() ! 문자열의 길이를 검사하지 않기 때문에 bof 취약점이 존재한다.
풀이를 위해 buffer[64] 와 modified 사이의 offset을 구해야한다.
이는 gcc 컴파일 과정에서 들어가는 쓰레기값 즉, dummy 값이 존재하는지 확인을 하기 위함이다.
[풀이]
먼저 gdb로 열어본다.
dummy 값만 체크를 해보자.
아 여기서 dummy 값은 문제 풀이를 위해 modified 와 buffer[64] 사이만 확인을 했다.
결과는 이전 문제와 동일하게 없었다.
따라서 이 프로그램의 스택 구조를 확인해보면 이러하다.
<Low address> | char *variable(esp) | dummy(17) | char buffer[64](esp + 0x18) | int modified(esp + 0x58) | SFP | RET | <High address>
포인터 변수 variable과 char buffer[64] 사이에 dummy 값이 있음을 확인하였다.
하지만 이는 int modified의 값을 변경하는데 아무런 문제가 되지 않는다.
buffer는 정확히 64바이트 공간을 확보했고, modified 사이의 dummy 가 들어있지 않으므로
환경변수에 임의의 값 A를 64개 넣어주고, modified가 변경되어야하는 값 0x0d0a0d0a을 넣어주면 성공이다.
따라서 export로 GREENIE라는 환경변수에 A를 64개 넣고, 0x0d0a0d0a를 리틀엔디언 형식으로 넣어주면 된다.
반응형