Bandit Level 8 → Level 9

Minchae Kim·2023년 5월 12일
0

📌 Level 8 → Level 9


https://overthewire.org/wargames/bandit/bandit9.html

🚩 Level Goal

The password for the next level is stored in the file data.txt and is the only line of text that occurs only once.

🚩 Problem Solving

ls 명령어로 home directory에 있는 data.txt를 읽어보면 상당한 양의 파일이 출력된다. Level Goal에 적혀있듯이 한 줄만 나타나기에 출력된 내용 중 중복된 내용을 제거해야 하는 상황이다.

🔹 Process

중복된 내용을 제거할 때 사용할 수 있는 명령어는 uniqsort이다. 더불어, Pipe의 특수 기호를 활용해야 한다. 즉 sort로 오름차순 정렬을 한 출력 값을, 입력 값으로 받아 uniq로 중복된 항목을 제거할 수 있다.

bandit8@bandit:~$ cat data.txt | sort | uniq -c
     10 07iR6PwHwihvQ3av1fqoRjICCulpoyms
     10 0ob6rCn4D4jQ6KCiaT5hmOdWFrm2quR1
     10 1drBmDT7PYS7hVgoTWkJSjUZUK7ZAIAa
     10 1JnkIYLDOdn5M7TGabYxOWkn7HazMjYW
     10 1wBrW0VGjKeYiXltbEWrUipwSHQfTu44
     10 2Dxbtw8cnKyHwvt0lfFNYOGc4cE59uua
     10 2TRkCQhbMjcM0hwL31NnJQ0DVagWN3Ca
     10 4c7EsUtqLnLR9hiepV5EQVhdMgyi8onL
     10 4cQDXE4IPH8fCBUBZaTPgnY2gwnPnlj6
     10 6495bfC0lI1Qkw5kzZHnbVWooaOZHLvj
     10 6rEzM4Qro8dH0e3uemAyYseTiNiNAYap
     10 78rgduVcLZjLzZmooObdaN541MKV6IfQ
     10 8qkrbCAUG9I28M49j9flUro5fWxenFzF
     10 aIl4xN5maZVCQITz0xH0KNXIlLc0MhNf
     10 aPsCQmSWVYGQQHUD6k1fHC2kqSyMlxwV
     10 awglWaTRSAWBcol8hSMTJP4FYhIGJHVO
     10 bCJdTkork5IRbZaaPZK0WVPgYIIO4mHF
     10 BPl0XNou7xAZAI5fdzWzSmPkW1PnvTE1
     10 bvIaDTzHBOGSO7CfpH9vUrJRRlwYTUA7
     10 CS8HVrDmKGLG53qziqQCLWNRlUP1FHsV
     10 CwwHDVp0pO6zmFp87L9AtFzqU5aB5j9w
     10 CyziIvGRdotoy9yA00RAnvvkvrYdKCPp
     10 DRqDxJYAv7IUfAMmrXtXEiz63TUjqeDn
     10 DXI6y5CNPU06rVpkoZgnZJBWfkdW131j
     10 enNw6tuj8mSxxS7f2Yd05puXVeuCZ39G
     10 ewllxPExW9eaHxAH8WZkW9lDuK5cZcUy
     10 eyKcuNPKnjt25kaOZxkMYQ9xqp45aIk9
     10 fIBXc239DbhORY4t9xjgi7fSm4thHsIb
     10 fiK30QpqzoULACXZwkBEKJZvpPQx9Uqm
     10 FlHOKVUDNLx6Ga7CxC4ISRYNflN1GAnF
     10 G4BHP66B4l3XkvB05CMgzrEKyjHhuCwz
     10 gCx35PlKn08nrFFrAgHYLrUVWWZjLdqM
     10 GEzwi36aKB8PLlCPH2wzl9gHzVm97IYu
     10 glONDdR72FJL3Gc03nVNO4PKNzXFGH1A
     10 gqGBgY1IdFDGG2XzB2o1VNGY4j6OL76V
     10 h7jtcUsBhrryyLhtt1mT6Jdmp0l6ozBs
     10 HKryX0XX2HT4WBT0OUzRz5Ac5B2rvIHU
     10 iM3PaCO3VAxAdbdVsdGtEwuwrFQPYJV7
     10 irGm6F73sbUrFhHukhp6JXgMQyLxJTz1
     10 jtNdk5KDgrMkxgbZSJOvjOcM58svrzDY
     10 jVscZ5eK5DWN7IvDSehXmyplCXRSbHJS
     10 KerqNiDbY0zV2VxnOCmWX5XWxumldlAe
     10 kha3sCpHsydUNrxLLXV3cFqWyucGjdxr
     10 kt1VUEZpimCS4BaoAvhN3rgHOmhqaMIR
     10 KUzqHCrxHSpgfkF5ZAzUfjlBaXW3zIaZ
     10 L0nxAwlfV9V3J5onKIT8KYQ9InTcQ7yE
     10 lnB8MWOYjETxoC8bQYrMFnxxQXAWHjP4
     10 lZ9DhnzeHgIuLqYPmNzONpMCkuBYoeJI
     10 M8JMUd7MSd4mOwZj1843ejBH5RXJOloa
     10 mdug9JbW836YVZh3ALULBAxODlinqonJ
     10 MIpMch66sYTmmqepKYczlRA9aJrnkt68
     10 MpAqsgjJIVLT1MxSZcRoOOzl6g1db98Q
     10 MQrydyojsVIYJSY8y1nCMjZGxnL1My7F
     10 MsxcvOe3PGrt78wpZG2bBNF5wfXpZhET
     10 n5fEmvCXKbJErzIDt3MLTmZZVMRNynrR
     10 NL91hwGrqW5lVgoicb592Sd0djnHnbjZ
     10 Nnih4Q0jf3xEOTcmM3yw2HkOm3VPox0w
     10 NT4p09XwRb0k0wG9yIuvfs3MblMGpMc1
     10 nU5zbsdUfmzv7cjNwkV9Hgb65OVe5EDt
     10 nyvBweoC3kzt5QRTjbDfrWO7jhwOGN4g
     10 OcVxHzDW027KWNFS03G31KQEb5TgN1WV
     10 peXkYozDKE2u2BEOed5vvkY0nyjkGawn
     10 PXHEt0PztCiArDZ7UCBmqKdBCiXNQWBN
     10 QmFayGbrzFoiQ5Z2PGmnD2N6Pf77cxl9
     10 QNTac9UtCmQ5VGAnzj10Z9BwV4TuaVvu
     10 qsbKthWb80f3vQKBP7O12SjfFo1V5VkL
     10 quhCb8ZIUJXXM2SbY1ER1D5GaDlQjdDa
     10 QYeOFhgJCJEfKM1ZpT0K322R6SuKdCFT
     10 r0VIMA1yzv838m7UfvutUhCf0zaY3Rqw
     10 rfUNSGOvmQXz0m7PtFoEoPg1BpTbll7X
     10 rJMbGeeDTMsj1RA4YibIQr0o9azHgP0I
     10 rQAYnkKAXIViP4ROmehnDMIAXLpOOLEp
     10 sBB2H7HateUFxr2oxrqUVoumFM60f1lj
     10 SjFHXKRcIc7jlAYGknVMnGXSFd6xRmnF
     10 tDZbF2SuhsvfaA3eTnwfcjQa1pZoPJeX
     10 tiyVGzZcRwUPVAiqkroFMUbMI9ut9hcT
     10 tLKyRATtoCuxMR4zZg1Dnlnr3je3bSHe
     10 tmzBM5rcV9y7AM1xDHudL2yX9oefGieT
     10 tWwjd16fG17vGdjutfOygVTjEGxlijOS
     10 uBRx9inQTeaDZAuzEb2MadWXmkH8uW4O
      1 UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR
      (생략)

