• 7주차 Bandit

    2021. 7. 3.

    by. Sooming_

    Bandit Level 0

    음... 당황스럽다

    몇가지 구글링 해보니 Terminal이란 것으로 명령어를 쓸 수 있다는 것을 알았다

    그라고 다음과 같은 명령어들이 있었다

    ls 디렉토리 목록 확인
    cd 경로 이동
    cat 단순히 파일의 내용을 출력할 수도 있고,
    파일 여러개를 합쳐서 하나의 파일로 만들 수도 있음
    그리고 기존 한 파일의 내용을 다른 파일에 덧붙일수도 있음
    새로운 파일을 만들때에도 사용됨
    cp 파일 혹은 디렉토리를 복사
    디렉토리를 복사할때는 -r 옵션을 주어야함
    mv 파일 혹은 디렉토리 이동
    실제로 원하는 위치로 이동할때도 사용하지만, 이름을 변경하는 용도로도 사용
    mkdir 디렉토리 생성
    -p 옵션을 주면 하위 디렉토리까지 한 번에 생성 가능
    rm 파일이나 디렉토리를 삭제
    디렉토리를 삭제할때는 r 옵션을 주어야함
    -f 옵션을 주면 사용자에게 삭제 여부를 묻지 않고 바로 삭제
    find 특정 파일이나 디렉토리를 검색
    file 파일의 종류 확인 및 파일 속성 값을 확인

    sudo apt-get install ssh

    먼저 ssh를 설치해주고

    ssh bandit0@bandit.labs.overthewire.org -p 2220

    다음과 같이 써주면 password를 입력하라 한다

    문제에 나와있듯이 bandit0 입력

    Bandit Level 0 → Level 1

    readme 파일을 읽으면 되나보다

    ls 로 파일을 확인한 다음 cat 으로 readme 파일을 확인했더니 비밀번호가 나왔다

    Bandit Level 1 → Level 2

    - 라는 이름의 파일을 찾으면 되나보다

    cat 으로 읽어보려했는데 실패하고 계속 이상한게 복사된다

    구글링해보니 - 가 들어간 파일 이름은

    cat ./-

    처럼 ./을 - 앞에 붙여줘야한다

    Bandit Level 2 → Level 3

    spaces in this filename 이란 파일을 찾자

    cat 으로 해주면

    파일이 없다고 뜬다

    아무래도 공백 때문인 것 같다

    구글이 그렇다고 한다

    스페이스 앞에 / 를 붙혀주면 해결이 돤다

    Bandit Level 3 → Level 4

    inhere 디렉토리 안의 숨겨진 파일을 찾자

    ls 를 해보니 inhere 디렉토리가 있었다

    앞에서 배운 find로 숨겨진 파일들을 더 찾았다

    cat 으로 hidden 파일을 읽어주면 비밀번호가 나온다

    Bandit Level 4 → Level 5

    사람만 읽을 수 있는 파일이라고?

    다 찾아보자

    cat -- -"file"

    파일 이름 앞에 - 가 있다면 위와 같이 찾아주면 된다

    cd 로 inhere 디렉토리에 들어가 하나하나 다 찾아주면 비밀번호가 나온다

    Bandit Level 5 → Level 6

    inhere 디렉토리 안의 1033 바이트 크기의 파일을 찾아야한다

    저 많은 파일들에서 1033 바이트 크기를 가진 파일을 찾아야한다

    디스크 크기는 du라는 명령어로 구할 수가 있었다

    du Disk usage의 약자로써 현재 디렉토리 혹은 지정한 디렉토리의 사용량을 확인할때 사용

    옵션을 지정하지 않으면 현재 경로의 모든 디렉토리 크기를 MB 단위로 출력
    -a 현재 디렉토리 아래의 모든 파일과 디렉토리의 사용 정보를 출력
    -B 지정한 블록 크기(SIZE) 단위로 용량을 출력
    -b 바이트 단위로 출력
    -c 모든 파일의 디스크 사용 정보를 출력하고, 출력된 것들의 모든 합계를 출력
    (보통 해당 경로가 얼마만큼의 용량을 차지하는지 확인할때 사용)
    -D 지정한 파일의 경로가 심볼릭 링크 파일이면 원본의 값을 출력
    -h 파일 용량을 사람이 보기 쉬운 형태로 출력
    -H -h와 비슷하지만 1,024 단위의 비율로 출력
    -k
    출력 단위를 1KB 형태로 지정
    -l 하드 링크되어 있는 파일도 있는 그대로 카운트
    -L 모든 심볼릭 링크를 따름
    -S 디렉토리의 총 사용량을 출력할때 하위 디렉토리의 사용량은 제외
    -s 간단하게 총 사용량만 요약하여 출력
    -x 현재 파일 시스템의 파일 사용량만을 출력

    하나하나 다 하기 귀찮으니 -al 을 이용하여 한번에 찾아보자

    잡았다 요놈

    cat .file2

    해주면 비밀번호가 나온다

    Bandit Level 6 → Level 7

    서버에 있는 33 바이트의 user bandit7, group bandit6 파일을 찾아라?

    cat 을 해봤지만 이게 아닌 것 같다

    구글링 해보니 find 뒤에 옵션을 붙일 수가 있다

    33바이트를 찾아야 하니 / -size 33을 붙여보았는데 뭔가 이상했다

    find . -size +[N]c -and -size -[M]c

    구글링해보니 다음과 같이 사용할 수 있었다

    33c의 c는 바이트를 의미한다고 한다

    나중에 찾아보니 user와 group도 맞춰야된다고 해서 저렇게 써주었다

    Permission denied가 뜨지 않은 하나를 발견할 수 있었다

    cat 으로 읽어주면 비밀번호가 나온다

    Bandit Level 7 → Level 8

    data.txt 파일 안에서 millionth 옆의 비밀번호를 읽자

    cat 으로 data.txt를 읽어보려했지만 양이 어마어마하다

    그래서 grep 이란 명령어를 찾게 되었다

    grep 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자할 때 사용

    입력해보니 그 문자만 나오는 것이 아니라 그 라인 모두가 출력되는 것 같다

    Bandit Level 8 → Level 9

    data.txt 파일에서 한 번만 나오는 줄을 읽어야한다

    cat 으로 읽어찾아보려했지만 너무 많았다

    그래서 sort라는 명령어로 정렬해보니 한 번만 나오는 문자열들을 찾을 수 있었다

    sort 텍스트로 된 파일의 행단위 정렬

    Bandit Level 9 → Level 10

    data.txt 파일에서 많은 = 뒤에 나오는 비밀번호를 찾아라...?

    cat 으로 읽어보려했으나 어림도 없었다

    그래서 grep으로 여러 시도를 하다가 strings 라는 명령어를 알았다

    strings 프로그램 안에서 사용된 문자열을 출력

    strings data.txt|grep =

    data.txt 파일 안에서 grep으로 찾은 =들을 strings로 출력해달라는 뜻이다

    Bandit Level 10 → Level 11

    base64로 인코딩되었다고 한다

    base64가 무엇인지 구글에서 찾아보니 리눅스용 인코딩/디코딩 도구라고 한다

    base64 -d 를 활용하여 디코딩해주면 비밀번호가 나온다

    Bandit Level 11 → Level 12

    13자리만큼 바뀐 문자들을 해결해야하나보다

    알파벳이 26자니까 13자리는 반인것 같다

    알파벳 처음 13개는 M까지니까 하나하나 다 바꿔주자

    tr 지정한 문자를 바꾸어주거나 삭제
    특정한 문자를 다른 문자로 바꾸거나 또는 특정 문자를 제거

    cat data.txt|tr a-mn-zA-MN-Z n-za-mN-ZA-M

    a 부터 m까지, n부터 z 까지를 대소문자 모두 각각 바꿔주고 cat 으로 data.txt를 읽는다는 뜻이다

    Bandit Level 12 → Level 13

    16진수로 변환된 data.txt가 여러번 압축되었다...?

    그리고 mkdir 로 /tmp 아래에 디렉토리를 하나 만들어야하는 것 같다

    디렉토리 이름을 12로 만들어보았다

    gzip 로 압축된 데이터라는데, 잘 모르겠어서 구글링 해보았다

    압축 종류에는 gzip, bzip2, tar가 있었다

    처음에 16진수 파일을 xxd 명령어를 통해 바이너리파일로 바꿔준 후 계속해서 압축을 풀어준다

    xxd 주어진 파일이나 standart input으로 들어온 문자들에 대해서 hex dump(컴퓨터 데이터의 16진법적인 보임새)를 만들어줌
    -r 반대로 수행 (hexdump → binary)

    압축 종류에 따라 다음과 같이 압축을 풀 수 있다

    mv filename filename.gz gzip -d filename.gz mv filename filename.bz2 bzip2 -d filename.bz2 mv filename filename.tar tar -xvf filename.tar

    마지막 data8.bin을 cat 으로 읽어주면 비밀번호가 나온다

    Bandit Level 13 → Level 14

    ?

    이번에는 비밀번호를 찾을 필요없이 SSH key를 이용하면 되는 것 같다

    cat 을 사용해보니 의미없는 것 같다

    SSH key 서버에 접속할 때 비밀번호 대신 key를 제출
    -i 원격 시스템에 사용할 로그인 이름을 설정

    ssh [원격계정]@[원격지_ip] -p [변경할 포트]

    구글링해보니 위처럼 사용하면 된다고 한다

    hostname 이 localhost였으니

    ssh -i sshkey.private bandit14@localhost

    이렇게 해주면 된다

    Bandit Level 14 → Level 15

    포트 30000으로 비밀번호를 넘겨라?

    아까 13-14 번에서 /etc/bandit_pass/bandit14에 비밀번호가 있다고했으니 읽어주자

    포트를 넘기는 명령어가 뭔지 구글링 해보았다

    nc TCP나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 간단한 유틸리티 프로그램

    nc [옵션][타켓 호스트][포트]

    nc localhost 30000

    nc 명령어로 포트 30000으로 아까 구한 비밀번호를 넘기자

    성공

    'Hacking > Web Hacking' 카테고리의 다른 글

    6주차 CSRF  (0) 2021.05.24
    5주차 XSS  (0) 2021.05.16
    4주차 PHP  (0) 2021.05.02
    3주차 JavaScript  (0) 2021.04.07
    2주차 HTML  (0) 2021.03.29

    댓글