티스토리 뷰

이번에는 조금(?) 참신한 문제입니다.

이번에는 Fake EBP 가 안먹히도록 ebp 주소를 저장해놨다가 복구시키네요...

이것은 execl+3 을 사용하지 못하도록 하려는 제작자의 배려(?)입니다...

사실 전 첫 번째 문제도 RET Sled 로 풀었는데... 두 번째 문제라서 살짝 당황했었습니다.(execl+3 은 이후에 알게된...)

아무튼 RET Sled는 Nop Sled 와 비슷한 원리입니다.


ret이 수행되면, pop eip; jmp eip 의 동작이 수행됩니다. 그렇게 되면 esp의 값이 4 바이트만큼 증가하게 되죠 ?

| ebp(4) | ret(ret) | new ret | -> ret에 ret을 넣어주면 그 뒤의 값이 ret으로 바뀌는 원리를 이용하는 것입니다.


이게 통하는 이유는 스택의 모든 영역이 랜덤인 것이 아니라서 그런것이구요.(모든 영역을 랜덤화시키기엔 가용성이...)

보시면, 같은 곳이 존재한다는 것을 볼 수 있습니다. 물론 이외에도 많은 부분이 똑같은 값을 갖고 있습니다.

이제 저 부분을 인자로 받도록 RET Sled 를 주게되면 아래와 같이 공격코드가 구성됩니다.

| buf(268) | ebp(4) | ret(ret) | new ret(ret) | new ret(execl) | 랜덤값 | 고정인자 |

예상대로 되는지 공격해보겠습니다.

실제 프로그램에서 수행한 장면입니다. 물론 ret의 값이 바뀌었고 공격은 execl이 아닌 system으로 수행했습니다.

그 이유는 system으로 수행되는 인자의 값이 무엇인가 보고 그것을 execl의 인자로 사용하기 위함입니다.

(한 마디로 execl은 에러를 안 뱉어내니까 system으로 에러를 보고 링크를 걸기 위함입니다.)

3a20 사이에 있는 값들이 저희가 링크시켜줘야 하는 값입니다. 휴... 너무 기네요.

직접 처보기는 힘들테니, hexdump를 이용해서 추출해봅시다 !

간편하죠 ? 이걸 드래그해서 복사한 뒤에 붙여넣으면 됩니다 !

근데 공격이 안되네요... 오랜만에 풀어서 그런가 왜 안되지는 몰랐었습니다 ㅋㅋㅋㅋ...

exec* 계열의 함수는 ""로 감싸줘야 합니다. \x20 이 공백이라서 exec* 계열은 \x00 으로 인식을 하기때문이죠.

because of you... 당신 때문이야 !

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함