golem
-
LEVEL 12 darkknight write-upSystem hacking training/Hackerschool LOB 2018. 4. 22. 03:42
golem -> darkknight 오늘은 golem을 풀이를 작성해보겠다. [문제 + 힌트] 문제를 보니 main()에서 하는 일은 인자가 2개 이상인지 검사하는 일뿐나머지의 처리는 problem_child()에서 처리한다. 그리하여 problem_child() 를 보니 기존의 bof 와는 다르게 strncpy()를 이용하여 입력의 길이를 제한했는데 buffer 는 40byte임에 불구하고 41byte 입력을 받을 수 있게 설계가 되어있다. 따라서 SFP의 하위 바이트 1byte를 Overflow(Overwrite) 할 수 있다. 그래서 뭘 할 수 있을까 생각하던 중 힌트 부분의 FPO가 보인다. FPO에 대해 알아봤는데 결정적인 힌트였다. FPO 란? ==> [Link] Frame Pointer Ov..
-
LEVEL 11 golem write-upSystem hacking training/Hackerschool LOB 2018. 4. 20. 05:47
skeleton -> golem 오늘은 golem에 대해 풀이를 하였다. 문제는 답정너였는데 풀이하는데 꽤 애먹었다. [문제 + 힌트] 문제를 보면 딱 답정너라는걸 알 수 있다. 역시 지금껏 풀어왔던 문제처럼 쉘코드를 어디에 넣을지...가 관건이다. 먼저 if(argv[1][47] != '\xbf') 일때 예외처리가 되면서 exit(0)로 바이너리가 종료된다. 따라서 스택에 쉘코드를 올리고 return 해야된다. 그런데 stack destroyer! 부분을 보면 ret 하기 전에 memset()로 buffer와 ret (buffer+8) 보다 높은 주소의 모든 스택을 0으로 세팅하는것을 확인할 수 있다. 그렇다면 남은 공간은 스택의 낮은 주소가 있다. 이해를 위해 그림을 그려보면 현재 스택은 이러한 형태..