* 미션 풀이
[Level 7 -> Level 8]
1. ls -a 입력하여 data.txt 확인.

2. cat data.txt로 내용 출력. 이때, 내용이 너무 많아서 확인하기가 어려움.
3. grep 명령어를 사용.
grep millionth data.txt 입력

4. 비번은 millionth라는 단어 옆에 있다고 했으므로 cvX2JJa4CFALtqS87jk27qwqGhBM9plV 가 비번이다.
bandit8의 비번은 cvX2JJa4CFALtqS87jk27qwqGhBM9plV 이다.
[Level 8 -> Level 9]
1. ls -a 입력으로 data.txt 확인.

2. data.txt 파일에 있고 한번만 작성된 문장이라고 했으므로 uniq 옵션 중 -u를 사용한다.
즉, sort data.txt | uniq -u 입력.

3. 따라서, bandit9의 비번은 UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR 이다.
[Level 9 -> Level 10]
1. ls -a 입력 후, data.txt 파일 확인

2. 사람이 읽을 수 있는 문자열이고, 여러개의 '='문자로 시작하는 문장 중 하나라고 했으므로 strings와 grep 명령어를 사용한다.
즉, strings data.txt | grep = 입력.

3. 따라서, bandit10의 비번은 truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk 이다.
[Level 10 -> Level 11]
1. ls -a 입력 후, data.txt 파일 확인

2. base64로 인코딩되어 있다고 했으므로 디코딩을 해준다.
즉 base64 -d data.txt 입력.

3. 따라서, bandit11의 비번은 IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR 이다.
[Level 11 -> Level 12]
1. ls -a 입력 후, data.txt 파일 확인.

2. 비번이 data.txt 파일 안에서 대소문자가 13자리씩 회전이동되어 있음.
예를 들어, 첫 글자가 A라면 13자리 이동하면 N이다.
즉 이 문제를 해결하기 위해서는 tr을 치환시켜주면 된다. A-Z를 N-ZA-M으로, a-z를 n-za-m으로 치환한다.
따라서, 입력창에 cat data.txt | tr "A-Za-z" "N-ZA-Mn-za-m" 입력.

3. 따라서, bandit12의 비번은 5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu 이다.
[Level 12 -> Level 13]
1. ls -a 입력 후, data.txt 파일 확인.

# mkdir
mkdir은 make directory의 약어로서 새로운 디렉토리를 만들 때 사용하는 명령어이다.
#cp
cp는 파일, 디렉토리를 복사할 수 있는 명령이다.
#hexdump
hexdump는 램 또는 파일이나 저장장치에 있는 컴퓨터 데이터의 16진법적인 보임새이다.
2. 비번이 반복 압축한 파일을 hexdump로 변환한 data.txt 파일에 있다고 했으며, mkdir을 이용해서 /tmp 디렉터리를 만드는 것이 유용하다고 했음.
즉, mkdir /tmp/Rintz 디렉토리를 만들겠다.

3. 방금 만든 디렉토리에 data.txt를 복사하겠다.
cp data.txt /tmp/Rintz 입력.

4. rintz 디렉토리로 이동한다.
cd /tmp/rintz 입력.

