소스코드의 14~18 행에서 check 변수의 값이 0xdeadbeef 이면 setreuid 함수와 system 함수를 통해 level15(3095) 권한의 쉘을 획득할 수 있다.
buf 배열의 길이 (20 + 20)바이트만큼 덮고 check 변수의 값을 0xdeadbeef 로 변조함으로써 level15(3095) 권한의 쉘을 획득하였다.
[Sourcecode]
1.// 레벨14 이후로는 mainsource의 문제를 그대로 가져왔습니다.2.// 버퍼 오버플로우, 포맷스트링을 학습하는데는 이 문제들이3.// 최고의 효과를 가져다줍니다.4.5.6. #include <stdio.h>7. #include <unistd.h>8.9.main()10.{int crap;11.int check;12.char buf[20];13.fgets(buf,45,stdin);14.if(check==0xdeadbeef)15.{16.setreuid(3095,3095);17.system("/bin/sh");18.}19.}20.21.// attackme.c
[Analysis]
setuid 가 설정되어 있으면 gdb 가 동작하지 않기 떄문에 tmp 디렉토리에 cp 명령을 이용하여 복사한다.
attackme 소스코드 13행을 보면 fgets 함수를 통해 stdin(Standard Input) 에서 입력받은 버퍼를 buf 배열에 최대 45바이트만큼 복사한다.