ID : level8

password : break the world

 

1) 이번에는 setuid 가 걸린 파일이 아닌, 

find / -user level9 

으로 찾아보자

2) 결과가 나오지 않는다, 결국 파일 크기를 보고 찾아서 결정을 해야한다는 소리이다.

 

 

find 의 -size 옵션

특정 용량을 찾기 위한 옵션이다.

 

3) 이에 따라 find / -size 2700c 2>/dev/null 

을 입력해본 결과.. 여러 파일이 뜨는데

딱봐도 정답인거같은 found.txt. 가 보인다

 

해당 파일의 내용을 보도록 하자

 

4) 해당 파일의 내용을 보니

반복되는 문자가 끝없이 나온다.

 

마치 암호문 같은데 어떤 암호문인지 인지 할수가 없다.

 

하지만 문자열을 자세히 보면

: (콜론) 으로 한문자 한문자 구분되어 있는걸 볼수 있다.

 

트레이너에서 배웠던 passwd 파일과 동일한 구조이다.

문제에서 shadow 파일이라고 알려 주었으니 shadow 파일의 구조에 대해 알아보도록 하자

 

[/etc/shadow]
root:$~$~$~ : 16431 : 0 : 99999 : 7 :  :  :
|-1--|----2------|----3----|-4-|----5–---|-6-|7|8|

1.Login Name : 사용자 계정각 항목별 구분은 :(콜론) 으로 구분되어있으며 콜론과 콜론 사이 각 필드에는 다음과 같은 구조로 구성되어 있습니다.
2.Encrypted : 패스워드를 암호화시킨 값
3.Last Changed : 1970년부터 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산
4.Minimum : 패스워드가 변경되기 전 최소사용기간(일수)
5.Maximum : 패스워드 변경 전 최대사용기간(일수)
6.Warn : 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일수
7.Inactive : 로그인 접속차단 일 수
8.Expire : 로그인 사용을 금지하는 일 수 (월/일/연도)
9.Reserved : 사용되지 않음

 

[출처] shadow파일 구조|작성자 killberos

 

 

위와 같은 구조로 되어 있으며 그렇다면 우리가 필요한 부분은 pass 워드를 암호화 시킨 값이기 때문에

 

$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.

 

이부분을 해석 해야 한다는 뜻이 된다.

 

이를 해석하기 위해서는 크랙 툴을 별도로 설치해야 한다.

https://www.openwall.com/john/ 

 

John the Ripper password cracker

John the Ripper password cracker John the Ripper is a fast password cracker, currently available for many flavors of Unix, macOS, Windows, DOS, BeOS, and OpenVMS. Historically, its primary purpose is to detect weak Unix passwords. These days, besides many

www.openwall.com

사이트에 접속하여 툴을 다운로드 받도록 하자.

 

* 컴퓨터가 문제인지 버전이 문제인지 개인 노트북에서는 존더 리퍼가 실행되지 않는다.

이 툴은 허술한 비밀번호를 해석해주는 툴이라고 한다..

 

검색결과

 

존더리퍼 프로그램에 해당 shadow 파일을 끌어다 놓으면 level9에 대한 비밀번호가 출력된다고 한다.

 

" apple "  

 

10단계까지 하고 존더리퍼가 안돌아가는 이유를 찾아봐야겠다.

 

ID : level7

password : come together

 

1) hint 내용을 읽어본다.

의미심장한 내용이 나오지만 

find 명령어로 level8 권한의 setuid 를 찾아보도록.

 

2) 해당 파일이 setuid 가 걸린 파일이다.

실행해 보도록 한다.

 

3) 실행하니 비밀번호를 입력하라는 문구가 나왔고, 

엔터를 누르니 해당 메세지가 나왔다.

 

* 인터넷 검색 결과 서버 설치시의 문제라고 하여, 

/bin/ 디렉토리에 wrong.txt. 파일을 만들고, 

--_--_- --____- ---_-__ --__-_-

 

(루트권한 으로 접속ID : root / password : hackerschool) 위 문자를 복사하여 넣는다.

 

 

 

4) 이후, 같은 방법으로 사용하니 다음과 같은 문자가 출력되었다.

 4가지 힌트중, 2진수를 10진수로 바꿀수 있는가? 

라고 적혀있는것을 보고 분석을 해봤다.

 

- 는 1로, _ 는 0으로 분석하니

 

1101101 1100001 1110100 1100101

