티스토리 뷰

우선 코드를 살펴보도록 하자.



여러 검사 기능들이 사라지고 1가지가 추가 되었다.


바로 argv[1]에서 [46]번 인덱스에 \xff가 들어가면 printf를 수행하지 않고 종료가 되도록 설정 되었다. 이러한 점을 피하여 strcpy 까지 접근 하여야 버퍼 오버플로우를 일으킬 수 있는 상황이 된다.  평소에 접근하는 메모리 주소값들이 전부 0xbfff~~~~이런 식으로 접근하였는데 스택에 메모리가 구성되는 점을 이용하여 문제를 해결해야 한다.


스택에는 사전에 선언된 변수에 대하여 저장이 되는데 그 위에는 argv에 대한 공간이 구성되어 있다. 따라서 argv의 값을 매우 긴 값을 넣게 된다면 쉘코드를 넣게 될 argv나 buffer에 대하여 메모리 주소가 0xbfff~~~~를 벗어날 수 있게 된다.


문제를 복사하여 argv[2]에 대해 주소값을 출력하도록 프로그램을 수정하고 실행하여 보았다. 



argv[3]에 문자 A를 8만자를 입력하여 스택의 윗부분을 가득 채워주었다. 이로 인해 argv[2]의 주소값은 0xbffec3e2로 되었다.


해당 프로그램의 체크리스트인 0xbfff~~~~인지 아닌지에서 벗어나 strcpy를 수행할 수 있게된 것이다. 해당 주소를 참고로 하여 본래 공격대상 프로그램을 통해 공격을 수행해 보았다.



정상적으로 공격이 성공하여 vampire의 권한을 가진 쉘을 취득할 수 있었다.


argv의 메모리 생성 위치도 알고 있어 실행당시 어떤 현상이 일어날 수 있는지를 보여주는 문제였다.

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