티스토리 뷰

이번엔 메모리가 변하는 것을 확인하기 위해, 취약 프로그램에 dumpcode 헤더를 추가하여 실행해보자. 일단 root에서 dumpcode 헤더가 탑재되어 있다고 가정, 코드는 다음과 같다.

실행시켜보면 다음과 같다.

우선 vul1 파일을 실행시키고 AAAA를 입력하고 값을 받아보면 AAAA의 값은 네 번째에 위치하고, 조작하기 전의 값은 00 00 00 00 이다. 이제 이 값을 조작하기 위해서 코드를 입력해 보자.

(printf "\x41\x41\x41\x41\xa0\xf0\xff\xbf%%8x%%8x%%8x%%c%%n";cat)|./vul1

코드를 보면 우선 AAAA와 주소를 입력하고 자릿수를 맞춰주기 위해 %8x를 넣어주는데 네 번째에 AAAA가 들어가므로 8x는 세 개만 쓰고 그 다음 %c를 넣어준 다음, %n을 통해 카운트한다. (%%가 두 개인 이유는 |를 지날 때 한 개가 되기 때문에 결과적으로 %이 된다.) 코드를 입력하고 실행하면 다음과 같다.

보면 조작하고 난 후의 값이 바뀐 것을 알 수 있다. 이유는 'AAAA의 크기 + 주소값 + 8x + 8x + 8x + c로 인한 한 문자 값'에 의해 바뀐 것이다. 여기서 AAAA의 크기는 4byte, 주소값 또한 4byte, 8x는 각 8byte, c로 인한 한 문자 값은 1byte로 더하게 되면 4+4+8+8+8+1 = 33 byte다. 여기서 33byte = 21(16진법로 인해)이라는 것을 알 수 있다. 따라서 이런 방법을 통해 원하는 주소에서 값을 변형시켜 root의 권한을 얻을 수 있게 되는 것이다.

그럼 이제 main함수가 종료될 때 찾는 부분인 .dtors를 이용한 FSB를 해 보자.


'System > FSB' 카테고리의 다른 글

FSB(Format String Bug)란 무엇인가? - 1  (0) 2012.09.17
dumpcode.h  (0) 2012.09.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함