본문 바로가기
Security/OverTheWire

Leviathan 0 1 2

by curious week 2026. 3. 16.

Level 0

SSH Information
Host: leviathan.labs.overthewire.org
Port: 2223
Username: leviathan0
Password: leviathan0

ssh 접속

ssh leviathan0@leviathan.labs.overthewire.org -p 2223

일단 들어가서 파일을 확인

일단 의심스러운 .backup 파일을 분석해본다.

-  : 일반 파일
d  : 디렉토리
l  : 심볼릭 링크
c  : 문자 장치
b  : 블록 장치
s  : 소켓
p  : 파이프

그 뒤로 문자는 읽기 쓰기 실행 권한을 소유자 그룹 나머지사용자 순으로 3개씩 나타낸다.

다음 숫자는 하드 링크(물리적 데이터를 가리키는 수) 카운트다. 디렉토리의 경우 2(.(현재 디렉토리) / ..(부모 디렉토리)) + 하위 디렉토리 수를 나타낸다. 

그 다음 소유자와 그룹이 나온다. 마지막으로 크기와 시간이 나온다.

.backup에 파일이 있는 걸 확인했으니 들어가본다.

backup 파일

leviathan이라는 이름이 있을 거 같으니 확인해본다.

cat bookmarks.html | grep leviathan

3QJ3TgzHDq를 입력하니 leviathan1에 접속할 수 있었다.


Leviathan1

ssh leviathan1@leviathan.labs.overthewire.org -p 2223

보면 check가 의심스럽다. 실행권한이 있으니 실행해본다

./check

password가 걸려있다.

먼저 유의미한 문자열을 찾아본다.

strings ./check

의미있는 문자열을 찾지 못해서 ltrace(라이브러리 함수를 관찰하는 도구)로 함수를 찾아본다.

ltrace ./check

 

  • strcmp → 문자열 비교 / 1은 서로 다르다. 0은 같다.
  • getchar → 문자 단위 입력
  • fgets → 문자열 입력
  • puts, printf → 출력
  • system → 셸 명령 실행 가능성
__libc_start_main(0x80490ed, 1, 0xffffd474, 0 <unfinished ...>
printf("password: ")                           = 10 # 10글자 출력했다
getchar(0, 0, 0x786573, 0x646f67password: test
)              = 116 # getchar 문자 하나를 읽음. 116은 ASCII 코드로 't'
getchar(0, 116, 0x786573, 0x646f67)            = 101 # 101 = 'e'
getchar(0, 0x6574, 0x786573, 0x646f67)         = 115 # 115 = 's'
strcmp("tes", "sex")                           = 1
puts("Wrong password, Good Bye ..."Wrong password, Good Bye ...
)           = 29
+++ exited (status 0) +++

 

test를 입력했고 tes와 sex를 비교했기 때문에 password가 sex일 가능성이 있다.

whoami를 입력해서 권한을 획득했다는 걸을 알 수 있다.

cat /etc/leviathan_pass/leviathan2

위치를 출력하면 값이 나온다.