id : level12
pw : it is like this
<나의 풀이 기록>
1. 파일 목록 확인(ls) 후 힌트 파일 내용 확인(cat hint)
이번에도 파일 목록에 hint 파일과 함께 attackme 파일이 보였다.
hint 파일 내용을 보니 level11의 hint와 비슷한 코드가 나왔다.
이것도 level11처럼 attackme의 소스일 것으로 보인다.
level11과의 차이점은
level11은 attackme를 실행하면 입력받은 argv배열 값을 strcpy함수를 이용해 str배열로 복사하는데,
이때 문자열의 길이를 검사하지 않는 strcpy함수의 취약점을 이용해 str배열을 넘치게 해 버퍼오버플로우를 발생시키는 것이었다면
level12는 gets함수를 통해 str 배열에 들어가는 입력값의 크기를 선언된 str의 크기보다 크게 해 버퍼오버플로우를 발생시키는 것으로 보인다.
아마 level11과 비슷하게 풀릴 것 같다.
2. attackme 파일 확인
우선 파일을 실행해봤다.(./attackme)
내가 입력하는 값이 그대로 출력된다.
자세한 파일 정보를 확인했다.(ls -al)
역시 예상대로 level13에 setuid가 걸려있고, level12의 권한으로는 실행만 가능하다.
3. attackme와 같은 내용 파일 생성
tmp 디렉토리로 이동해서(cd tmp) 파일 생성을 진행했다.
gcc -o attackme2 attackme2.c : attackme2.c 파일을 attackme2라는 이름의 실행파일로 컴파일
컴파일을 했더니 gets 함수가 위험하니 사용하지 말라는 경고가 나왔다.
gets 함수는 입력 받은 문자열의 길이를 확인하지 않고, 문자열을 저장할 공간의 크기도 확인하지 않는다.
따라서 버퍼오버플로우 공격에 취약한 대표적인 함수 중 하나이다.
어쨋든 경고에도 불구하고 실행 파일은 정상적으로 생성되었다.
4. gdb로 새로 만든 attackme2 파일 분석
이번에도 보면 ebp 264부터 입력값을 받는 것을 볼 수 있다.
quit으로 gdb 종료
5. level11과 같은 방법으로 환경변수를 이용해 문제를 해결하려고 했는데 계속 실패해서 조사 해 보니 strcpy함수와 gets함수는 같은 원리를 적용하더라도 방법이 조금 달랐다.
쉘코드가 들어간 환경변수 EGG 등록
(근데 왜 nop이 15개 들어가야 하는걸까?)
작은따옴표와 큰 따옴표 외에도 ~키에 있는 `도 사용되기 때문에 잘 보고 입력해야한다. 실수가 자주 발생하는 부분이다.
이것이 환경변수의 주소값을 가져오는 코드이다.(인터넷 참고)
esc + :wq입력으로 저장 후 vi편집기 종료
getenv.c 파일 생성 확인 후 컴파일(gcc -o getenv getenv.c)
getenv 파일 실행(./getenv)
환경변수 주소 획득(bffffc6e) -> 컴퓨터마다 다르게 나타나는 듯 하다
6. 버퍼오버플로우 발생시켜 비밀번호 획득
홈 디렉토리로 이동(cd ~)
NOP(no operation = 0x90)으로 버퍼 채워주고 환경변수 주소를 입력(little endian 방식)해서 실행하면 쉘이 열린다.
id로 현재 상태를 확인 해 보니 uid가 level13으로 변경되었다.
my-pass 로 비밀번호 획득
<풀이 요약>
1. 파일 목록 확인(ls),힌트 파일 내용 확인(cat hint)
2. attackme 파일 확인
3. attackme와 같은 내용 파일 생성
4. gdb로 파일 분석
5. 환경변수 등록 후 주소 확인
6. bof발생시켜 비밀번호 획득
이번엔 level11과 거의 유사해서 문제가 어렵게 느껴지지 않았다.
어렵지 않다고 다 풀 수 있는 실력은 아직 아니지만...^^
'해킹 공부 > 시스템 해킹' 카테고리의 다른 글
해커스쿨 LOB level 2 (0) | 2022.03.20 |
---|---|
해커스쿨 LOB level 1 (0) | 2022.03.20 |
해커스쿨 FTZ level11 - 환경변수, shellcode, BOF (0) | 2021.11.23 |
FTZ 해커스쿨 level10 - 공유 메모리 (0) | 2021.11.18 |
FTZ 해커스쿨 level9 - 버퍼오버플로우(GDB 이용) (0) | 2021.11.14 |