티스토리 뷰

문제 5번부터 약간씩 어려워지기 시작합니다.

여기서 어렵다는 의미는 지금까지와는 달리 창의적(?)인 생각이 필요하다는 의미입니다 ^^.

일단 Egg Hunter, Buffer Hunter 때문에 환경변수와 버퍼는 이용할 수가 없습니다.

그런데도 스택은 여전히 당신의 친구라는 문구가 있네요...

제가 처음 위의 문제를 봤을 때에는 완전 멘붕 속에 빠져서 몇 시간을 생각했었습니다.

근데 막상 드는 생각은 참 허무맹랑(?)하면서도 될 법한 것이었습니다. 여러분도 한 번 생각해보세요. 이번 문제를 어떻게 해결할 수 있을지 말이죠. 분명 생각하신다면 창의력(?)이 확 ! 올라가는 것을 느낄 수 있습니다.(과연 ?)

중요한 포인트를 짚어보겠습니다.


1. 환경변수를 사용할 수 없다.

- 이는 4번에서도 그랬으니 가볍게 생각할 수 있습니다.

2. 버퍼를 이용한 Exploit 또한 불가능하다.

- 마지막에 버퍼를 모두 0으로 셋팅해버리니 버퍼를 이용해서 공격할 수 없습니다.

3. 하지만 결국에 RET에는 '\xbf'로 시작하는 주소가 들어가야 한다.

- 아무리 발버둥 치더라도 결국 스택에서 끝장을 봐야 합니다.


환경변수와 주어진 버퍼를 이용할 수 없다면 ? <- 두 개를 제외한 스택 공간을 사용하면 그만입니다.

이 결론을 내리는데 그렇게 오랜 시간이 걸렸던 걸 생각하면 정말 웃음만 나옵니다...... dumpcode.h와 함께 복사해서 공격하겠습니다.

위에 dumpcode.h를 추가하고 마지막에 dumpcode(~)를 추가해서 새로 컴파일을 합니다.(프로그램 이름 길이 주의 !)

그리고 공격을 진행해보겠습니다.



빨간색 네모친 부분을 보시면, 40 Bytes는 0으로 초기화되고 EBP, RET만이 값이 살아있는 것을 볼 수 있습니다.


아마 FTZ만 푸셨다면 저기 네모친 부분만을 이용하거나 환경변수를 이용해야 한다는 고정관념을 갖고 계실 수도 있습니다만 위에서 말씀드렸다시피 '스택'공간이라면 아무런 상관이 없습니다.


즉, RET 뒤의 부분을 이용해도 된다는 것이지요.(물론 다른 공간을 이용해도 되나 쉽게 풀이하겠습니다.)



우연의 일치인지는 몰라도 쉘코드를 올리니 주소가 한칸 밀리더군요.(...)


쉘코드의 시작 주소를 강제로 1 Byte 밀어서 \x00 이 전달하는 인자에 나오지 않도록 만들었습니다.


위와 같은 경우를 방지하려면 NOP Sled를 이용하셔도 됩니다. 그럼 실제 wolfman에 바로 공격하겠습니다.



love eyuna ? 이니셜인가 보네요 -_-;


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함