티스토리 뷰

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



우선 코드를 분석하면서 지켜야할 규칙에 대해 분석해보도록 하자.


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의 주소값으로 공격을 시도한다.

 

 

다음단계의 쉘을 취득한 것을 확인할 수 있었다.

 

이번 공격에 있어서 중요한 점은 스택의 맨 마지막 부분에 저장되는 환경들의 정보이다.

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