일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C언어 # 부록
- HTML #핵심정리
- C++ 언어 # 핵심정리
- C언어 #핵심정리
- C++ 언어 # 핵심 정리
- MySQL #핵심정리
- shell_script
- C++ 언어 #핵심정리
- C언어 # 핵심 정리
- PHP #핵심정리
- Bandit
- C언어 #부록
- Hacking #Baic
- Today
- Total
cCcode
Bandit 원정대 3주차 미션 본문
Level 14 ~ Level 15
[The password for the next level can be retrieved by submitting the password of the current level to port 30000 on localhost.]
비밀번호는 localhost의 포트 30000번으로 level 14의 비밀번호를 제출하면 얻을 수 있다고 하네요.
그럼 'nc 명령어'를 통해서 localhost에 포트 30000번으로 접속해보겠습니다.
그리고 level 14의 비밀번호를 입력하면
바로 나오네요.
Level 15 ~ Level 16
[The password for the next level can be retrieved by submitting the password of the current level to port 30001 on localhost using SSL encryption.]
SSL 암호화를 사용해 localhost의 포트 30001에 Level 15의 비밀번호를 제출해서 다음 Level의 비밀번호를 검색할 수 있다고 합니다.
'Open SSL 명령어' 사용해서 SSL로 포트 30001에 접속할 수 있습니다.
Level 16 ~ Level 17
[The credentials for the next level can be retrieved by submitting the password of the current level toa port on localhost in the range 31000 to 32000. First find out which of these ports have a server listening on them. Then find out which of those speak SSL and which don’t. There is only 1 server that will give the next credentials, the others will simply send back to you whatever you send to it.]
Level 16의 비밀번호를 3100 ~ 3200 범위에 있는 포트 중 하나에 제출해서 검색할 수 있으며, 여러 개의 포트 중 오직 하나만이 자격 증명을 제공하며 나머지는 제가 보낸 비밀번호를 다시 저에게 보낸다고 하네요.
'nmap 명령어'를 사용해서 어떤 포트가 열려있는지 확인해보겠습니다.
996개의 포트가 닫혀있고 오직 5개의 포트만 열려있네요.
저는 어떤 포트에서 결과로 비밀번호를 반환하는 지 알지 못하기 때문에 'Open SSL 명령어'를 사용해서 하나 하나 비밀번호를 보내보겠습니다.
애초에 제출 할 기회 조차 없네요.
보낸 값과 똑같은 값이 반환 되었네요. 그러므로 실패
근데 포트에서 나가지를 못해서 계속 putty 자체를 나갔었는데 Ctrl + d (정상 종료)로 포트를 나갈 수 있었습니다.
(알려주신 컴맹님 감사합니다.)
RSA 키를 주네요..
그럼 일단 tmp(임시 폴더) 경로를 만들고 그 공간에 RSA 키를 저장하겠습니다.
'cat 명령어'에 '>'는 입력한 내용으로 새로운 파일을 만들 때 사용합니다. 반면에 '>>'는 기존 파일 내용 뒤에 연속해서 기록합니다. 이렇게 파일을 만들고 원격으로 접속을 시도해보면
개인 키 파일이 보호되지 않았다는 경고가 뜨네요
따라서 'chmod 명령어'를 사용해 bandit16을 제외하곤 접근할 수 없도록 제한을 두었습니다.
Level 17 ~ Level 18
[There are 2 files in the homedirectory:passwords.old and passwords.new. The password for the next level is inpasswords.newand is the only line that has been changed betweenpasswords.old and passwords.new]
비밀번호는 password.new에 있으며, password.old에서 변경된 유일한 부분이 비밀번호라고 합니다.
저는 'diff 명령어'를 통해 두 문자열 간의 차이점을 찾아보겠습니다.
passwords.new를 처음으로 적었으니 첫번째로 나오는 kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd 가 비밀번호입니다.
Level 18 ~ Level 19
[The password for the next level is stored in a file readme in the homedirectory. Unfortunately, someone has modified .bashrc to log you out when you log in with SSH.]
비밀번호는 홈 디렉토리의 readme 파일에 저장되지만 SSH로는 로그인이 되지않는다고 합니다.
... 정말로 로그인 자체가 되지 않네요 ...
그래서 ssh 명령어의 -t 옵션을 주어 원격으로 명령어를 실행시켜보겠습니다.
정말 다행히 저희는 level 18의 비밀번호를 알고있죠.
Level 19 ~ Level 20
[To gain access to the next level, you should use the setuid binary in the homedirectory. Execute it without arguments to find out how to use it. The password for this level can be found in the usual place (/etc/bandit_pass), after you have used the setuid binary.]
setuid 바이너리를 사용하여 일반적인 위치 /etc/bandit_pass 에서 비밀번호를 찾으라고 하네요.
그럼 일단 'ls명령어'에 -al을 옵션으로 주어 디렉토리 내부의 파일 소유자와 파일 크기, 생성날짜 등 모든 정보를 표시해보곘습니다.
여기서 setuid가 걸린 파일을 다른 사용자 즉, bandit20-do 파일 권한으로 내용을 확인해보겠습니다.
(setuid는 특수권한으로 설정된 파일을 실행할 때 일시적으로 파일 소유자의 권한을 얻어 실행할 수 있게 해줍니다.)
Level 20 ~ Level 21
[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).]
suconnect 라는 파일은 포트를 주면 TCP를 사용해 localhost의 지정된 포트에 연결하고 상대로부터 올바른 비밀번호를 받으면 그 번호를 다시 전송한다고 합니다. 아마 비밀번호가 맞는지 확인해주는거겠죠..?
그럼 이제 'nc 명령어'를 통해서 임의의 포트번호를 지정한 뒤 포트를 엽니다. - [다른 터미널에서 수행해야 합니다.]
그리고 또 다른 터미널에서 그 임의의 포트로 접속합니다.
이렇게 되면 두 터미널이 동일한 포트로 연결된겁니다. 연결한 후 다른 터미널 그러니까 suconnect를 실행시키지 않은 터미널에서 현재 레벨의 bandit 비밀번호를 보내주면
다음 단계의 비밀번호를 받을 수 있습니다.
지식 정리
nc 명령어
NetCat의 축약어로 TCP,UDP를 사용해 네트워크에서 데이터를 읽고 쓰는 명령어입니다.
- l : listen 모드
- p : 포트 번호 또는 포트명 지정
- u : TCP 대신 UDP 연결
openssl
네트워크 이용한 데이터 통신에 쓰이는 프로토콜 TLS, SSL의 라이브러리로 서버 인증, 클라이언트 인증, 암호화(데이터)기능을 제공합니다.
nmap 명령어
포트를 스캔하는 명령어로 해당 서버에 어떤 포트, 운영체제, 프로토콜이 열려있는지 확인할 때 쓰입니다.
diff 명령어
두 파일 사이에 내용을 비교해주는 명령어입니다.
- c : 두 파일간 차이점 출력
- d : 차이점을 자세히 출력
- i : 대소문자 차이 무시
- w : 공백 차이 무시
SSL?
Secure Socket Layer의 약자로 암호화 통신을 제공하며 전송 계층의 암호화 방식으로 프로토콜에 무관하게 사용가능하다는 장점이 존재하는 보안성 높은 프로토콜 입니다.
setuid?
Setuid가 설정된 파일을 실행시키면 그 파일의 권한을 일시적으로 빌려올 수 있습니다.
'Linux' 카테고리의 다른 글
[Linux]Shell script Basic - 1 (0) | 2021.07.14 |
---|---|
Bandit 원정대 2주차 미션 (0) | 2021.07.03 |
Bandit 원정대 1주차 미션 (0) | 2021.06.25 |