Level4
이전 레벨에서 얻은 패스워드를 입력한 뒤 ls -al 명령어로 먼저 디렉토리에 있는 파일을 확인해 준다.
hint 파일이 있으니 cat 명령어로 열어보겠다.
누군가가 위 주소를 가진 디렉토리에 백도어를 심어놓았다고 한다. 일단은 해당 디렉토리로 이동해보자.
xinetd.d 디렉토리까지 이동했다. 여기서 ls -al 명령어로 내용물을 확인해 보면?
진짜로 backdoor라는 파일이 있다! cat 명령어로 열어보도록 하자.
열어보니 이런 텍스트가 나왔다. 해석하자면 길지만 당장 필요한 정보는 다음과 같다.
- finger라는 이름을 가진 서비스
- 사용 가능함
- 소유주는 level5 (다음 레벨)
- 서비스가 연결되면 /home/level4/tmp 라고 하는 절대경로 내에 있는 backdoor라는 프로그램을 실행함
그 외에도 서버 연결에 실패하면 로그 파일에 유저 아이디를 기록한다던지 하는 내용이 있지만 지금은 넘어가자.
중요한 것은 이 서비스가 다음 레벨의 권한으로 특정 프로그램을 실행시켜 준다는 것이다.
그러면 저 경로를 찾아가면 저 프로그램이 존재할까? 한번 방문해 보자.
/home/level4/tmp 경로를 방문해 ls -al 명령어로 내용물을 읽었다.
그런데 디렉토리만 있을 뿐 backdoor라는 프로그램은 존재하고 있지 않다.
그러면 이 디렉토리에 우리가 직접 backdoor라는 이름을 가진 프로그램을 만들어서,
그 프로그램이 my-pass 명령어를 시스템에 전달할 수 있도록 한다면? 일이 쉬워지지 않을까?
디렉토리에 직접 c 코드를 작성해 프로그램 파일을 만들자.
프로그램 파일을 만드는 방법은 이전 포스팅에 정리한 바 있다.
거창한 것은 필요없고, 평소에 코드를 짜던 대로 짜되 system("my-pass");만 들어가게 해주면 된다.
+) 프로그램 코드를 작성할 때는 백스페이스가 바로 먹히지 않고 이상한 기호가 대신 출력될 수 있다.
ctrl키와 백스페이스 키를 같이 누르면 제대로 작동된다.
다 작성했다면 gcc -o 명령어로 컴파일해주자.
컴파일한 뒤 다시 ls -al로 디렉토리 안을 보면 코드인 c 파일과 컴파일된 프로그램인 backdoor을 볼 수 있다.
준비가 끝났으니 finger 서비스를 실행시켜 주자. 뒤에 @localhost를 붙여야만 제대로 실행된다.
패스워드는 아래에 흰 글씨로만 적어두겠다.
what is your name?
Level5
다음 레벨로 넘어왔다. 역시 똑같이 ls -al 파일로 디렉토리 안을 훑어주고,
hint 파일이 있으므로 cat 명령어로 열어주었다.
/usr/bin 디렉토리에 있는 level5라는 프로그램이 /tmp 디렉토리에 level5.tmp라는 임시파일을 만든다고 한다.
이를 이용하면 level6의 권한을 얻을 수 있댄다.
정말 그런지 한번 보자. /usr/bin 디렉토리로 이동해 level5 프로그램을 실행시킨 뒤,
/tmp 디렉토리로 이동해 내용을 살펴보았다.
level5.tmp라는 파일이 분명 생성되었어야 할 텐데, 없다.
이것은 level5.tmp가 임시파일이기 때문에 생성 직후 없어져버려서 그런 것 같다.
이 파일이 없어지지 않게 해두고 내용을 확인할 방법이 없을까?
여기서 우리는 level4에서 했던 발상을 다시 가져올 필요가 있다. 파일이 없으면 만들면 된다.
만약 우리가 선수를 쳐서, /tmp 디렉토리에 먼저 level5.tmp라는 파일을 임의로 만들어 두고
그 다음에 level5 프로그램을 실행시켜서 -> level5.tmp라는 파일을 또 만들게 하면?
같은 이름의 파일이므로 내용만 덮어쓰기(덤프)되고,
파일은 파일대로 (우리가 만들었으므로) 바로 사라지지 않고 남아있지 않을까?
한번 해보자.
/tmp 디렉토리에 cat > 명령어로 level5.tmp 파일을 만든다.
내용은 아무거나 상관없다. 어차피 정상적으로 덮어쓰기된다면 사라질 것이다.
(텍스트 파일을 작성할 때도 백스페이스 키를 누를 땐 ctrl 키를 같이 눌러주어야 입력취소가 된다.)
다 작성했다면 ctrl + D 키로 저장해주고, 다시 디렉토리 안을 본다.
아까 만들었던 level5.tmp 파일이 잘 있다. 열어보면 우리가 입력했던 아무말이 그대로 들어있다.
이제 /usr/bin 디렉토리의 level5 프로그램을 실행시키러 가자.
/usr/bin 디렉토리로 이동했다. level5 프로그램이 있는지 한번 검색도 돌려보았다. 잘 있다.
level5 프로그램을 실행시키고, 이제 다시 /tmp 디렉토리로 가보자.
/tmp 디렉토리로 다시 와서 안을 확인해 보니 level5.tmp 파일이 있다.
열어보면, 우리가 입력했던 아무말이 아닌 다음 레벨로 가는 패스워드가 덮어쓰기되어있다.
패스워드는 역시 아래에 흰 글씨로 기록해 두었다.
what the hell
'LINUX' 카테고리의 다른 글
[시스템해킹] stage 3, 4 (1) | 2022.09.19 |
---|---|
[시스템해킹] Stage 1, 2 (0) | 2022.09.08 |
7주차 - [F.T.Z] Level 3 (0) | 2022.06.19 |
6주차 - [F.T.Z] LEVEL 1, 2 (0) | 2022.05.28 |
5주차 - [Bandit: Over the wire] Level 6 ~ Level 10 (0) | 2022.05.16 |