5. 다시 ls -a 입력 후, data.txt 파일 확인 후, cat data.txt를 해보면 엄청난 결과가 나온다...
bandit12@bandit:/tmp/Rintz$ cat data.txt
00000000: 1f8b 0808 0650 b45e 0203 6461 7461 322e .....P.^..data2.
00000010: 6269 6e00 013d 02c2 fd42 5a68 3931 4159 bin..=...BZh91AY
00000020: 2653 598e 4f1c c800 001e 7fff fbf9 7fda &SY.O...........
00000030: 9e7f 4f76 9fcf fe7d 3fff f67d abde 5e9f ..Ov...}?..}..^.
00000040: f3fe 9fbf f6f1 feee bfdf a3ff b001 3b1b ..............;.
00000050: 5481 a1a0 1ea0 1a34 d0d0 001a 68d3 4683 T......4....h.F.
00000060: 4680 0680 0034 1918 4c4d 190c 4000 0001 F....4..LM..@...
00000070: a000 c87a 81a3 464d a8d3 43c5 1068 0346 ...z..FM..C..h.F
00000080: 8343 40d0 3400 0340 66a6 8068 0cd4 f500 .C@.4..@f..h....
00000090: 69ea 6800 0f50 68f2 4d00 680d 06ca 0190 i.h..Ph.M.h.....
000000a0: 0000 69a1 a1a0 1ea0 194d 340d 1ea1 b280 ..i......M4.....
000000b0: f500 3406 2340 034d 3400 0000 3403 d400 ..4.#@.M4...4...
000000c0: 1a07 a832 3400 f51a 0003 43d4 0068 0d34 ...24.....C..h.4
000000d0: 6868 f51a 3d43 2580 3e58 061a 2c89 6bf3 hh..=C%.>X..,.k.
000000e0: 0163 08ab dc31 91cd 1747 599b e401 0b06 .c...1...GY.....
000000f0: a8b1 7255 a3b2 9cf9 75cc f106 941b 347a ..rU....u.....4z
00000100: d616 55cc 2ef2 9d46 e7d1 3050 b5fb 76eb ..U....F..0P..v.
00000110: 01f8 60c1 2201 33f0 0de0 4aa6 ec8c 914f ..`.".3...J....O
00000120: cf8a aed5 7b52 4270 8d51 6978 c159 8b5a ....{RBp.Qix.Y.Z
00000130: 2164 fb1f c26a 8d28 b414 e690 bfdd b3e1 !d...j.(........
00000140: f414 2f9e d041 c523 b641 ac08 0c0b 06f5 ../..A.#.A......
00000150: dd64 b862 1158 3f9e 897a 8cae 32b0 1fb7 .d.b.X?..z..2...
00000160: 3c82 af41 20fd 6e7d 0a35 2833 41bd de0c <..A .n}.5(3A...
00000170: 774f ae52 a1ac 0fb2 8c36 ef58 537b f30a wO.R.....6.XS{..
00000180: 1510 cab5 cb51 4231 95a4 d045 b95c ea09 .....QB1...E.\..
00000190: 9fa0 4d33 ba43 22c9 b5be d0ea eeb7 ec85 ..M3.C".........
000001a0: 59fc 8bf1 97a0 87a5 0df0 7acd d555 fc11 Y.........z..U..
000001b0: 223f fdc6 2be3 e809 c974 271a 920e acbc "?..+....t'.....
000001c0: 0de1 f1a6 393f 4cf5 50eb 7942 86c3 3d7a ....9?L.P.yB..=z
000001d0: fe6d 173f a84c bb4e 742a fc37 7b71 508a .m.?.L.Nt*.7{qP.
000001e0: a2cc 9cf1 2522 8a77 39f2 716d 34f9 8620 ....%".w9.qm4..
000001f0: 4e33 ca36 eec0 cd4b b3e8 48e4 8b91 5bea N3.6...K..H...[.
00000200: 01bf 7d21 0b64 82c0 3341 3424 e98b 4d7e ..}!.d..3A4$..M~
00000210: c95c 1b1f cac9 a04a 1988 43b2 6b55 c6a6 .\.....J..C.kU..
00000220: 075c 1eb4 8ecf 5cdf 4653 064e 84da 263d .\....\.FS.N..&=
00000230: b15b bcea 7109 5c29 c524 3afc d715 4894 .[..q.\).$:...H.
00000240: 7426 072f fc28 ab05 9603 b3fc 5dc9 14e1 t&./.(......]...
00000250: 4242 393c 7320 98f7 681d 3d02 0000 BB9<s ..h.=...
6. hexdump파일을 바이너리 파일로 바꾸어주기 위해서 xxd -r data.txt data입력.
ls를 입력하여 data라는 파일 확인.

7. file data 입력하여 data 파일의 속성을 확인. gzip으로 압축된 data2.bin 이라는 이름을 가진 파일이라고 나온다.

8. gzip의 압축 해제를 위해 mv data data.gz으로 이동시킨다.
그 후, gzip -d data.gz 입력하여 압축 해제.


10. 압축 해제를 위해 mv data data.bz 으로 이동시킴.
그 후, bzip2 -d data.bz 입력하여 압축 해제.

11. 이러한 과정 다시 반복.
그랬더니 gzip 한번 더 나와서 아까 방법으로 해결.
그 후, file data를 해보니 이번에는 tar 형식이 나온다.

12. 이번엔 mv data data.tar 으로 이동시키고 tar -xvf data.tar로 압축 해제.

13. 파일을 확인하고 압축 해제를 계속 반복하면 된다.
bandit12@bandit:/tmp/Rintz$ file data5.bin
data5.bin: POSIX tar archive (GNU)
bandit12@bandit:/tmp/Rintz$ mv data5.bin data5.bin.tar
bandit12@bandit:/tmp/Rintz$ tar -xvf data5.bin.tar
data6.bin
bandit12@bandit:/tmp/Rintz$ file data6.bin
data6.bin: bzip2 compressed data, block size = 900k
bandit12@bandit:/tmp/Rintz$ mv data6.bin data6.bin.bz
bandit12@bandit:/tmp/Rintz$ bzip2 -d data6.bin.bz
bandit12@bandit:/tmp/Rintz$ ls
data5.bin.tar data6.bin data.tar data.txt
bandit12@bandit:/tmp/Rintz$ file data6.bin
data6.bin: POSIX tar archive (GNU)
bandit12@bandit:/tmp/Rintz$ mv data6.bin data6.bin.tar
bandit12@bandit:/tmp/Rintz$ tar -xvf data6.bin.tar
data8.bin
bandit12@bandit:/tmp/Rintz$ file data8.bin
data8.bin: gzip compressed data, was "data9.bin", last modified: Thu May 7 18:14:30 2020, max compression, from Unix
bandit12@bandit:/tmp/Rintz$ mv data8.bin data8.bin.gz
bandit12@bandit:/tmp/Rintz$ gzip -d data8.bin.gz
bandit12@bandit:/tmp/Rintz$ ls
data5.bin.tar data6.bin.tar data8.bin data.tar data.txt
bandit12@bandit:/tmp/Rintz$ file data8.bin
data8.bin: ASCII text
드디어 ASCII text가 나왔다..!
14. cat data8.bin으로 열어준다.

따라서, bandit13의 비번은 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL 이다.
[Level 13 -> Level 14]
1. ls -a 입력 후, 확인.

2. 힌트에서 private SSH 키를 이용하면 다음 레벨에 로그인 할 수 있다고 했으므로, ssh -i sshkey.private bandit14@localhost 입력.
그 후, 나오는 입력창에 yes를 입력하면 로그인이 된다.
bandit13@bandit:~$ ssh -i sshkey.private bandit14@localhost
Could not create directory '/home/bandit13/.ssh'.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
Are you sure you want to continue connecting (yes/no)? ssh -i sshkey.private bandit14@localhost
Please type 'yes' or 'no': yes
3. bandit14의 비번은 /etc/bandit_pass_bandit14에 있다고 했으므로 이 경로로 들어간다.
즉, cat /etc/bandit_pass/bandit14 입력.

따라서, bandit14의 비번은 4wcYUJFw0k0XLShlDzztnTBHiqxU3b3e 이다.
* 미션 풀이에 필요한 지식 정리
- 리눅스 명령어 : grep, sort, uniq, strings, base64, tr, tar
# grep
grep은 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자 할 때 사용하는 명령어이다.
단순히 문자열의 일치 여부를 검사하는 것이 아니라 훨씬 복잡하고 다양한 방식으로 문자열을 찾는 기능을 제공한다.
grep은 파일의 문자열을 검색할 때, 정규 표현식에 의한 패턴 매칭 방식을 사용하기 때문에 이러한 것들이 가능한 것이다.
* 정규 표현식 : 특정 규칙을 가진 문자열 집합을 표현하기 위한 형식 언어이다. 문자열 패턴 매칭을 검사하거나 매칭 여부가 검사된다.
<정규 표현식을 작성할 때 사용되는 메타 문자>

<grep 명령어 옵션>

# sort
sort는 사용자가 지정한 파일의 내용을 정렬하거나 정렬된 파일의 내용을 병합할 때 사용한다.
기본적으로, 옵션 없이 사용하면 오름차순으로 정렬된다.
<sort 명령어 옵션>
-r
|
역순으로 정렬
|
-k
|
해당 필드를 기준으로 정렬할 수 있다.
|
-u
|
정렬한 후에 중복된 값을 제거한다.
추가적으로, uniq 명령어를 사용했을 때에는 연속적으로 중복된 값만 제거한다. |
-t
|
필드 구분자를 지정해서 정렬할 수 있다.
|
-f
|
대소문자를 구분하지 않고 정렬한다.
|
# uniq
uniq는 입력 내용에서 중복된 항목을 제거하는 커맨드 라인 유틸리티이다.
보통 sort 명령어로 정렬한 결과를 uniq에 전달해서 중복 내용을 제거한다.
<기본 사용법>
$ sort ~~~.txt | uniq
<uniq 옵션>
-u
|
중복되지 않는 라인만 표시한다.
|
-d
|
중복되는 라인만 표시한다.
|
-c
|
라인별 중복 횟수를 계산해서 표시한다.
겹치는 것이 없다면 기본적으로 1이 표시된다. |
-i
|
대소문자를 무시한다.
즉, abc와 ABC, aBC, AbC 를 모두 같게 처리한다. |
# strings
strings는 실행파일의 ASCII 문자를 찾아 화면에 출력한다.
바이너리 파일 또는 오브젝트 파일에 있는 모든 인쇄 가능한 문자열을 추출하여 출력하기 때문에, 분석할 때 많은 도움이 된다.
<strings 명령어 옵션>
-a
|
파일을 검색하고 데이터 섹션까지 검색한다.
|
-f
|
각 문자열 전에 파일명을 출력한다.
|
-t
|
문자열의 위치를 8,10,16진수로 출력한다.
|
-T
|
바이너리 파일 형식을 지정한다.
|
-e
|
문자의 크기나 에디안을 선택한다. {s,S,b,l,B,L}
|
@<file>
|
<file>에서 옵션 정보를 가져온다.
|
-h
|
프로그램의 정보를 출력한다.
|
-v
|
프로그램의 버전을 출력한다.
|
# base64
base64란 8비트 이진 데이터를 문자 코드에 영향을 받지 않는 고통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다.
<base64 기본 사용법>
base64 [옵션] [파일명]
-d 옵션을 사용하면 디코드
아무런 옵션이 없으면 인코드
# tr
tr은 지정한 문자를 변환하거나 삭제하는 명령어이다.
특정한 문자를 다른 문자로 변환하거나 특정 문자를 제거하는데 사용되는 명령어이다.
<tr 기본 사용법>
tr [옵션] 문자열1 [문자열2]
-d 옵션 사용시 문자열1에서 지정한 문자를 삭제한다.
-s 옵션 사용시 문자열2에서 반복되는 문자를 삭제한다.
-t 옵션 사용시 문자열1을 문자열2 길이로 자른다.
# tar
tar은 여러개의 파일을 하나의 파일로 묶거나 풀 때 사용하는 명령어이다.
--> tar 압축하기
tar -cvf [파일명.tar] [폴더명]
--> tar 파일 압축풀기
tar -xvf [파일명.tar]
+
tar.gz : tar 파일을 압축하는 가장 좋은 압축 옵션이다. 압축시, 용량이 크게 줄고 리소스를 많이 소모하지 않는다. 하지만 tar.bz2 방식보다는 압축률이 떨어지는 편이다.
--> tar.gz 압축하기
tar -zcvf [파일명.tar.gz] [폴더명]
--> tar.gz 압축풀기
tar -zxvf [파일명.tar.gz]
- 리눅스 PIPE 개념
PIPE는 서로 다른 프로세스간 작동하는 방식이다. 기호는 |를 사용한다.
일반적으로 A|B 형태로 사용하는데, 이는 A커맨드의 표준 출력을 B커맨드의 표준 입력으로 사용한다는 의미이다.
- 인코딩/디코딩 개념
- 인코딩 : 주어진 정보를 어떤 프로그램에 대응하는 형태로 부호화하여 입력하는 것.
- 디코딩 : 부호화된 데이터를 인간이 알기 쉬운 모양으로 하기 위하여 번역하는 것.
- 아스키 코드
미국정보교환표준부호(American Standard Code for Information Interchange) 줄여서 ASCII
--> 영문 알파벳을 사용하는 대표적인 문자 인코딩이다. 컴퓨터와 통신 장비를 비롯한 문자를 사용하는 많은 장치에서 사용되며, 대부분의 문자 인코딩이 ASCII에 기초를 두고 있다.
아스키 코드는 8bit가 아닌 7bit만 사용되는데, 이는 나머지 1bit는 통신 에러 검출을 위해서 사용되기 때문이다.
아스키는 33개의 출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 총 128개로 이루어져 있다.
- 비밀번호 없이 SSH 로그인하는 방법
SSH Key를 이용한다.
SSH Key란 서버에 접속할 때 비밀번호 대신 key를 제출하는 방식이다.
SSH Key는 비밀번호보다 높은 수준의 보안을 필요로 하거나 로그인 없이 자동으로 서버에 접속할 때 사용한다.
모든 암호화 방식에 사용하는 키는 공개 키(Public Key)와 비밀 키(Private Key)로 나뉘어진다.
비밀 키는 로컬 머신에 위치해야 하고, 공개 키는 리모트 머신에 위치해야 한다. SSH 접속을 시도하면 SSH Client가 로컬 머신의 비공개 키와 원격 머신의 비공개 키를 비교해서 둘이 일치하는지를 확인한다.
<SSH Key로 로그인 할 수 있도록 설정하는 과정>
- Client side : SSH 비밀키 만들기
ssh-keygen을 이용해 비밀 키를 생성하는 명령어 입력.
비밀 키 저장 경로를 물어보는데, 기본적으로 그냥 엔터키를 입력하면 된다.
그 후, 빔밀번호 입력을 물어보는데, 그냥 엔터를 쳐서 넘기면 자동 로그인을 할 수 있다. (하지만 그만큼 보안에 취약해진다.)
재차 비밀번호를 확인하라고 나온다.
~/.ssh 경로에 가보면 생성이 되어 있는 것을 확인할 수 있다.
id_rsa 가 비밀 키이고 id_rsa.pub이 공개 키이다.
- Server side : SSH 공개 키 저장하기
ssh-copy-id를 이용해서 로그인 대상 서버에 공개 키를 저장한다.
그러면 대상 서버에서는 authorized_keys라는 파일이 만들어지고, 이 파일 안에 공개 키 안의 내용을 입력한다.
암호 입력 프롬프트가 나오면 해당계정의 암호를 입력한다.
- 로그인
예를 들어 server_1에서 server_2로 로그인을 시도한다면
user1@server_2 라고 입력해주면 된다.
'ETC > Hacking' 카테고리의 다른 글
[해킹] Bandit Level 22 ~ 26 단계 - 정리 (0) | 2021.11.24 |
---|---|
[해킹] Bandit Level 15 ~ 21 단계 - 정리 (0) | 2021.11.24 |
[해킹] Bandit Level 0 ~ 7 단계 - 정리 (0) | 2021.11.24 |