티스토리 뷰


이 문제는 RTL ( Return inTo Libc) 을 사용해야합니다. 

그 이유는 bf 자체를 차단해버렸기 때문입니다. 이 의미는 스택 사용한 직접적인 BOF의 차단을 의미한다고 할 수 있겠습니다.

 




RTL 기법은 리턴주소를 직접 쉘코드로 지정하는 것이 아니라 시스템 함수를 간접호출해서 쉘을 실행시키는 방식입니다. 
여기서는 system함수를 이용해 /bin/sh를 실행해 간접적으로 쉘을 실행하겠습니다. 


CALL 의 이해입니다. CALL 어셈블리는 일반적으로 다음과 같은 순서로 진행됩니다. 


1. 매개 변수에 해당하는 인자 값들을 PUSH 합니다. 

2. 해당 함수로 이동하기 전에 리턴할 주소를 PUSH 합니다. 

3. 해당 주소로 점프합니다. 


따라서 익스플로잇 코드의 구성은 다음과 같습니다. 


44 바이트의 버퍼 + CALL할 함수 + CALL한 함수가 리턴할 주소 + 인자 값들 


먼저 system함수의 주소 값을 찾아야하는데 gdb에서 print system을 하면 찾을 수 있습니다. 물론 write이런 것도 가능 


해답 : `python -c 'print "\x90"*44+"\xe0\x8a\x05\x40"+"\xaa\xaa\xaa\xaa"+"\x2f\xff\xff\xbf"'`


마지막 인자 값으로는 system함수에서 사용할 /bin/sh 문자열을 넣는데 환경변수룰 사용해서 넣어주었습니다.(앞부분 문제에서 나오므로 생략)




'문제풀이 > bof원정대' 카테고리의 다른 글

bof원정대 golem -> darkknight  (0) 2016.08.18
bof원정대 troll -> vampire  (0) 2016.08.16
bof원정대 orge -> troll  (0) 2016.08.15
bof 원정대 darkelf -> orge  (0) 2016.08.15
bof 원정대 wolfman -> darkelf  (0) 2016.08.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함