login as : level8
password : break the world
/etc/passwd 파일과 /etc/shadow 파일
위의 두 파일은 리눅스에서 중요한 파일들 중 하나이다.
/etc/passwd 파일은 계정의 사용 환경과 권한에 대한 정보가 있다.
/etc/shadow 파일은 계정의 패스워드와 유효기간에 대한 정보가 들어있다.
passwd 파일은 root 계정만 쓰기가 가능하고, shadow 파일은 root 계정만 볼 수 있다.
즉, 암호화 패스워드를 얻었다는 것은 root 권한을 획득했다는 의미이다.
/etc/passwd 파일 내용 구조
level8:x:3008:3008:Level 8:/home/level8:/bin/bash
위의 사진 속 내용은 /etc/passwd 파일의 내용이다.
이 중 level8 사용자를 예시로 들어 구조를 봐본다.
아이디 : 패스워드 : UID : GID : 사용자명 : 홈 디렉토리 : 로그인 셸
콜론(:)을 기준으로 총 7개의 필드가 있고, 각 필드의 의미는 위와 같다.
패스워드 부분은 전부 x로 되어 있는데, 이는 /etc/passwd 파일은 모든 사용자들이 쓸 수는 없어도 볼 수는 있으므로 x로 표기하고 실제로 암호화 된 패스워드는 /etc/shadow 파일에 저장한다.
/etc/shadow 파일 내용 구조
level8:$1$RAX6DVuv$pz1jroMtYBPdrdn4O3mkl0:11040:0:99999:7:::134550620
위의 사진 속 내용은 /etc/shadow 파일의 내용이다.
이 중 level8 사용자를 예시로 들어 구조를 봐본다.
1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9
1 : 아이디
2 : 암호화된 패스워드
3 : 마지막 패스워드 변경일(1970.1.1 부터 계산한다.)
4 : 패스워드 변경 주기 일수("0일"이면 설정하지 않은 것이다.)
5 : 현재 패스워드의 유효 기간("99999일" 까지만 사용 가능하다.)
6 : 패스워드 사용 만료전, 경고 표시 일 수("99993일" ~ "99999일" 경고 표시)
7 : 패스워드 만료 후, 계정을 비활성화 하는 일 수("-1"은 비활성화됐다는 것이다.)
8 : 계정 만료 일 수(1970.1.1부터 계산하고, "-1"은 만료됐다는 의미)
9 : 추가 사용을 위해 예약된 필드
콜론(:)을 기준으로 총 9개의 필드가 있고, 각 필드의 의미는 위와 같다.
참고)
암호화 알고리즘은 MD5 -> SHA-512 -> (현재)yescrypt이다.
(FTZ 서버는 오래되었으므로 yescrypt가 아닌 MD5로 되어 있다.)
즉, 단방향 알고리즘인 Hash 알고리즘을 사용하여 저장한다.
하지만 Hash 알고리즘의 문제는 동일한 평문은 항상 동일한 암호문을 만들어 내기 때문에 레인보우 테이블 공격에 취약하다.
find / -size 2700c -exec ls -l {} \; 2>/dev/null
위의 find 명령을 이용해서 크기가 2700byte인 파일들을 찾는다.
그러면 위의 사진과 같이 파일들이 나오는데 4개의 파일 중 그룹 권한이 level8인 /etc/rc.d/found.txt 파일이 있다.
/etc/rc.d/found.txt 파일은 root 계정과 level8 계정만 읽을 수 있고, root 계정만 쓰기까지 가능하다.
참고사항
man find를 참고하면 +n은 n보다 큰 수, -n은 n보다 작은 수, n은 n과 같은 수를 가진 것을 찾는다는 의미이고,
n 다음 b,c,k,w를 붙일 수 있는데, 각각 한 블록, 1byte, 1kb, 2byte 워드 크기를 의미한다.
level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524
/etc/rc.d/found.txt 파일의 내용을 보면 위와 같이 같은 내용이 여러 번 적혀있다.
풀이
https://www.openwall.com/john/
위의 링크에서 John the Ripper를 다운로드한다.
(John the Ripper는 로컬 패스워드 크랙용 툴이다.)
7z 또는 zip 파일 둘 중 아무거나 다운로드 하면 된다.
다운로드가 다 되면 압축을 해제한다.
그러면 위와 같이 폴더들이 있다.
그 중 run 폴더 안으로 들어간다.
그럼 여러 가지 파일들이 있고 이 중 john.exe 파일도 있다.
run 폴더 안에 pass.txt 파일을 만든다.
level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524
pass.txt 파일에 위에서 봤던 /etc/rc.d/found.txt 파일의 내용 중 한 줄을 가져와 복붙한다.
그리고 cmd 또는 powershell에서 위와 같이 run 폴더로 이동한 후
패스워드 사전 공격
.\john.exe pass.txt
or
.\john.exe --format=md5crypt --wordlist=password.lst pass.txt
위의 두 명령어 중 하나를 택해 입력한다.
(필자는 자세한 이해를 위해 아래의 명령을 택했다.)
그러면 위와 같이 출력되고, 비밀번호는 apple이며 패스워드를 크랙하는데 걸린 시간은 0초라고 한다.
즉, John the Ripper를 다운로드 한 뒤 압축 해제를 하면 그 안에 패스워드 사전이 있고, 해당 사전에서 값을 가져와 비교하는 방식의 패스워드 사전 공격을 통해 얻은 패스워드의 평문이 apple이라는 것이다.
브루트포스 공격
.\john.exe --format=md5crypt --incremental:alpha pass.txt
위의 명령을 통해 브루트포스 공격을 할 수도 있다.
위의 명령에서 브루트포스 공격 조건은 단순히 알파벳의 조합이다.
john the ripper는 john.pot이라는 파일에 크랙 결과를 저장하는데, 패스워드를 다시 크랙하려고 john the ripper를 사용하려면 john.pot 파일을 지워줘야 한다.
john.pot 파일을 지우지 않고 다시 크랙하려고 시도한다면 "No password hashes loaded" 와 같은 에러 메시지가 출력되면서 크랙이 되지 않는다.
패스워드 확인
su level9
pw : apple
my-pass
level9 계정의 비밀번호는 apple인 것을 확인할 수 있다.
참고
John the Ripper 말고도 여러 패스워크 크랙 툴이 있지만, 원격으로도 가능한 hydra 라는 툴이 있다.
hydra -l level9 -P password.lst -e ns -vV [ftz IP] telnet
위의 명령을 통해 level9 계정의 비밀번호를 알아내고 telnet으로 로그인이 가능하다.
hydra는 gui 버전도 있지만, 다른 GUI 툴로 Brutus-AE2도 있다.
'전쟁 > hackerschool ftz' 카테고리의 다른 글
[hackerschool FTZ] level10(공유 메모리에 데이터 읽고 쓰기) (0) | 2022.12.22 |
---|---|
[hackerschool FTZ] level9(BOF 입문, 여러 shell script들) (0) | 2022.12.18 |
[hackerschool FTZ] level7(2진수를 ASCII 코드로) (0) | 2022.12.16 |
[hackerschool FTZ] level6(시스템 인터럽트) (0) | 2022.12.15 |
[hackerschool FTZ] level5(레이스 컨디션) (0) | 2022.12.15 |