정보보안, 모의해킹 분야를 공부하기 위해서는
리눅스 사용에 익숙해져야 하는데
아래 워게임 사이트의 Bandit 시리즈 문제 풀이를 통해
리눅스의 핵심 명령어들과 쉽게 친해질 수 있다.
https://overthewire.org/wargames/bandit/
[스포주의]
아래 단계별 핵심 커맨드와
다음 단계로 가기 위한 암호 코드가 있음
LV0 -> LV1
$ ls
$ cat readme
암호 : boJ9jbbUNNfktd78OOpsqOltutMc3MY1
LV1 -> LV2
$ cat ./-
or
$ cat <-
암호 CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9
LV2 ->LV3
# cat 'spaces in this filename'
or
$ cat spaces\ in\ this\ filename
암호 : UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK
LV3 ->LV4
$ ls -al
암호 : pIwrPrtPN36QITSp3EQaw936yaFoFgAB
LV4 -> LV5
$ file ./*
암호 : koReBOKuIDDepwhWk7jZC0RTdopnAYKh
LV5 -> LV6
$ du -a -b | grep 1033
암호 : DXjZPULLxYr17uwoI01bNLQbtFemEgo7
LV6 -> LV7
$ find / -user bandit7 -group bandit6 -size 33c 2>/dev/null
암호 : HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs
LV7 -> LV8
$ cat data.txt | grep '^millionth'
암호 : cvX2JJa4CFALtqS87jk27qwqGhBM9plV
LV8 -> LV9
$ sort data.txt | uniq -c
(sort는 uniq이랑 짝꿍. -c 는 count 옵션)
암호 : UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR
LV9 -> LV10
$ strings data.txt | grep =
암호 : truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk
LV10 -> LV11
$ cat data.txt | base64 -d
암호 : IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR
LV11 -> LV12
$ cat data.txt | tr 'n-za-mN-ZA-M' 'a-zA-Z'
암호 : 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu
LV12 -> LV13 (귀찮음 주의)
1. bandit12 home에는 권한이 없어 /tmp 밑에 디렉터리를 만들어
해당 파일을 복사 후 진행하라고 한다.
$ mkdir -p /tmp/pass
$ cp data.txt /tmp/pass
2. 새로 생성한 디렉터리로 이동 후 파일 검사 및 형식 변경
$ xxd -r data.txt d1 (xxd는 shell 상에서 binary파일(이진파일)의 hexdump(16진수 덤프)를 보여주는 CMD,
-r 옵션은 hexdump를 binary 파일로 바꿔준다. 바꾼 후 d1 파일에 리다이렉션 > d1)
$ file d1 (파일 형식 확인)
data: gzip compressed data, was "data2.bin", last modified:
Thu May 7 18:14:30 2020, max compression, from Unix
(file CMD로 변환한 파일을 조회하자 gzip으로 압축된 data2.bin 파일이 발견됨)
3. gzip 파일 압축 해제 절차
$ mv d1 data2.bin.gz (파일명 및 확장자 변경)
$ gzip -d data2.bin.gz (gzip 압축해제)
$ ls (gzip 압축 해제 시 나오는 파일 확인)
data2.bin
$ file data2.bin (해당 파일 형식 확인)
data2.bin: bzip2 compressed data, block size = 900k
4. bzip2 파일 압축 해제 절차
$ mv data2.bin data2.bin.bz2 (확장자 변경)
$ bzip2 -d data2.bin.bz2 (bzip 압축 해제)
$ ls (해제된 파일 명 확인)
$ file data2.bin (압축 해제된 파일 형식 확인)
data2.bin: gzip compressed data, was "data4.bin", last modified: Thu May 7 18:14:30 2020, max compression, from Unix
: 이름이 'data4.bin'에 gzip으로 압축되어 있음
5. 다시 gzip 압축 해제
$ mv data2.bin data4.bin.gz
$ gzip -d data4.bin/gz
$ file data4.bin
data4.bin: POSIX tar archive (GNU)
: 이번에는 tar 형식으로 압축되어 있다.
6. tar 압축 해제
$ mv data4.bin data4.bin.tar (확장자 변경)
$ tar -xvf data4.bin.tar (압축 해제)
data5.bin
$ file data5.bin (해제된 파일 형식 확인)
data5.bin: POSIX tar archive (GNU)
7. 다시 tar 압축 해제
$ mv data5.bin data5.bin.tar (확장자 변경)
$ tar -xvf data5.bin.tar (압축 해제)
data6.bin
$ file data6.bin (해제된 파일 형식 확인)
data6.bin: bzip2 compressed data, block size = 900k
8. 이번에는 bzip2 압축 해제
$ mv data6.bin data6.bin.bz2 (확장자 변경)
$ bzip2 -d data6.bin.bz2 (압축 해제)
$ file data6.bin (파일 형식 확인)
data6.bin: POSIX tar archive (GNU)
9. 다시 tar
$ mv data6.bin data6.bin.tar (확장자 변경)
$ tar -xvf data6.bin.tar (압축 해제)
data8.bin
$ file data8.bin
data8.bin: gzip compressed data, was "data9.bin", last modified: Thu May 7 18:14:30 2020, max compression, from Unix
10. 이번에는 또 gzip
$ mv data8.bin data8.bin.gz (확장자 변경)
$ gzip -d data8.bin.gz (압축 해제)
$ file data8.bin (파일 형식 확인)
data8.bin: ASCII text
11. ASCII 형식이니 cat CMD로 바로 확인
암호: 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL
LV13 -> LV14
$ ls (인증키 파일이 있는지 확인)
$ ssh -i sshkey.private bandit14@localhost
(ssh -i 옵션은 identity_file)
암호 : 4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e
LV14 -> LV15
현재 단계의 암호를 localhost의 포트 30000에 제출시 다음레벨
비번을 얻을 수 있다. nc(netcat) CMD 공부 필요!
$ cat /etc/bandit_pass/bandit14
$ echo 4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e | nc localhost 30000
Correct!
암호 : BfMYroe26WYalil77FoDi9qh59eK5xNr
LV15 -> LV16
현재 단계의 암호를 SSL 인증 방식을 사용해 localhost 포트 30001에 제출하면
다음 레벨의 암호 키를 받을 수 있다. openssl 공부 필요!
-사용 CMD 설명-
ssh : OpenSSH SSH client (remote login program)
telnet : User interface to the TELNET protocol
nc : TCP/IP swiss army knife
openssl : OpenSSL command line tool
s_client : SSL/TLS client program
nmap : Network exploration tool and security / port scanner
$ openssl s_client -connect localhost:30001
: HTTPS 디버깅(httpd의 SSLCertificateChainFile, SSLCACertificateFile 정상 설정 여부 확인 등)이나
curl 등의 ca bundle에 등록하기 위한 목적으로 서버가 사용하는 SSL 인증서를 추출할 경우 위 명령어 사용
Correct!
암호 : cluFn7wTiGryunymYOu4RcffSxQluehd
[참고]
문제에 도움말로 혹 기존 암호를 입력했는데 결괏값이
“HEARTBEATING” and “Read R BLOCK”로 나오는 경우에
해결 방안으로 -ign_eof를 사용하라고 나온다.
$ openssl s_client -connect localhost:30001 -ign_oef
LV16 -> LV17
1. 우선 열려있는 포트 확인
$ nmap localhost -p 31000-32000
Starting Nmap 7.40 ( https://nmap.org ) at 2020-12-02 07:19 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00036s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
31046/tcp open unknown
31518/tcp open unknown
31691/tcp open unknown
31790/tcp open unknown
31960/tcp open unknown
2. 활성화되어 있는 포트 하나하나에 SSL 접속을 시도해 현 레벨 암호를 넘겨주면
다음 레벨로 가는 인증키를 보내주는데 주의 사항으로.
: 포트 두 군대에서 키 비슷한 것들이 나오는데
올바른 키는 'BEGIN RSA PRIVATE KEY' 값을 보내주니 확인하자!
: openssl 명령어 맨 뒤에 -ign_eof 옵션을 붙이지 않고 실행하면
RSA PRIVATE KEY를 발견할 수 없으니 반드시 붙여서 실행하자.
$ echo cluFn7wTiGryunymYOu4RcffSxQluehd | openssl s_client -connect localhost:31790 -ign_eof
-----BEGIN CERTIFICATE-----
MIICBjCCAW+gAwIBAgIEcGzfrDANBgkqhkiG9w0BAQUFADAUMRIwEAYDVQQDDAls
b2NhbGhvc3QwHhcNMjAxMDE0MDg0MjAyWhcNMjExMDE0MDg0MjAyWjAUMRIwEAYD
VQQDDAlsb2NhbGhvc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMAcqhT+
E4ArtokX8WTkgxgFrZ7LmCdI8Y5lK2w87BXclyGVjy2DhiIrhPd1hi6a77yB6DPt
iQOB1y1LyTIQ45WwM8FL1kdCjHYrJn5LmfYEojaKxJkTqKSvPHiqhJTkOfB5cCLC
8pcsq1wnwrStXx8oakLcs2D/UfGMdAXVROnVAgMBAAGjZTBjMBQGA1UdEQQNMAuC
CWxvY2FsaG9zdDBLBglghkgBhvhCAQ0EPhY8QXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgYnkgTmNhdC4gU2VlIGh0dHBzOi8vbm1hcC5vcmcvbmNhdC8uMA0GCSqGSIb3
DQEBBQUAA4GBAE1bLZN33u8w6rRKD2hATJ5GfK5/nwqvhqjkNUwjkx2wbcA+k54u
K5ruf3IoS1eI6Y7r2qLh/JDQ46H+Aw76H3Nf/vNFnXS7s6odz1p/r6zPTbsDa9Mr
iRpfmwN/pG0eGsJrtYwxuPgU53PjzuqgvlNvmBBXf4+l12GKHOIRAV2D
-----END CERTIFICATE-----
Correct!
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAvmOkuifmMg6HL2YPIOjon6iWfbp7c3jx34YkYWqUH57SUdyJ
imZzeyGC0gtZPGujUSxiJSWI/oTqexh+cAMTSMlOJf7+BrJObArnxd9Y7YT2bRPQ
Ja6Lzb558YW3FZl87ORiO+rW4LCDCNd2lUvLE/GL2GWyuKN0K5iCd5TbtJzEkQTu
DSt2mcNn4rhAL+JFr56o4T6z8WWAW18BR6yGrMq7Q/kALHYW3OekePQAzL0VUYbW
JGTi65CxbCnzc/w4+mqQyvmzpWtMAzJTzAzQxNbkR2MBGySxDLrjg0LWN6sK7wNX
x0YVztz/zbIkPjfkU1jHS+9EbVNj+D1XFOJuaQIDAQABAoIBABagpxpM1aoLWfvD
KHcj10nqcoBc4oE11aFYQwik7xfW+24pRNuDE6SFthOar69jp5RlLwD1NhPx3iBl
J9nOM8OJ0VToum43UOS8YxF8WwhXriYGnc1sskbwpXOUDc9uX4+UESzH22P29ovd
d8WErY0gPxun8pbJLmxkAtWNhpMvfe0050vk9TL5wqbu9AlbssgTcCXkMQnPw9nC
YNN6DDP2lbcBrvgT9YCNL6C+ZKufD52yOQ9qOkwFTEQpjtF4uNtJom+asvlpmS8A
vLY9r60wYSvmZhNqBUrj7lyCtXMIu1kkd4w7F77k+DjHoAXyxcUp1DGL51sOmama
+TOWWgECgYEA8JtPxP0GRJ+IQkX262jM3dEIkza8ky5moIwUqYdsx0NxHgRRhORT
8c8hAuRBb2G82so8vUHk/fur85OEfc9TncnCY2crpoqsghifKLxrLgtT+qDpfZnx
SatLdt8GfQ85yA7hnWWJ2MxF3NaeSDm75Lsm+tBbAiyc9P2jGRNtMSkCgYEAypHd
HCctNi/FwjulhttFx/rHYKhLidZDFYeiE/v45bN4yFm8x7R/b0iE7KaszX+Exdvt
SghaTdcG0Knyw1bpJVyusavPzpaJMjdJ6tcFhVAbAjm7enCIvGCSx+X3l5SiWg0A
R57hJglezIiVjv3aGwHwvlZvtszK6zV6oXFAu0ECgYAbjo46T4hyP5tJi93V5HDi
Ttiek7xRVxUl+iU7rWkGAXFpMLFteQEsRr7PJ/lemmEY5eTDAFMLy9FL2m9oQWCg
R8VdwSk8r9FGLS+9aKcV5PI/WEKlwgXinB3OhYimtiG2Cg5JCqIZFHxD6MjEGOiu
L8ktHMPvodBwNsSBULpG0QKBgBAplTfC1HOnWiMGOU3KPwYWt0O6CdTkmJOmL8Ni
blh9elyZ9FsGxsgtRBXRsqXuz7wtsQAgLHxbdLq/ZJQ7YfzOKU4ZxEnabvXnvWkU
YOdjHdSOoKvDQNWu6ucyLRAWFuISeXw9a/9p7ftpxm0TSgyvmfLF2MIAEwyzRqaM
77pBAoGAMmjmIJdjp+Ez8duyn3ieo36yrttF5NSsJLAbxFpdlc1gvtGCWW+9Cq0b
dxviW8+TFVEBl1O4f7HVm6EpTscdDxU+bCXWkfjuRb7Dy9GOtt9JPsX8MBTakzh3
vBgsyi/sN3RqRBcGU40fOoZyfAMT8s1m/uYv52O6IgeuZ/ujbjY=
-----END RSA PRIVATE KEY-----
3. 인증 키 파일로 저장 후 ssh 접속 시도
: RSA PRIVATE KEY를 복사해 /tmp 폴더 아래에
디렉터리를 하나 생성해서 파일로 만들어 준다.
$ mkdir -p /tmp/keygen
$ cd /tmp/keygen
: 복사(마우스 드래그) 붙여넣기(shift + Insert) 가 안 먹는다.
: echo 인증키 > 새 파일도 안된다. 이럴 때는,
: vi 편집기를 사용하거나 ( $vim 파일명) 또는
$ cat > sshkey.private(파일 이름은 아무거나)
> 인증키 붙여넣기 (shift + Insert)
> Ctrl + d (빠져나오기)
이렇게 입력하면 파일로 키를 저장할 수 있다.
4. 접속 시도
만든 키 파일 사용해 접속을 시도하면!
$ ssh -i sshkey.private bandit17@localhost
@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE!
@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'sshkey.private' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "sshkey.private": bad permissions
이와 같이 뜬다.
$ ls -l 로 파일 퍼미션 권한을 보면
-rw-r--r-- 1 bandit16 root 707 Dec 2 08:08 sshkey.private
644로 누구나 읽을 수 있는 상태. 이게 안전하지 않기 때문에 관리자 외에
아무도 접근할 수 없도록 퍼미션을 새로 주는 작업이 필요하다.
$ chmod 600 sshkey.private
다시 접속 시도!
$ ssh -i sshkey.private bandit@localhost
bandit17@bandit:~$ cat /etc/bandit_pass/bandit17
암호 : xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn
LV17 -> LV18
$ diff passwords.new passords.old
< w0Yfolrc5bwjS4qw5mq1nnQi6mF03bii
---
> kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd
위 암호키를 하나씩 시도해 Byebye가 나오면 그게 암호
$ ssh bandit18@localhost
암호 : kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd
LV18 -> LV19
$ cd /home/bandit18
$ ls
readme.txt (권한이 없어서 읽을 수 없음)
$ ssh bandit18@localhost cat readme
또는
$ ssh -t bandit18@localhost cat readme
(-t 는 Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty. ssh에 로컬 tty가 없으면 강제로 할당 옵션.)
bandit18@localhost's password: (18 암호키를 입력하면 다음 키값을 받을 수 있다.)
IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x
Connection to localhost closed.
암호 : IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x
LV19 -> LV20
$ ls -l (권한 및 그룹 확인)
-rwsr-x--- 1 bandit20 bandit19 7296 May 7 2020 bandit20-do
$ ./bandit20-do
Run a command as another user.
Example: ./bandit20-do id (bandit20-do라는 유저로 실행할 수 있음)
$ ./bandit20-do cat /etc/bandit_pass/bandit20
암호 : GbKksEFF4yrVs6il55v6gwY5aVje5f0j
'WEB 진단 > WarGame' 카테고리의 다른 글
해커스쿨 BOF 원정대 : 개요 및 Level1 풀기 (0) | 2020.12.21 |
---|---|
해커스쿨 Hackme FTZ 문제: Level8~Level20 (Lv16까지 진행) (0) | 2020.12.16 |
해커스쿨 Hackme FTZ 문제 Level5- level7(백도어 in 리버스 엔지니어링) (0) | 2020.12.08 |
해커스쿨 Hackme FTZ 문제 Level2 - level4 (백도어 in 리버스 엔지니어링) (0) | 2020.12.08 |
해커스쿨 Hackme FTZ 문제 Leve1 (백도어 in 리버스 엔지니어링) (0) | 2020.12.04 |