본문 바로가기

리눅스/BANDIT 문제

Bandit Level 15 → Level 34

cluFn7wTiGryunymYOu4RcffSxQluehd

 

다음 레벨에 대한 자격 증명은 31000 ~ 32000 범위의 localhost의 포트에 현재 레벨의 암호를 제출하여 검색할 수 있다. 먼저 이들 포트 중 어떤 포트가 수신 중인지 확인하십시오. 그 중 누가 SSL을 사용하고 어떤 것이 SSL을 사용하지 않는지 알아보세요. 다음 자격 증명을 제공하는 서버는 단 한 대뿐이고, 다른 서버는 당신이 어떤 자격 증명을 보내든지 간단히 당신에게 다시 보낼 것이다.

 

즉 활성화된 포트를 찾아야한다. 이를 위해 nmap 명령어를 이용한다.

다음과 같이 활성화된 포트가 5가지 있다는 것을 발견할수가 있는데

 

여러개의 포트를 openssl 명령어로 실행하여 전 비밀번호를 입력해보면

31790 포트에서 private key가 저장되어있는 것을 확인할수가 있따.

이를 /tmp 디렉토리에서 복사하여 새로운파일을 만들고

chomod 600 소유주만 읽고 실행가능하도록 설정하여

ssh -i sshkey.private bandit17@localhost 를 통해서 입력함

bandit17에 접속성공하면 /etc/bandit_pass/bandit17에 저장되어잇는 파일을 cat 명령어로 확인

암호는

xLYVMN9WE5zQ5vHacb0sZEVqbrp7nBTn

 

 

Bandit Level 17 → Level 18

다음문제는 passwords.new 파일과 passwords.old 파일을 서로 비교하여 겹치지 않는 행에 암호가 있다고 문제에 나와있다.

 

그러므로 diff 명령어를 통해 두파일의 차이점을 알아낼것이다.

https://m.blog.naver.com/PostView.nhn?blogId=ncloud24&logNo=221255978037&proxyReferer=https:%2F%2Fwww.google.com%2F

 

[리눅스 명령어] diff 파일 비교 명령어

diff [differences] diff명령어는 differences의 약자로 두 파일 사이의 내용을 비교하는 명령어입니다. cm...

blog.naver.com

 

,diff [파일1] [파일2] 를 실행하면

 

다음과 같이 두개의 행이 나오는데 new 파일에 암호가 있어야 하므로 첫번째 행이 암호임을 알수가 있따.

다음 암호

kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd 

 

 

 

Bandit Level 18 → Level 19

 

다음 문제를 들어가면 시작이 되는 동시에 꺼지게 된다.

https://experiences.tistory.com/33

 

ssh(secure shell) 옵션

** ssh(secure shell) 구문 및 명령줄 옵션 ssh [-a] [-c idea blowfish des 3des arcfour tss none] [-e escape_char] A [-I identity_file] [-l login_name] [-n] [-k] [-V] [=o option] [-p port] A [-q] [-P]..

experiences.tistory.com

이를 해결하기 위해서는 다른 레벨의 문제에서나 다른 쉘에서 ssh 명령어를 통해 bandit18에 접속할때 위의 나오는 여러 옵션 중 -t 옵션을 통해 강제로 접속을 시도한다.

 -t  pseudo-tty 할당을 강제 .

즉 화면이 .bashrc 에 의해 강제로 튕기기 전에 -t를 이용해 쉘을 강제로 실행시킨다. 이때 쉘은 /bin/sh를 이용한다.

 

다음 명령어를 통해 접속에 성공하였따.

다음 암호

IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x

 

 

Bandit Level 19 → Level 20

 

다음 파일을 확이해 보자

bandit20-do 의 사용자 권한을 살펴보면 setuid를 가지고 있는데,

setuid에 대해서는 아래링크를 통해 보자!

https://cipp00h.tistory.com/11

 

SetUID란

SetUID란? - SetUID라는 것을 쉽게 말하자면 어떤 대상에 대해 임시적으로 사용자의 권한을 바꿔주는 룰(규칙)을 적용시켜주는 역할을 하는 8진수 비트(4000)이다.   예를 들어 user11이라는 사용자가 �

cipp00h.tistory.com

이는 소유권은 bandit20에 있는데 setuid가 잡혀있으므로 bandit20-do 가 실행하는 동안에는 bandit20의 권한을 잠시나마 가질수 있다. 그러므로 bandit20-do를 이용해서 소유주인 bandit20의 password를 일시적으로 알아낼수가 있다.

 

bandit20-do 를 실행했을 때 id 명령어를 입력하면 bandit20을 euid로 가짐을 알수가 있다.

다음처럼 암호를 알아낼수가 있다.

GbKksEFF4yrVs6il55v6gwY5aVje5f0j

 

 

Bandit Level 20 → Level 21

 

