본문 바로가기

Bandit

bandit Level 9 -> 10 (strings option?)

해당 게시글은 bandit wargame에 대한 스포일러(방향성/힌트/정답)를 제공할 수 있습니다. 

 

 

 

bandit level 9에서 비밀번호를 얻기 위해

사람이 읽을 수 있는 문자열에서, 몇개의 '= 다음에 오는 문자열을 추출해야 합니다. 

 

data.txt 파일의 초기 버퍼에서 출력할 수 없는 비인쇄문자, 널바이트가 기준 이상 나타나면

grep이 해당 파일을 텍스트 스트림이 아니라 이진 데이터로 분류하여

터미널 오염 방지를 위해 매칭 결과의 내용을 출력하지 않고 상태만 보고합니다. 

 

실제로 file 명령어를 통해 data.txt의 형식을 확인해보면 ASCII text가 아니라 data로만 출력됩니다. 

 

strings data.txt | grep '==='
# data.txt에서 4글자 이상의 인쇄 가능한 문자가 있는 문자열을 뽑아내서
# '==='과 같은 줄에 오는 문자열을 출력해라.

grep 명령어가 입력받는 데이터는 이미 strings에 의해 문자열로 정제되었으므로

grep 명령어는 '==='가 들어간 문자열을 추출하여 화면에 목표한 비밀번호가 출력시킵니다. 

 

strings -n 10 data.txt | grep '='
# 10글자 이상의 인쇄 가능한 문자열만 data.txt에서 뽑아내서
# '='와 같은 줄에 오는 문자열만 출력해라.

만약 여러개의 '=' 기호가 아니라, 1개의 '='을 이용해 grep 명령어를 사용하고 싶다면

strings 명령어의 -n 옵션을 통해 문자열의 글자수를 제한하면 깔끔하게 출력할 수 있습니다. 

 

strings를 거치지 않고 grep만으로 내용을 확인하고 싶다면

바이너리를 텍스트처럼 처리하도록 만드는 -a 옵션을 활용하는 방법도 있습니다.