티스토리 뷰

수업 노트/bandit

[lesson20] bandit level 20 → 21

오리지날초이 2022. 2. 4. 11:11

id : bandit20

password : VxCazJaVykI6W36BkBU0mJTCM8rR95XT

(2023.11 기준)

 

문제 목표를 살펴봅시다.

 

19 단계 문제와 마찬가지로 홈디렉토리에 setuid binary 파일이 있고, 다음의 기능을 수행한다고 합니다.

 

내가 명령어 인자로 지정한한 로컬 호스트 포트에 연결을 만들고,

연결로부터 전달된 텍스르 라인을 읽고, 이전 20단계의 패스워드와 비교한다.

만약 패스워드가 정확하다면, 21단계로의 패스워드를 전달할 것이다.

 

참고 : 당신의 네트워크 데몬에 연결을 시도해서 그것이 생각대로 작동하는지 확인하세요.

 

그러니까 19단계와 같은 방식으로 setuid binary 를 실행해보면 되겠습니다.

함께 풀어봅시다.

 

더보기
우선 열려있는 포트를 점검하고 작동중인 네트워크 데몬이 무엇인지 살펴봅시다.

netstat -ant 를 사용하면 열려있는 모든(a) tcp(t) 포트 번호(n) 를 확인할 수 있는데
아쉽게 bandit 환경에서는 실행을 못 시키네요.

nmap 으로 localhost 를 점검해보니 ssh 접속을 위한 22번 외 113, 30000 포트가 눈에 띕니다.

하지만 suconnect 파일을 이용해서 해당 포트로 접속해도 딱히 뭐가 되는건 없습니다.
문제 힌트가 아리송했는데 아무래도 직접 네트워크 데몬을 작동시켜야 하나 봅니다.
※ 데몬이란 간단히 설명하면 항상 실행중인 프로세스를 일컫는 말입니다.

내 서버에서 통신용 네트워크 데몬을 작동시키려면 nc 가 가장 편하고 유용할 것 같습니다.

일반적으로 내 PC 내의 파일(로컬 환경)을 읽고 화면에 출력하는데 사용하는 명령이 cat 인데
netcat 이라고 이름을 붙인데는 상대방 쪽의 파일을 내 쪽에서 간편하게 읽어들일 수 있다
정도의 의미로 받아들이면 되겠습니다.
(https://originalchoi.tistory.com/entry/ncNet-Cat 를 참고해주세요)

지난 번엔 nc 를 이용해서 상대서버에 접속했는데
이번엔 우리 서버에 nc 를 기동시켜보겠습니다.


man nc 페이지를 참고하면 nc -l 모드를 이용해서 서버모드로 동작 가능한 것을 확인할 수 있습니다.

식으로 동작시키면 되는데 이걸로는 1234 포트를 이용하는 nc 서버를 동작을 시켰지만 
그 외 아무런 작업을 할 수가 없습니다.

ctrl - C 로 끊고, 기존 명령어에 & 를 붙여 백그라운드 잡으로 작업을 수행하겠습니다
백그라운드 작업에 대한 설명은 본문 하단의 별도 포스팅 링크를 참고해주세요

ps aux 명령어를 통해서 내 id 로 실행중인 프로세스를 확인할 수가 있습니다.

우리가 실행시킨 nc -l -p 1234 localhost 도 잘 작동하고 있음을 확인할 수 있습니다.

 

본래 netstat 으로 확인하면 열려있는 포트번호를 정확히 확인할 수 있는데 본 환경에서 막혀있는게 아쉬울 뿐입니다. nmap 으로 점검하게 되면 포트 스캐닝 후 동작하던 백그라운드 잡이 자동 종료됩니다.
이럴땐 "nc -l -p 1234 localhost &" 명령을 다시 실행해주셔야 합니다.

 

※ 중간에 nc 연결을 취소해서 기존의 nc -l 모드가 깨진경우에는 jobs 명령어로 실행중인 백그라운드 잡을 확인하고 kill %1 식으로 백그라운드 잡 넘버를 직접 지정해서 프로세스 종료시켜주어야 합니다.

 

 

여튼 ps aux 로 nc 가 잘 실행되고 있음을 확인하였으니 다시 접속을 해봅시다.

nc [대상ip] [port] 로 접속이 가능합니다.

 

이제 문제에서 요구한대로 suconnect 를 이용해서 로컬서버에 접속후

level 19 패스워드를 입력해보겠습니다.

아쉽게도 기대했던 level 20의 패스워드는 나타나지 않네요. 

 

 

다시 곰곰히 생각해봅시다.

nc 가 상대방 쪽의 파일을 내 쪽에서 간편하게 읽어들일 수 있는 기능을 수행한다고 했죠?

 

nc 를 실행할때 메세지를 입력해놓으면 suconnect 는 네트워크로 연결하면서

해당 메세지를 읽어들이고 이를 비교해서 level 19 패스워드와 일치하면 다음단계 패스워드를 부여해주는 기능을 하는 것 같습니다.

echo 와 명령어 파이프를 이용해서 nc 를 새로 동작시켜 줍니다.


해당 서버에 nc 로 직접 접속해보겠습니다.


처음 접속시 미리 안내해놓았던 hello world 가 자동으로 출력됩니다.

jifwe, iweiw, vnvn 등은 제가 nc 터미널 상에서 임의로 작성한 텍스트이고
nc 서버도 무의미한 메아리를 돌려줄 뿐입니다.

 

여기까지 왔으면 다 왔습니다.

문제에서 요구한대로 level 19의 패스워드를 nc 서버에 심어줍니다. 


그리고 suconnect 를 이용해서 접속하면
패스워드를 읽고 match 를 판별했기때문에 next password 를 보내줍니다.

 

nc 서버의 역할과 nc 접속을 확인해볼 수 있는 문제였습니다.

 

백그라운드 작업에 대한 설명은 별도 포스팅을 참고해주세요

 

※ 최근 버전의 문제를 다시 풀어보니 예전에 작성한 풀이와 차이가 생겼네요.

일단 백그라운드 & 이 동작하지 않고, netstat -ant 는 지원됩니다.

그리고 nc 도 -p [port] 가 아니라 [destination] [port] 로 사용법이 바뀌었네요.

 

풀이 방식은 기존의 방식과 동일하되 nc 서버를 백그라운드로 동작시키지 못하는게 달라졌습니다.

 

어떻게 하면 좋을까요?

더보기

네, 터미널 두개로 동시에 접속하고

한쪽에선  echo "VxCazJaVykI6W36BkBU0mJTCM8rR95XT" | nc -l localhost 60000 식으로 nc 서버를 띄우고

한쪽에선 nc localhost 60000 식으로 접속하면 됩니다.

 

 

728x90
반응형

'수업 노트 > bandit' 카테고리의 다른 글

[lesson21] bandit level 21 → 22  (1) 2023.11.26
[lesson19] bandit level 19 → 20  (0) 2021.09.28
[lesson18] bandit level 18 → 19  (0) 2021.09.28
[lesson17] bandit level 17 → 18  (0) 2021.09.28
[lesson16] bandit level 16 → 17  (0) 2021.09.21
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함