https://htst.tistory.com/61

 

nc(netcat) 명령어

nc(netcat) 명령어 사용법 넷캣(Netcat)은 TCP나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 간단한 유틸리티 프로그램이다. 일반적으로는 UNIX의 cat과 비슷한 사용법을 가지고 있�

htst.tistory.com

nc 명령어 옵션 및 사용방법 참고

 

첫번째 터미널 (nc 서버 측) : 이곳에서 전단계 비번을 전송

 

 

두번째 터미널 (nc 클라이언트 측) : 이곳에서 서버측의 데이터를 전송받으면 전단계 비번과 일치하는지 확인하고

일치하면 다음 단계 비번을 보냄

 

암호

gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr

 

 

Bandit Level 21 → Level 22

 

암호

Yk7owGAcWjwMVRwrTesJEwB7WVOiILLI

 

 

Bandit Level 22 → Level 23

 

/etc/cron.d 디렉토리에 저장된 파일들을 확인해본다.

 

 

bandit23의 password가 저장할꺼 같은 cronjob_Bandit23 파일을 확인해보면

/usr/bin/cronjob+bandit23.sh 가 저장되어 있고

이를 꺼내보면 다음과 같은 설명이 나온다.

cat /etc/bandit_pass/$myname 명령어로 password를 구할려면 cat /tmp/$mytarget 형태로 하라고 지시하며

myname 은 whoami 로서 현재는 bandit22가 저장되며

그러므로 mytarget은 I am user $myname(bandit22) 가 md5 암호화되고 cut 명령어가 실행되어 변환된다는 것을 볼수가 있다. 

 

우리가 원하는 것은 bandit23의 password 이기 때문에 다음과 같은 명령어를 통해 bandit23을 암호화한 값을 찾는다.

그 값을 /tmp/$mytarget 에서 $mytarget에 대신 넣어 확인해보면 암호를 확인할수가 있다.

jc1udXuA1tiHqjIsL8yaapX5XIAI6i0n

 

 

Bandit Level 23 → Level 24

 

깜빡 잊고 포스팅을 못했습니다. 이 문제를 따로 풀어 포스팅하겠습니다.

 

암호

UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ 

 

 

 

Bandit Level 24 → Level 25

nc 명령으로 포트 30002번에 접속하면 bandit24 비번과 올바른 4자리 핀코드를 공백으로 나누어 입력해야한다고 설명되어있다.

무작위의 4자리 핀코드를 입력하기 위해 쉘 스크립트를 작성한다.

위의 코드는 i가 0000에서 9999까지 1씩 증가한다.

제작한 쉘스크립트를 텍스트 파일로 만들어준다.

다음과 같이 어느시점에서 암호를 찾아낼수 있음을 알수가 있다.

 

암호

uNG9O58gUE7snukf3bvZ0rxhtnjzSGzG

 

 

 

Bandit Level 25 → Level 26

 

다음과 같이 ls 명령어 bandit26.sshkey 파일을 찾았고

ssh -i bandit26.sshkey bandit26@localhost 명령어를 통해 bandit26파일에 접속할려고 했지만 종료되었다.

또한 bandit26 파일은 /bin/bash 를 사용하지 않는다고 한다.

 

https://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%ED%8C%A8%EC%8A%A4%EC%9B%8C%EB%93%9C_%ED%8C%8C%EC%9D%BC_/etc/passwd

 

리눅스 패스워드 파일 /etc/passwd - 제타위키

다음 문자열 포함...

zetawiki.com

/etc/passwd : 리눅스 계정의 정보를 담은 텍스트파일

bandit26파일의 쉘은 /bin/bash 가 아니라 무엇인지 확인하기위해

cat /etc/passwd 와 동시에 grep bandit26 입력

bandit26의 쉘 파일을 확인해보자!

위의 코드가 나오는데 이를 통해 왜 bandit26 서버에 ssh를 이용해 들어가면 종료되는 이유를 알았다.

또한 프로그램이 종료되기전 more 명령어가 실행되는데 이것은 text.txt 파일 내용을 한 화면에 끊어서 출력하는 명령어로서 화면이 좁으면 좁을수록 출력속도가 느려져 exit 함수가 실행되기전 내가 손을 쓸수가 있다.

다음과 같이 뜨면 v를 눌러 vim 에디터를 실행한다.

 

다음과 같이 커맨드모드에서 다음과 같이 e 옵션을 이용해 bandit26 password가 있는 파일을 연다.

5czgV9L3Xx8JPOyRbXh6lQbmIOWvPT6Z

bandit26 접속 성공

 

 

 

 

Bandit Level 26 → Level 27

 

암호

3ba3118a22e93127a4ed485be72ef5ea

 

 

 

Bandit Level 27 → Level 28

 

