티스토리 뷰
우선 코드를 살펴보도록 하자.
우선 코드를 분석하면서 지켜야할 규칙에 대해 분석해보도록 하자.
1. 인자값이 2개 이상인가 (argc < 2)
2. 환경변수 사용 X (egghunter)
3. argv[1]의 길이가 48보다 클 경우 프로그램 종료 (check the length of argument)
4. buffer[40] 변수를 이용한 공격 무효 (buffer hunter)
5. 모든 argv의 값들 초기화 (ultra argv hunter)
인자값들과 변수를 이용한 공격을 무효화 시키게 되었다. 그렇다면 메모리에 쉘코드를 저장할 수 있는 공간이 어디 있는지 생각을 해보았다.
모든 프로그램은 메모리의 맨 마지막 부분에 여러 환경변수들과 해당 프로그램에 대한 정보를 저장하고 있다는 점을 착안하여 esp를 통해 메모리의 끝까지 전부 출력하여 해당 프로그램의 정보에 대해 저장을 하고 있는지 확인해보았다.
/home/vampire/skeletod(복사본)라고 해당 프로그램의 이름이 저장되어 있는 것을 알 수 있었다. 우리는 이를 이용하여 해당 프로그램의 이름을 심볼릭 링크를 쉘코드로 저장하여 공격을 수행할 수 있음을 알 수 있게 되었다.
심볼릭 링크를 사용하여 공격을 수행하도록 하겠다.
쉘코드를 심볼링 링크로 걸었을 때의 모습이다.
0xbfffffdc를 살펴보면 실행파일의 이름이 쉘코드로 되어있는 것을 볼 수 있고
0xbfffffde + strlen("/home/vampire/") = 0xbfffffea 이므로 0xbfffffea의 주소값으로 공격을 시도한다.
다음단계의 쉘을 취득한 것을 확인할 수 있었다.
이번 공격에 있어서 중요한 점은 스택의 맨 마지막 부분에 저장되는 환경들의 정보이다.
'[Hackerschool] The Lord Of The BOF' 카테고리의 다른 글
BOF원정대 - 11탄(skeleton-> golem) (0) | 2017.12.09 |
---|---|
BOF원정대 - 9탄(troll -> vampire) (1) | 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 |