bandit Write-up

Bandit Level 16 ~ 20

부산영롱 2023. 12. 5. 11:22

Bandit Level 16 → Level 17

localhost의 31000~32000번 사이 특정포트에 현재 패스워드를 제출하면 다음 단계를 위한 자격증명을 받을 수 있다고 한다.

먼저 서버 포트 중 열려있는 포트를 찾고 그 중 SSL를 사용하는 포트를 찾아야한다.

'nmap' 명령어를 활용하여 포트스캔한 결과 범위 내에 5개 포트가 열려 있는 것을 확인하였다.

여기서 SSL을 사용하는 포트가 무엇인지 openssl 명령어에서 포트만 변경해가면서 하나씩 접속해 보기로 했고 1개 포트에서 패스워드를 입력하고 인증서를 얻을 수 있었다.

이 'RSA PRIVATE KEY'라고 적혀 있는 인증서로 뭘 할수 있을까?

이전 단계에서 sshkey.private 이라는 ssh 개인키를 통해 다른 계정으로 접속하는 것을 해봤었다.

이번에도 마찬가지로 다음 단계의 ssh 개인키 내용을 얻었으니 이걸로 개인키 파일만 만들면 접속할 수 있을 것이다.

 

파일을 만드려고 했더니 홈디렉토리에도, 전에 만들었던 /tmp/hun에도 파일 생성 권한이 없다고 한다.

/tmp 아래에 hun2라는 디렉토리를 새로 생성하고 sshkey.private 파일을 만들어 키 내용을 넣었다.

새로 생성한 sshkey.private 파일의 권한이 너무 오픈되어있다고 거절되었다. 오직 본인만 볼 수 있도록 권한을 변경해주기로 했다.

위에서 볼 수 있듯이 소유자만 읽고 쓸수 있는 권한을 부여했다. 다시 접속해보자

bandit17로 ssh 접속 성공했고 패스워드도 확인하였다.


Bandit Level 17 → Level 18

홈디렉토리에 2개의 파일이 있는데 다음 단계 패스워드는 passwords.new에 있다고 한다. 그리고 passwords.old에서 오직 1개 라인만 변경되었다고 한다. 우리는 그 변경된 1개 라인을 찾으면 되겠다.

diff 명령어로 두 개 파일을 비교하여 내용이 다른게 몇번째 라인인지 어떻게 바꼈는지 확인할 수 있었다.

passwords.new 파일에 다음 단계 패스워드가 있다고 했으니 먼저 출력된 라인이 다음 패스워드가 되겠다.

 

그런데.. bandit18로 로그인하니 바로 접속이 끊어진다. 문제에 적혀있는 NOTE를 읽어보면 bandit18로 로그인 하려고 하면 'Byebye!'라는 문구가 보인다고 하며 bandit19 레벨과 관련이 있다고 한다.

무슨 일이 일어나고 있는지는 모르겠지만 접속이 안되는게 문제 의도인것 같으니 다음 문제를 읽어봐야겠다.


Bandit Level 18 → Level 19

다음 패스워드는 홈디렉토리에 있는 readme 파일에 저장되어있다고 한다. 근데 누군가가 .bashrc 파일을 수정하여 ssh를 접속하려고 하면 끊어지게 만들었다고 한다.

 

풀이방법을 알기만하면 정말 간단한 문제인데 어떻게 풀어야할지 몰라서 한참을 검색했다.

ssh 원격접속 후 바로 수행할 명령문 입력도 가능하다는 걸 이용해야한다.

항상 putty로 접속해왔지만 뒤에 명령어를 입력하려면 cmd 창을 열어서 수행해야한다.

ssh 접속명령어 뒤에 "cat readme"를 붙여서 다음 패스워드를 확인할 수 있었다.

뒤에 실행할 명령어에 " "는 안붙여도 정상적으로 동작한다.


Bandit Level 19 → Level 20

다음 단계 접근권을 얻기 위해서는 홈디렉토리에 있는 setuid binary 파일을 사용해야한다고 한다.

소유자가 bandit20이고 setuid가 설정되어 rws로 되어있는 것을 확인할 수 있다.

bandit20-do 파일을 실행해보니 사용방법이 나와있다. id 명령어를 붙였더니 euid가 bandit20으로 설정된 것을 볼 수 있다.

bandit20-do 파일을 실행하여 setuid 권한을 얻고 /etc/bandit_pass/bandit20 파일을 읽어 패스워드를 획득할 수 있었다.


Bandit Level 20 → Level 21

홈디렉토리에 setuid가 설정된 파일이 있고 이 파일은 인자로 입력한 특정포트로 접속한다고 한다.

그런 다음 connection에서부터 텍스트라인을 읽고 bandit20 패스워드와 비교하여 일치하면 다음 패스워드를 전송해준다고 한다.

setuid가 설정된 suconnect 파일을 확인했고 실행해보니 뒤에 포트를 인자로 입력해 주어야한다.

TCP를 사용하여 입력된 포트 연결하고 다른 쪽(포트를 열어둔 쪽)으로부터 일치하는 패스워드를 수신하면 다음 패스워드를 전송한다고 한다.

putty를 하나 더 띄워서 포트를 열고 suconnect를 통해 접속하면 될 듯 하다.

포트 열어둔 쪽 접속하는 쪽

먼저 왼쪽 터미널에서 nc 명령어를 이용하여 임의의 포트를 지정하여 열고 오른쪽 터미널에서 suconnect를 이용하여 열어둔 포트로 접속한다.

그리고 왼쪽 터미널에서 현재 패스워드를 입력하면 오른쪽 터미널에서 현재 패스워드를 읽고 매치시켜 다음 패스워드를 전송하는 것을 볼 수 있다. 왼쪽 터미널에서는 전송된 다음 패스워드가 출력된다.

 

이런게 해킹에서 어떤 식으로 활용될까 생각을 해봤는데 공격자가 공격에 활용할 포트를 열어놓고 피해자의 시스템에 리버스 쉘을 실행시키면 공격자와 접속이 되고 특정 작업을 통해 피해자 쪽 데이터를 탈취할 수 있을 것 같다.

'bandit Write-up' 카테고리의 다른 글

Bandit Level 26 ~ 30  (0) 2023.12.10
Bandit Level 21 ~ 25  (0) 2023.12.05
Bandit Level 11 ~ 15  (1) 2023.12.04
Bandit Level 6 ~ 10  (0) 2023.12.01
Bandit Level 0 ~ 5  (1) 2023.11.27