이라는 숫자가 나왔다. 10진수로 분석해 보면

109 97 116 101 

이라는 숫자가 나온다.

 

이것을 입력해 보았더니

 

5) 정답은 아닌것 같다.

힌트를다시 보자

1. 정답은 가까운곳에 ==> 비밀번호를 틀리게 작성하면 힌트를 줌

2. 상상력을 총 동원하라 ==> - 를 1로, _를 0으로

3. 2진수를 10진수로 ==> 분석 완료

4. 계산기 설정을 공학용 계산기로 바꿔라 

 

4번의 힌트가 무슨뜻인가 하고 공학용 계산기로  계산해 봤다.

 

6) 진수 변환기 계산기를 통해 확인해 보았다.

2진수를 입력하니 10진수, 16진수, 8진수, ASCII 코드가 나왔다.

16진수와 8진수와 같이 숫자로 입력하는것은 아닐꺼라고 생각했다.

 

순서대로 ASCII 코드를 보니

mate 

라는 문자가 성립됬다.

 

7) mate 를 입력하니  level8의 비밀번호를 알수 있었다.

" break the world "

ID : level6

password : what the hell

 

1) 로그인 하자마자 바로 이런 창이 떳다.

진짜 말그대로

what the hell

 

2) 아무 키를 입력하니 다음과 같은 창이 떳다. 

하나하나 살펴보도록 하자

 

3) 먼저 1번을 선택하여 하이텔 이라는 곳에 접속을 해 보았다.

trying IP주소 .. 가 나오더니

이내 종료가 되었다.

...

 

2번 3번을 모두 시도했지만 동일한 방법으로 종료 되었다.

그럼 해당 서비스를 강제로 종료하면 되지 않을까?

리눅스에서 서비스를 종료하는 방법은

 

ctrl + c 

를 누르면 된다 시도해보자.

 

4) 사용할수 없다고 한다.

그럼 어떻게 풀어야 할까.

 

해당 서비스 이전 힌트 단계에서 사용 해 보도록 해봣다

 

5) ?...

바로 프롬프트와 쉘이 나왔다.

ls 를 통해 확인해보니

 

6) 파일 목록이 출력되며 

hint 내용을 보니 같은 내용이 실행되었다.

 

7) 목록중 password 파일이 있길래. 실행해 보았다.

비밀번호를 바로 알려준다

 

" come together "

ID : level5

password : what is your name?

 

1) id 명령어를 통해 자신의 정보 확인

 

2) cat hint 를 입력해 문제 정보 체크

" /usr/bin/level5 프로그램은 /tmp 디렉토리에 level5.tmp 라는 이름의 임시파일을 생성한다. 

이를 이용하여 level6의 권한을 얻어라."

 

3) find / -perm -4000 -user level6

를 입력해보니 역시나 문제에서 알려준 디렉토리의 파일이 level6의 권한을 가지고 있다.

 

임시파일을 생성하는것으로 보아, 해당 임시파일이 실행될때 my-pass 를 입력하면 비밀번호가 출력될 것이다.

일단 해당 디렉토리로 이동해보자

 

4) 역시나 setuid 가 걸려있으며, 권한은 level6에 있다.

 

5) 임시파일이 생성되는 곳에 가서 확인을 해 보았다.

임시파일은 실행되는 동안 생성되어 실행이 끝나면 자동으로 삭제가 된다.

그렇다면 실행되는 동안 생성된 파일의 내용을 다른 txt 파일에 옮기면 비밀번호를 알수있지 않을까?

 

6) 생각보다 간단한 문제인것 같다.

한번에 여러 명령어를 실행하기 위해

/usr/bin/ 디렉토리에서

 

level5 ; ls -al level5.tmp

 

를 실행해 해당 파일의 정보를 보았다.

해당 파일의 내용을 읽을순 있지만 실행은 하지 못한다.

 

이곳에 

cp 또는 mv 명령어를 통하여 해당 파일이 생성될때 옮겨버리면 되지 않을까 싶었다.

 

7) 접근 권한이 제한되어 있다.

따라서 해당 파일을 옮기거나 복사하지는 못한다.

 

하지만 해당 파일은 읽는것에 대한 권한이 풀려있다.

즉, 해당 내용을 읽을수 있다는 것이기 떄문에 단순하게 cat 명령어를 통해 확인할수 있을것 같았다.

 

8) 성공,

level5 가 실행되는 동안, 해당 임시파일의 내용을 출력하도록 하니

