프롤로그
bandit 문제풀이
저번 비밀번호는 dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr 이다.
문제
다음 레벨로 가는 비밀번호는 data.txt 파일에 저장이 되어있다. 소문자 a-z, 대문자 A-Z까지 단어를 13칸 회전시켜서 만들어졌습니다.
ROT13 기법이니 잘 찾아서 해봐라.
ROT13
일종의 암호화 기법인데, Rotate by 13의 줄임말이다. 별도의 열쇠값이 없이 영어 알파벳을 13칸씩 밀어내는 방식으로 암호화를 한다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z |
n | o | p | q | r | s | t | u | v | w | x | y | z | a | b | c | d | e | f | g | h | i | j | k | l | m |
이렇게 a를 1번이라고 했을 때 13칸 뒤의 있는 알파벳은 14번째의 n이다. b는 13칸뒤에있는 o가 선택이 되는 것이다.
일종의 카이사르 암호에 키 값을 13개 준거랑 동일한 거라고 하는데,
2024.01.13 - [보안 스터디/암호학] - [암호학] 암호화 해킹 #2 (카이사르 암호 도구 만들기)
여기에 카이사르에 대한 간단한 얘기가 들어있다.
아무튼 요약하면 13칸 뒤로 밀어서 만든 기법!
tr
리눅스에서는 tr이라는 명령어가 있다.
텍스트 변환 및 문자 치환을 수행하는 유용한 명령어인데, 텍스트 내에서 특정 문자를 다른 문자로 바꾸거나, 특정 문자를 삭제할 때 사용한다.
사용법은
tr [옵션] [set1] [set2]
set1을 set2로 바꾼다는 의미이다. 아 그러면 set1과 set2에 정규표현식이 적용이 되나?
예를 들어서 tr ^h*llo$ HELLO 하면 바뀌나?
안 된다. 음음... 저긴 정규표현식 지원 안 한다.
그래서 예시를 들자면
echo "hello world" | tr 'a-z' 'A-Z'
이렇게 소문자들이 대문자로 치환이 되었다.
풀이과정
일단 접속부터 하자
ssh bandit11@bandit.labs.overthewire.org -p 2220
dtR173fZKb0RRsDFSGsg2RWnpNVj3qRr
ls
data.txt 파일이 있고 읽어보면
cat data.txt
대충 The password is ....뭐시기겠지? 이제 tr을 통해서 단어들을 치환해보자.
cat data.txt | tr 'a-zA-Z' 'n-zA-Za-m'
13칸씩 미뤄서 a는 n으로 바뀌니 여기가 시작이 되겠고, 그 다음 쭉 순서대로 n-zA-Za-m으로 넘겨주었다.
정답이 나왔다. 뭔가 이상하다.
그래서 실제 저 비밀번호로 접속하면 답이 틀리다고 나온다.
원인을 알아보니, 소문자가 13칸 밀려서 대문자가 되고, 대문자가 13칸 밀려서 소문자가 되고 이런일은 없어야할 것 같다. 그러니까 set2의 범위를 다시 설정해주자.
cat data.txt | tr 'a-zA-Z' 'n-za-mN-ZA-M'
정답이 잘 나왔다.
물론 저거 순서 바꿔도 잘 나올 것이다.
cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'
정답
비밀번호는 7x16WNeHIi5YkIhWsfFIqoognUTyj9Q4 이다.
sed
sed가 저번에도 나왔다.
2024.11.10 - [bandit] - [2024/bandit] bandit level7 -> level8 Write-up
파일이나 텍스트 스트림을 한 줄씩 처리하여 편집할 수 있는 강력한 명령어.. 주로 텍스트 조작, 변환, 삭제 작업에 사용되며, 파일을 수정하거나 표준 입력으로 받은 데이터를 처리할 수 있다.
라고 언급하였는데, "텍스트 조작" 이 보이는가?
아까 말했듯이
tr은 정규표현식을 지원하지 않는다. 근데 정규표현식으로 단어 단위로 치환하고 싶다면 그떄도 sed를 이용한다.
sed 's/패턴/치환할문자열/옵션'
이렇게 되어 있는데
echo "hello world" | sed 's/hello/Hello/'
이렇게 치환이 이뤄진다.
echo "hello world, hello universe" | sed 's/hello/Hello/'
echo "hello world, hello universe" | sed 's/hello/Hello/g'
위 명령어 차이 구분해보자. 맨 뒤에 g가 붙은 것 뿐이다. g가 붙지 않았으면 일치하는 거 맨 앞에거 하나만 치환하는데, global 약자인 g로 전체 다 치환가능하다.
에필로그
어렵네
'bandit' 카테고리의 다른 글
[2024/bandit] bandit level13 -> level14 Write-up (0) | 2024.11.26 |
---|---|
[2024/bandit] bandit level12 -> level13 Write-up (0) | 2024.11.22 |
[2024/bandit] bandit level10 -> level11 Write-up (0) | 2024.11.16 |
[2024/bandit] bandit level9 -> level10 Write-up (0) | 2024.11.10 |
[2024/bandit] bandit level8 -> level9 Write-up (0) | 2024.11.10 |