정보보안, 모의해킹 분야를 공부하기 위해서는

리눅스 사용에 익숙해져야 하는데

 

아래 워게임 사이트의 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

 

 


 

 

 

728x90
반응형

+ Recent posts