다음 andit27 파일을 보면 소유주가 root 권한을 가지며 bandit28의 password는 bandit27-git/repo 파일에 저장되어 있따고 문제에 알려주므로

/tmp 파일에 새로 디렉토리 파일을 만들고

git clone을 통해 bandit27-git/repo를 tmp 디렉토리에 복제한다.

repo 디렉토리를 확인하면 README 파일을 확인할수 있고 암호가 저장되어있다.

암호

0ef186ac70e04ea33b4c1853d2526fa2

 

 

 

 

Bandit Level 28 → Level 29

 

bandit28의 소유주는 root에 있고 bandit29의 password는 bandit28-git/repo 파일에 저장되어 있따고 문제에 알려주므로

/tmp 파일에 새로 디렉토리 파일을 만들고 git clone을 통해 bandit28-git/repo를 tmp 디렉토리에 복제한다.

repo 디렉토리안으로 이동해서 README.md 파일을 확인하는데, 이때 README.md 파일은 password가 보여지지 않는 경우이다.

혹시 원래의 암호가 수정되어 x로 표시된경우 수정된 기록을 git log -p 명령어를 통해 확인할수가 있으므로 실행하면

원래 password가 삭제되고 xxxxxxxxxx로 수정되었음을 알수가 있다.

암호

bbc96594b4e001778eee9975372716b2

 

 

 

Bandit Level 29 → Level 30

 

bandit29의 소유주는 root에 있고 bandit30의 password는 bandit29-git/repo 파일에 저장되어 있따고 문제에 알려주므로 /tmp 파일에 새로 디렉토리 파일을 만들고 git clone을 통해 bandit29-git/repo를 tmp 디렉토리에 복제한다.

그다음 repo 디렉토리안으로 이동해서 README.md 파일을 확인한다.

파일안에 password는 없다고 나와있다.

일단 수정기록을 확인해보면 password는 그래로이다.

그래서 branch가 하나만 있는지 확인해보면 여러개의 branch가 있음을 알수가 있다.

git checkout 명령어를 통해 dev 브랜치로 변경하여 

파일을 확인해보면 이곳에는 password가 저장되어있다.

암호

5b90576bedb2cc04c86a9e924ce42faf

 

 

 

Bandit Level 30 → Level 31

git clone 명령어를 통해 bandit30-git/repo 디렉토리를 복제함

repo 디렉토리 안에 파일을 확인해보면 README.md 는 비워져있다고 나와있음

수정기록을 확인하고 변화가 없고

branch종류를 확인해보면 하나밖에 없으며.

이때 숨겨진 정보를 살펴보면 .git 이라는 디렉토리를 확인가능

이곳에서는 packed-refs 파일을확인해보면

secret을 발견할수 있고 git show secret을 이용하면 암호확인가능

암호

47e603bb428404d265f59c42920d81e5

 

 

 

 

Bandit Level 31 → Level 32

 

git clone 명령어를 통해 bandit31git/repo 디렉토리를 복제함

그상태에서 파일들을 살펴보면 README.md 파일은 file 이름이 key.txt이고 내용이 May I come in? 을 포함하는 파일을 master branch에서 원거리 저장소에 전송해야한다. 그러기 위해서는 add -> commit -> push 의 과정을 겪어야 한다.

 

먼저 kye.txt 파일을 만들고 May I come in? 내용을 저장한다.

add 명령어를 통해 key.txt 파일을 workspace에서 index로 보내야 한다. 이때 .gitignore file이 모든 텍스트 파일을 무시하고 그러므로 -f 옵션을 사용해야한다고 한다.

다행히 -f를 이용해 add가 성공하고 다음은 commit 명령어를 이용한다. add된 파일을 local repository에 보낸다. 

마지막으로 push 명령어를 통해 remote repository에 보냄으로서 

암호를 입력하면 다음과 같인 다음단계 비번이 나오게 된다.

암호

56a9bf19c63d650ce78e6ec0354ee45e

 

 

 

 

Bandit Level 32 → Level 33

 

다음 문제는 뭔지는 잘 모르겠지만 모든 문자를 대문자로 변환하여 명령어 실행자체가 안되는 쉘인것 같다.

인터넷 검색을 이용해 $0을 통해 bash 쉘로 변경하고 cat /etc/bandit_pass/bandit33 파일을 확인한다.

암호

c9c3199ddf4121b10cf581a98d51caee

 

 

 

Bandit Level 33 → Level 34

 

더이상 문제는 없는것 같다. clear

 

 

'리눅스 > BANDIT 문제' 카테고리의 다른 글

Bandit Level 15 → Level 16  (0) 2020.06.06
Bandit Level 14 → Level 15  (0) 2020.05.31
Bandit Level 13 → Level 14  (0) 2020.05.31
Bandit Level 12 → Level 13  (0) 2020.05.29
Bandit Level 11 → Level 12  (0) 2020.05.29