티스토리 뷰
우선 코드를 살펴보도록 하자.
여러 검사 기능들이 사라지고 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의 메모리 생성 위치도 알고 있어 실행당시 어떤 현상이 일어날 수 있는지를 보여주는 문제였다.
'[Hackerschool] The Lord Of The BOF' 카테고리의 다른 글
BOF원정대 - 11탄(skeleton-> golem) (0) | 2017.12.09 |
---|---|
BOF원정대 - 10탄(vampire-> skeleton) (0) | 2017.12.01 |
BOF원정대 - 8탄(orge -> troll) (0) | 2017.11.26 |
BOF원정대 - 7탄(darkelf -> orge) (1) | 2017.11.26 |
BOF원정대 - 6탄(wolfman -> darkelf) (1) | 2017.11.26 |
댓글