Vampire
-
LEVEL 10 skeleton write-upSystem hacking training/Hackerschool LOB 2018. 4. 11. 16:58
vampire -> skeleton [문제] 조건들이 많다. 하나씩 살펴보면 이러하다. 먼저 인자는 두개 이상 줘야하고 egghunter에 의해서 eggshell을 사용하여 익스플로잇할 수 없다.그리고 ret 주소의 마지막 바이트에는 \xbf가 들어가 있어야한다. 이 말은 즉 스택에 쉘코드가 있어야한다는 것으로 생각이 된다.그리고 argv[1] (첫 번째 인자)의 길이가 48이상이면 안된다.마지막으로 buffer와 argv[N]의 모든 값들을 0으로 초기화하며 종료한다. 그리하여 이전까지 넣어줬던 공간 argv, 환경변수, buffer가 모두 0이된다. [삽질 - 풀이와 무관함] 그리하여 살질을 하였는데.. 생각해낸 방법이 argc를 integer overflow하여 int의 범위를 넘어서 음수 혹은 0..
-
LEVEL 09 vampire write-upSystem hacking training/Hackerschool LOB 2018. 4. 4. 17:20
troll -> vampire 오늘은 vampire라는 문제를 풀이해 보도록 하겠다. [문제 + 힌트] vampire.c 파일을 열었을때의 모습이다. main()에서 인자를 한개 이상 받고 argv[1][47] 부분에서 \xbf 가 맞는지 아닌지 검사를 한다. 여기까지는 뭐 대충 이전 문제에서 많이 봐왔던 형태이다. 바뀐부분은 바로 here is changed 라는 주석이 달린 곳인데 이곳을 보게 되면 argv[1][46] 부분의 값이 \xff 와 같다면 but it's not forever 라는 문장을 출력하고 exit(0) 함으로써 종료를 시킨다. 그리고 그 밑에서 strcpy() 로 argv[1]의 값을 buffer에 그대로 복사해주는 것을 확인할 수 있는데바로 여기서 bof 취약점이 터지는 것을 ..