아임노드

[OverTheWire Bandit] Bandit Level 20 -> Level 21 문제풀이 (+setuid 파일을 이용한 포트 연결) 본문

[SK shieldus Rookies 23기] 공부 노트/OverTheWire Bandit 문제풀이

[OverTheWire Bandit] Bandit Level 20 -> Level 21 문제풀이 (+setuid 파일을 이용한 포트 연결)

Noody 2024. 12. 14.

OverTheWire Bandit

Level 20 -> Level 21

 

 

목표 : setuid 파일을 이용해 localhost의 특정포트와 연결하기

 

  • setuid 파일 확인
  • setuid를 이용해 특정 포트 열기
  • 입력 값을 확인하여 다음 패스워드 보내기

 

풀이 방법

 

1. bandit20 서버 접속

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

 

 

 

2. setuid 파일 확인

이전과 마찬가지로 먼저 setuid 파일을 확인해본다.

 

s로 표시되는 것을 보니 suconnect은 setuid 파일이다.

이제 이 파일 사용법을 확인해보자.

 

Usage : ./suconnect <portnumber> 부분을 확인하면 된다.

"아! ./suconnect 에 포트번호를 입력해서 접속하면 되는구나."

 

 

3. setuid를 이용해 특정 포트 열기

포트 번호를 여는 명령어는 nc를 사용하면 된다.

2220 포트는 현재 사용하고 있으므로 임의의 포트 번호를 설정해준다.

여기서는 '1234'로 사용해보겠다.

nc -lvp <임의포트번호>
nc -lvp 1234

nc는 Netcat이라는 네트워크 툴을 실행하는 명령어
TCP, UDP 연결을 만들거나 데이터를 송수신하는 데 사용

-l (Listen Mode)
Netcat이 서버처럼 특정 포트를 열고 연결을 기다리는 상태

-v (Verbose Output)
실행 중인 작업에 대해 상세한 정보를 출력
출력 내용 예시:
- 연결이 성공했는지 여부
- 연결된 클라이언트의 IP 주소와 포트 번호
- 송수신되는 데이터

-p (Port Number)
-p는 포트 번호를 지정하는 옵션
여기서는 1234번 포트를 지정

 

 

4. 입력 값을 확인하여 다음 패스워드 보내기

1234포트가 열렸으니 cmd창을 하나 더 켜서 (기존 창을 끄지 않은 상태로)

bandit20으로 접속한 사용법에 따라 1234 포트로 접속한다.

새 cmd 창

 

그러면 기존 cmd창에서 접속 연결이 되었음을 알려준다.

기존 cmd 창

 

이제 기존 cmd창에서 입력값으로 다음 '현재 레벨 패스워드'를 입력해준다.

기존 cmd 창

* 현재 레벨 패스워드를 입력값으로 전송하는 이유는

문제에서 해당 값을 입력하면 다음 레벨 패스워드가 sending 된다고

가이드해주었기 때문!

 

이제 새 cmd 창에서 입력값을 읽고 패스워드가 매칭되었고 다음 패스워드를 보낸다는

문구와 함께 기존 cmd창에 '다음 레벨 패스워드'를 전송해준다.

새 cmd 창

 

기존 cmd 창

 

 


정리

창을 2개씩 쓰니까 좀 헷갈린다.

다시 정리를 해보자면

 

1번 창(기존 창)에서

임의의 포트를 열고 >

 

2번 창(새 창)에서

해당 포트번호로 접속(setuid 파일 이용) >

 

1번 창(기존 창)에서

입력값(현재 패스워드) 입력>

 

2번 창(새 창)에서

1번 창에서 입력한 입력값을 읽고 올바른 경우>

다음 패스워드를 1번 창에 전송

 

크게 위 순서로 단계가 진행된다고 보면 된다.