uniq로 중복이 제거되었고, 옵션인 -c를 통해서 몇 번 중복되었는지 알 수 있다. 위에 적혀있는 10, 1과 같은 값은 중복 횟수이다. 그 중 앞이 '1'인 문자열이 있으니 해당 내용을 출력하면 password를 얻어낼 수 있다.

1이 적힌 문자열을 뽑아낼 때는, Level 7 → Level 8에서 다루었던 grep 명령어를 활용하여 뽑아낼 수 있다.

bandit8@bandit:~$ cat data.txt | sort | uniq -c | grep "1 "
→ EN632PlfYiZbn3PhVK3XOGSlNInNE00t

이때 주의할 점은, grep 명령어 다음에 오는 문자열을 작성할 때 1 뒤의 공백을 반드시 적어주어야 한다. grep "1"로 출력하면 10으로 시작하는 문자열 또한 해당되기에 원하는 문자열을 뽑아낼 수 없어진다.

🔹 Password

Bandit9 Password : EN632PlfYiZbn3PhVK3XOGSlNInNE00t

📌 Linux Commands


  • grep, sort, uniq, strings, base64, tr, tar, gzip, bzip2, xxd

🚩 sort

sort는 사용자가 지정한 파일의 내용을 정렬하거나, 정렬된 파일의 내용을 병합할 때 사용하는 명령어이다. 숫자, 알파벳을 오름차순으로 정렬한다.

sort [option]

🔹 option

  • -r : reverse를 뜻하는 명령어로, 역순으로 정렬하게 된다.
  • -u : 정렬 후에 중복된 값을 제거하는 명령어이다. 추가적으로 uniq 명령어를 사용했을 때에는 연속적으로 중복된 값만 제거한다.

🚩 uniq

uniq 입력 내용에서 중복된 항목을 제거하는 명령어이다. 보통 sort 명령어로 정렬을 한 결과를 pipe(|)로 전달하여 중복된 내용을 제거할 수 있다.

uniq [option][file name]

uniq이어진 중복만을 제거하기 때문에 추가적인 명령어가 필요하다. (sort 명령어를 사용하는 이유.)

🔹 option

  • -c : 같은 라인이 몇 번 나오는지 표시해준다. 즉, 몇 번 중복된 것인지 알려주는 명령어.
  • -D : 중복되는 모든 라인을 보여준다.

📌 Linux Concept


🚩 Pipe

pipe이란 Interprocess Communication 중 하나로, 특정 프로그램의 stdout을 다른 프로그램의 stdin으로 전달하는 방법이다. 즉, 한 프로그램의 출력 내용이 다른 프로그램의 입력 값이 전달된다.

🔹 사용 방법

| 기호를 사용하여 왼쪽에 위치한 프로그램의 실행 결과를, 오른쪽에 위치한 프로그램으로 넘긴다.

명령어 프로그램1 | 프로그램2

Redirect와는 확실한 차이를 보인다. Redirect는 프로그램의 결과 혹은 출력(output)ㅣ을 파일이나 다른 스트림으로 전달하거나 남길 때 사용한다. 반면, Pipe는 출력을 다른 프로그램이나 유틸리티로 넘길 때 사용한다. 보통 파일을 사용하는 redirect과는 달리, pipe는 서로 다른 프로세스 간 작동하는 방식이다.

profile
It's time to fire on up !

0개의 댓글