System/HackerSchool LOB
해커스쿨 LOB level9
먼즈
2019. 7. 15. 22:10
level8 붙들고 있다가 혈압 오를거 같아서 다음을 기약하고 일단 9부터 ㄱㄱ
사실 level7보다는 훨씬 간단해진 코드를 확인할 수 있죠
첫번째 인자의 48번째 주소에는 \xbf가 와야 하고, 47번째에 \xff가 오면 프로그램을 종료해버립니다. 그 이외에는 특별히 눈에 띄는게 없네요
그니까 \xff가 오면 안된다는 뜻인데, 그동안은 0xbffff~~~같은 형식을 자주 썼잖아요? 그래서 어떻게 문제를 풀어야 할지 고민이 됐습니다
스택은 높은 주소로부터 낮은 주소로 자리를 잡게 되는데, 매개변수에 전달되는 값의 크기가 크면 클수록, 스택은 낮은 주소에 자리를 잡는다고도 해석할 수 있습니다.
아 네 뭐 0xbfff~~~만 아니면 되니까 0xbffe~~~만 되어도 성공적으로 쉘을 딸 수 있다는 얘기입니다
그러려면 0xbffffffff에서 0x10000만큼만 내려오면 됩니다. 이는 10진수로 65536이므로 그대로 gdb 키고 실험삼아 실행시켜보겠습니다
48번째 자리에 \xbf를 넣고, 그로부터 십진수로 65536 떨어진 곳까지 nop를 넣습니다
그 뒤 ebp 레지스터를 살펴보면 성공적으로 bffe~~~로 내려온 것을 확인할 수 있습니다.
실제 파일도 그대로 실행시켜보죠(뒤에 쉘코드만 살짝..)
짜장 성공적으로 쉘이 따인 것을 확인할 수 있습니다! 하다보니까 포너블이 더 재밌어지네요..ㅎㅎㅎ
2019.7.15