#About
[그림 1] - orge.c 소스 코드 확인
#Solution
[ + ] 소스 코드 해석
1. 외부 다른 소스파일에 있는 environ 포인터 변수 사용
2. buffer라는 배열에 40바이트 및 변수 i 선언
3. 조건문을 통해 인자 값을 검사하며 2개 미만일 경우 argv error를 출력 후 종료
4. argv[0] 즉, 실행파일의 이름이 77바이트가 아닐 시 argv[0] error를 출력 후 종료
5. 반복문을 이용하여 환경변수에 담긴 값의 길이만큼 메모리에서 초기화
6. 조건문을 통해 사용자 입력 값 중 48번째 바이트가 \xbf가 아니면 stack is still your friend.를 출력하고 종료
7. 사용자 입력 값인 첫 번째 인자 값의 길이가 48바이트가 넘어가면 argument is too long!을 출력하고 종료
8. 사용자 입력 값을 buffer에 복사 후 buffer에 들어있는 사용자 입력 값 출력
9. memset 함수를 이용하여 buffer 값 전부 초기화
이전 문제들과 달리 해당 문제에서 추가 된 것은 argv[0]의 조건이다. argv[0]은 파일을 실행함에 있어 필요한 경로를 의미하며
아래와 같이 orge의 이름을 75개의 A로 변경해주었다
[그림 2] - orge > 75자리 A로 이름 변경
위와 같이 이름을 변경해준 뒤 파일명이 75글자인 B를 만들어 임의의 페이로드를 작성해 core 덤프 파일을 생성 해주었다
[그림 3] - core 덤프 파일 생성
다음으로 core 파일을 분석하기 위해 -c 옵션을 주어 아래와 같이 메모리 확인결과 buffer의 시작주소는 0xbffffb82임을 확인할 수 있었다
[그림 4] - buffer 시작 주소 확인
buffer의 시작주소를 알았으니 아래와 같이 RET 주소를 buffer의 시작 주소로 변조하는 페이로드를 작성할 수 있다
| \x90 (20byte) | 셸 코드 (24byte) | buffer의 시작 주소 |
[그림 5] - 셸 획득
'Wargame' 카테고리의 다른 글
[Lord of Buffer Overflow] Troll > Vampire (0) | 2017.11.21 |
---|---|
[Lord of Buffer Overflow] Orge > Troll (0) | 2017.11.19 |
[Lord of Buffer Overflow] Wolfman > Darkelf (0) | 2017.11.18 |
[Lord of Buffer Overflow] Orc > Wolfman (0) | 2017.11.18 |
[Lord of Buffer Overflow] Goblin > Orc (0) | 2017.11.18 |