다음 레벨의 비밀번호가 출력되었다

 

" what the hell "

 

ID : level4

password : suck my brain

 

1) id 명령어를 통해 정보를 확인한다

" user 아이디는 level4 이고, 그룹명과 그룹또한 level4이다. "

 

2) cat hint 를 통하여 해당 문제 알아보기

" 누군가 /etc/xinetd.d/ 에 백도어를 심어놓았다.! "

문제를 보아하니 해당 파일이 setuid가 걸려있는것 같다.

확인해 보자

 

3) find / -perm -4000 -user level5 2>/dev/null

를 입력해도 아무 파일이 나오지않는다. 

문제 파악을 잘못한것 같아 일단 문제에 있는 디렉토리로 이동해 보기로 했다.

 

4) 해당 디렉토리로 이동한후, ls 명령어를 통해 파일 및 디렉토리 목록을 출력해 보니

예고와 같이 backdoor 파일이 있었다.

확인해보기로 한다.

 

5) 보아하니

finger 명령어 서비스가 실행되면,

level5권한으로 /home/level4/tmp/backdoor 가 실행되는것 같다.

 

finger 명령어에 대해 알아보도록 하자.

* finger 명령어 : 로컬 사용자 또는 원격 사용자의 계정 정보를 확인하는 명령어

 

6) 이상하게 backdoor 파일이 말하는 경로에

backdoor 파일은 없다.

 

그러므로 현 상태에서 finger 를 사용해도

파일이 없기때문에 아무런 반응도 없을것이다.

 

 

7) 보는바와 같이 정상적으로 finger 명령어가 수행되며, 아무 반응도 없는것을 확인할수 있다.

 

그렇다면

/home/level4/tmp 디렉토리에

backdoor 파일을 생성하여 이곳에 my-pass 가 실행되게 하면

level5 권한으로 my-pass 가 실행될것이다.

 

확인해 보자

 

8) 프로그램 파일을 만들기 위해 간단한 c 코드를 작성하였다.

VI 편집기를 이용할수도 있지만 , 트레이너 에서 배웠던 cat 과 리다이렉션( > ) 을 통해 코드를 작성해 본다.

 

#include <stdio.h>

int main()

{

    system("my-pass");

    return 0;

}

 

다음과 같이 코드를 작성하고 Ctrl + d 키를 눌러 저장을 한다.

 

9) 정상적으로 저장되었는지 확인하기 위하여

cat backdoor.c 를 입력해 내용을 확인한다.

 

이제 해당 코드를 프로그램 파일로 만들기 위하여 해당 파일을 컴파일 해보도록 하자

 

 

10 ) 컴파일을 위해

gcc [소스코드] -o [프로그램명] 순으로 입력한다.

 

11) ls 명령어를 통해서 해당 프로그램을 확인한다.

 

이제 finger 명령어를 수행하면 실행이 될것이다

 

12) 예상과 달리 아무런 반응이 없다.

 

13) finger 명령어 수행에 문제가 있나 하여 해당 경로를 검색한후, 

finger 의 내용을 확인해 보기로 했다.

 

14) /etc/xinetd.d/backdoor 파일과 findger 파일과의 차이를 보면

disable 값이 

backdoor 는 no 로 되어있고,

finger 는 yes로 되어있다.

 

disable 값은

yes 일 경우, 외부에서 실행되면 실행이 안되고,

no 일 경우, 외부에서 실행해야 실행이 된다.

 

따라서 finger 를 외부에서 사용하도록 하기 위해서는 외부서버의 유저 정보를 가져와야 하는데 이를 수행하는 명령어가

finger [user]@[host] 이다.

 

이를 통해 

finger @localhost 를 실행하면 외부에서 실행되게 되어

finger 는 실행되지 않고

backdoor 가 실행될 것이다.

 

확인해보자

 

15) 위와같이 finger @localhost 를 실행하니

level5에 대한 비밀번호가 출력되었다.

 

* 이해 안가는 부분.

- 한번 실행시 이상한 문자가 출력되었으며,

finger @localhost 

를 반복하여 입력하니

어느순간 비밀번호가 출력이 되었다.

 

예상하는 바로는 외부 유저정보를 받아오는부분의 문제인것 같은데

확실하진 않다.

 

이유를 도저히 모르겠지만

 

아무쪼록 

level5의 비밀번호는 "what is your name?

이다.

+ Recent posts