티스토리 뷰

System/PLT&GOT

GOT Overwrite - 1

07VH 2012. 9. 14. 22:45

간만에 포스팅하는 거지만 암튼 오늘은 GOT Overwrite를 해 보겠다.

일단 아래와 같은 파일을 만들어보자.

보면 일단 print.c 파일은 rootSetUID로 고정되어 있다는 것을 알 수 있다. 그리고 print.c 내용을 보면 scanf 함수와 printf 함수가 있는데, 위에 있는 h.c로 만든 h 파일을 이용하여 scanf 함수를 root로 권한을 따고 system 함수의 주소로 조작할 수 있다. 그리고 첫번째 인자로 "%s"인 것을 "./h;"로 바꾸어서 실행하면 system("./h;", buf);가 실행되어 쉘 실행 프로그램인 h를 실행하게 되는 것이다.

그러면 일단 .plt Section의 시작주소를 알아보기 위해서 readelf -S를 사용해보자.

readelf를 사용할 때, grep을 이용하여 모든 Section을 찾는 것이 아닌 .plt라는 문구가 들어간 부분만 찾아보면 위와 같이 나온다. 찾은 다음 gdb 하여 .pltSection 시작 주소부터 정보를 보면 위와 같다. 위를 보면 scanf 함수와 printf 함수 부분을 볼 수 있는데 일단 system주소를 scanf 함수가 jump하는 주소로 바꾸어 보자. 따라서 일단 main 부분에 breaking을 걸고 running을 시킨다. 그다음 system 주소값을 뿌려준다. 다음과 같다.

위처럼 나온 system 주소를 scanf 함수가 jump하는 주소로 해 주도록 하자.

이제 "%s"부분을 "./h;"로 바꾸기 위해 "%s"부분을 찾기 위해 main 부분의 정보를 뜯어보자.

main의 내용을 보면 scanf 함수가 call 되는 부분을 볼 수 있는데 그 위에 push된 부분이 "%s"일 것임을 생각하고 그 주소를 들여다보자. 보면 다음과 같다.

push된 부분의 주소를 찾고 그 주소에 ./h;를 아스키 코드에 따른 코드로 바꾸어 set 해 준다.(./h; : 3b682f2e [little endien순]) 해 주고 나서 다시 들여다보면 "./h;"로 바뀌었음을 알 수 있다. 그 다음 continuing을 해 주면 위와 같은 화면이 뜨는데 거기서 id를 쳐 보면 uidroot로 바뀌었음을 알 수 있고, whoami 했을 때도 root로 바뀌었음을 알 수 있다. , root의 권한을 땄음을 알 수 있다.

갈 수록 의지가 떨어지는 것 같다... 다시금 한번 자극이 있어야 할 텐데 큰일이다. 주위에 같이 경쟁하면서 하는 사람이 있어야 할 것 같다... 도와주시기를

'System > PLT&GOT' 카테고리의 다른 글

PLT, GOT  (0) 2012.08.30
동적, 정적 라이브러리의 차이점  (0) 2012.08.30
PLT&GOT에 대해서...  (0) 2012.08.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함