본문 바로가기
WarGames/Bandit

Bandit : Level 26 ~ Level 30

by madevth 2021. 11. 7.
반응형

[Level 26] Shell

Bandit Level 26

Bandit26에 로그인하는 것은 쉽겠지만 bandit26 user가 사용하는 것은 /bin/bash가 아니다?

우선 ls로 무엇이 있는지 확인해 보자.

sshkey가 있는 것을 보아 Level 17에서 sshkey를 사용해 접속했던 것처럼 로그인하면 될 것 같다.

그런데 Shell이 bash가 아니라고 한다. Shell은 사용자와 Kernel 사이의 소통을 위한 하나의 프로그램이다.

가장 대표적인 것이 bash인 것이지, 하나만 있는 것은 아니다.

현재 사용 중인 Shell은 /etc/passwd에서 확인할 수 있다. 많은 정보 중 bandit 26에 관련된 정보만을 보려면 grep을 이용하면 된다. $ grep bandit26 /etc/passwd

Bandit25는 /bin/bash를 사용하고 있지만, Bandit26은 /usr/bin/showtext를 사용하고 있는 것을 볼 수 있다.

일단 sshkey를 사용하여 bandit26으로 로그인해 보았다.

들어가자마자 위와 같은 문자가 보인 후 Connection이 끊어졌다.

왜인지 /usr/bin/showtext를 확인해 보면 알 수 있다.

file 명령어를 사용하여 /usr/bin/showtext를 검사해 보니 Shell Script라는 것을 알았다.

(참고로 file /bin/bash도 해봤다.)

cat 명령어를 사용하여 스크립트 내용을 출력해 보자.

more 명령어로 ~/text.txt 파일을 실행하고 있다. $ man more를 통해 무슨 명령어인지 확인해 보자.

more는 한 번에 한 화면씩 텍스트를 보여주는 명령어이다. 감이 잘 안 와서 bandit26.sshkey로 테스트를 해보았더니 화면이 클 때는 cat과 다를 바 없이 전부 출력됐지만, 화면의 크기를 줄이니

이렇게 화면 크기만큼만 텍스트가 출력되었고, Enter냐 Space냐에 따라 얼마큼 넘길 수 있는지가 달랐다.

그러니까, 원래는 man으로 text.txt(아마 bandit26이라는 글자)를 출력하고 종료를 하는 스크립트인데

화면 크기를 줄여놓으면 텍스트가 다 출력되지 않아 종료되지 않을 것이다.

화면을 줄이고 실행하니 종료가 되지 않았다. 그럼 저 상태로 명령어를 쳐야 무언가를 할 수 있다.

more의 매뉴얼을 더 살펴보면 v를 누르면 현재 line에서 에디터를 실행할 수 있다.

에디터를 실행했으므로 text.txt 파일을 확인하는 vi를 킨 상황이 되었다.

vi에서는 I(Insert)로 편집 모드를, ESC로 명령 모드를 사용할 수 있다. 명령 모드에서 :wq를 눌러 파일을 저장하고 나오는 것을 많이 해 보았을 것이다. : 키로 명령행을 활성화한 후 e [파일명] 입력하면 파일을 열 수 있다.

따라서 굳이 필요는 없겠지만 :e /etc/bandit_pass/bandit26으로 bandit26의 패스워드를 확인할 수 있다.

shell을 바꿔주지 않으면 계속 /usr/bin/showtext의 상태일 것이므로 set을 이용하여 /bin/bash로 바꿔주자

:set shell=/bin/bash로 shell을 바꿔준 후 :shell로 /bin/bash를 실행할 수 있다.

평소에 사용하던 Shell이 켜진 것을 확인할 수 있다.

[Level 27] Setuid again

Bandit Level 27

이번 단계는 Level 19와 같은 방식으로 문제를 풀어주었다.

[Level 28] Git Clone

Bandit Level 28

레포지토리의 파일을 클론 해오면 된다. home에서는 폴더 생성이 불가하므로 /tmp로 이동한 후 git clone을 하자. 패스워드는 로그인 시 사용했던 패스워드를 입력해 주면 된다.

README 파일을 확인하면 패스워드를 얻을 수 있다.

[Level 29] Git Log 확인 후 Commit 시점 돌리기

Bandit Level 29

마찬가지로 /tmp에 폴더 하나를 만들어준 후 클론 해온다.

password가 표시되어 있지 않다. $ git log로 로그 기록을 살펴보자.

아래쪽부터, 초기 commit → 빠진 데이터를 추가 → 정보 누출을 수정했다는 기록을 확인할 수 있다.

정보 누출을 고치기 전에는 비밀번호를 그대로 올려놓았을 것 같으니 checkout 명령어로 커밋 시점을 돌려보자.

(정보 누출을 고친 시점이 아니라 고치기 전 시점으로 돌려야 한다.)

Github에 올린 기록들은 변경사항까지 모두 저장되기 때문에 개인 정보를 나중에 고치더라도 이전 기록을 모두 확인할 수 있다. Github을 쓸 때는 이 점을 주의하자!

[Level 30] Git Branch 바꾸기

Bandit Level 30

마찬가지로 /tmp에 폴더 하나를 만들어준 후 클론 해온다.

production에는 패스워드가 없다. 그런 다른 브런치에는 있겠군!

$ git branch -a로 모든 브런치를 확인해 주자. 현재 브런치는 master이고 일반적으로 개발용 브런치를 dev로 설정하니 dev branch의 기록을 확인해 보자.

$ git checkout remotes/origin/dev로 브런치를 변경한 후 README.md 파일을 확인해 주었다.

비밀번호 GET!

반응형

'WarGames > Bandit' 카테고리의 다른 글

Bandit : Level 31 ~ Level 33  (0) 2021.11.14
Bandit : Level 21 ~ Level 25  (0) 2021.11.03
Bandit : Level 16 ~ Level 20  (0) 2021.11.01
Bandit : Level 11 ~ Level 15  (0) 2021.10.30
Bandit : Level 6 ~ Level 10  (0) 2021.10.27

댓글