OverTheWire - Bandit
강의목차: Level 20 → Level 21(netcat 서버)
Bandit 웹페이지
https://overthewire.org/wargames/bandit/
1. Bandit Level 20 → 21
Level Goal
There is a setuid binary in the homedirectory that does the following: it makes a connection to localhost on the port you specify as a commandline argument. It then reads a line of text from the connection and compares it to the password in the previous level (bandit20). If the password is correct, it will transmit the password for the next level (bandit21).
NOTE: Try connecting to your own network daemon to see if it works as you think
Commands you may need to solve this level
ssh, nc, cat, bash, screen, tmux, Unix ‘job control’ (bg, fg, jobs, &, CTRL-Z, …)
홈 디렉터리에 setuid 권한이 적용된 실행 파일이 있는데 이런 기능이 있다: 이 프로그램은 사용자가 입력한 argument 로 입력한 포트를 이용하여 localhost로 접속한다. 이후 텍스트 한 줄을 읽고, 읽은 값을 이전 레벨의 패스워드(bandit20)와 비교한다. 만약 일치한다면, 이 프로그램은 다음 레벨(bandit21)을 위한 패스워드를 전송할 것이다.
주의: 당신의 네트워크에 접속하여 당신이 생각한대로 작동하는지 확인하라.
어떤 프로그램이 서버 안에 있다.
1. 프로그램이 자기 자신한테 접속 시도.
2. 데이터를 입력받는다.
3. 프로그램은 이전 레벨(bandit20)의 패스워드와 비교한다.
4. 프로그램에서 다음 레벨(bandit21)의 패스워드를 전송한다.
Level 20 로그인
$ ssh -p 2220 bandit20@bandit.labs.overthewire.org
패스워드: VxCazJaVykI6W36BkBU0mJTCM8rR95XT
setuid 란?
파일 실행 시 파일 소유자 권한으로 실행하는 것을 의미.
예를 들어 볼 수 있는 파일이 passwd 파일이다.
( S = 실행권한 없는 setuid, s = 실행권한이 포함된 setuid )
$ ls -al
suconnect 는 setuid 권한이 설정되어 있는것을 확인할 수 있다.
( bandit20 의 권한이 있지만, 실행시킬때 만큼은 bandit21 의 권한이 있다. )
$ file ./suconnect
→ setuid 설정 확인
$ ./suconnect
→ suconnect 실행 - 사용법이 나온다.
사용법: ./ suconnect [포트번호] 로 입력, TCP를 사용.
nc 명령어로 서버를 간단하게 구축.
nc
TCP 또는 UDP 프로토콜을 사용하는 네트워크 환경에서 데이터를 읽고 쓰는 간단한 프로그램.
일반적으로 상대 서버의 포트가 열렸는지 확인하거나, 직접 서버가 되어 원격 서버에서(클라이언트) 접속이 가능한지 확인하는 용도로 사용을 한다.
사용법
nc [OPTIONS] [HOST] [PORT]
옵션
-u : udp 연결
-p : 소스 포트 지정
-l : LISTEN 모드로 포트 띄움
-z : 단순 포트 스캔만 진행
-v : 더 많은 정보 확인
-n : 호스트 네임과 포트를 숫자로만 입력받는다.
$ nc -l -p 35001 < /etc/bandit_pass/bandit20
→ 35001 포트로 서버를 띄어서 /etc/bandit_pass/bandit20 의 패스워드를 읽어온다.
→ 서버를 만든다 - 서버에 접속하면 파일을 읽어서 클라이언트 측(suconnect)에 전송한다.
→ suconnect 는 한줄을 읽어서 bandit20 의 패스워드와 동일한지 확인한다.
→ bandit20의 패스워드와 동일하면 bandit21의 패스워드를 전송한다.
접속을 하면 프롬프트가 깜빡거리면서 클라이언트 측(suconnect)의 요청이 올때 까지 대기상태가 된다.
Cygwin 을 새로 열고 bandit20에 접속한다. Cgwin2 라고 지칭하겠다.
nc 로 확인했을 때도 35001 포트가 오픈되어 있는것을 확인할 수 있다.
기존의 Cygwin 에서 접속한거는 1회성이므로 35001 포트 확인 후 서버 재접속.
( 기존의 Cygwin 은 Cygwin1 으로 지칭하겠다. )
Cgwin2 에서 suconnect 프로그램으로 35001 접속 - 한줄 읽고 bandit20 패스워드 동일하므로 Cgwin1으로 bandit21 패스워드 전송
$ ./suconnect 35001
Cgwin1 에서 플래그 수신.
bandit21 패스워드: NvEJF7oVjkddltPSrdKEFOllh9V1IBcq
Level 21 접속 시도
$ ssh -p 2220 bandit21@bandit.labs.overthewire.org
Level 21 패스워드: NvEJF7oVjkddltPSrdKEFOllh9V1IBcq
$ whoami
$ id
입력하여 현재 로그인한 계정 확인
취미로 해킹1 강의 : https://www.inflearn.com/course/linux-3
'보안 > Bandit 워게임' 카테고리의 다른 글
OverTheWire - Bandit : Level 22 → Level 23 (0) | 2023.04.19 |
---|---|
OverTheWire - Bandit : Level 21 → Level 22 (0) | 2023.04.18 |
OverTheWire - Bandit : Level 19 → Level 20 (0) | 2023.04.16 |
OverTheWire - Bandit : Level 18 → Level 19 (0) | 2023.04.15 |
OverTheWire - Bandit : Level 17 → Level 18 (0) | 2023.04.14 |