jam 블로그

[bof 원정대] vampire -> skeleton (argv hunter) 본문

해킹/시스템

[bof 원정대] vampire -> skeleton (argv hunter)

kid1412 2012. 3. 21. 17:25
728x90
문제의 소스를 보자

 [그림 1] skeleton.c

소스분석
1. buffer의 크기는 40
2. 인자값은 적어도 하나이상
3. 환경변수 초기화
4. 첫번째 인자값의 48번째의 값은 \xbf
5. 첫번째 인자값의 길이가 48보다 크면 안됨.
6.  buffer 초기화
7. 모든 인자값 초기화 

 
풀기위한 과정입니다.

0. bash2
1. 심볼릭 링크를 만들수 있는 shellcode 작성 또는 구하기
2. 심볼릭 링크 생성
3. stack 마지막에 들어간 shellcode의 주소값 구하기
4. bof 공격 


1. 심볼릭 링크를 만들수 있는 shellcode 작성 또는 구하기

심볼릭 링크를 만들기 위해서는 shellcode에 \x2f가 있으면 안됩니다. 심볼릭 링크에 쓸수 있는 shellcode입니다.
48byte입니다.(심볼릭링크에 쓸것이기 때문에 buffer 크기를 신경안쓰셔도 됩니다.)
 \xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6
\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30
\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81


2. 심볼릭 링크 생성

 [그림 2]심볼릭 링크 생성


3. stack 마지막에 들어간 shellcode의 주소값 구하기

여기서 자세한 이유는 모르겠지만 argv가 전부다 초기화 되어도 stack의 마지막에 풀 경로명과 파일명이 들어가 있습니다.

 [그림 3] shellcode의 주소값 구하기

심볼릭 링크를 gdb 실행시켜 main+364에 브레이크 포인트를 겁니다.(main+364는 프로그램 종료 바로 직전입니다.)
이제 심볼릭 링크를 원본 파일로 링크 시켜줍니다. 


4. bof 공격

심볼릭 링크 걸어주실때 shellcode 앞뒤로 \x90을 많이 붙여주시는게 좋습니다. 주소값이 원본파일에서 정확하다는 보장이 없게 때문입니다. 

 [그림 4] bof 공격

 nop 값을 많이 넣어준다음 주소값을 변경을 해주면 shell이 떨어집니다.


Comments