Over The Wire
Level20→21
TCP를 이용하여 지정된 포트 번호에 데이터를 전송하는데, 이때 bandit20에 로그인할 때 사용한 패스워드를 올바르게 전송하면 다음 단계의 패스워드를 얻을 수 있다. 오늘은 11월 21일이니 1121번 포트를 열었다. nc 명령을 이용해 1121번 포트로 band20의 패스워드를 전송하고, 다른 터미널을 열어 데이터를 전송받으면 level21의 패스워드를 얻을 수 있다.
Level21→22
bandit21부터 23까지는 cron.d 디렉토리를 이용해 문제를 풀어야 한다. /etc/cron.d/ 디렉토리에 들어가 다음 단계인 cronjob_bandit22 파일을 확인해 보면 usr/bin/cronjob_bandit22.sh를 재부팅할 때마다, 수시로 /dev/null로 보낸다는 내용이 적혀 있다.
cronjob_bandit22.sh 파일이 뭐길래... 궁금해서 확인해 보니, 대충 bandit22(다음 단계)의 패스워드를 /tmp/t7O6... 로 보낸다는 의미라고 한다.
파일을 확인하기위해 /tmp에 들어가 ls를 사용했더니 권한이 없댄다. 어쩔 수 없이 다른 디렉토리에서 확인해야 할 것 같다.
/tmp/t7O6...의 내용을 확인해 다음과 같이 bandit22의 패스워드를 얻을 수 있다.
Level22→23
bandit23도 사용자만 다를 뿐, 내용은 전 단계와 동일하다.
파일을 확인해 보면, /tmp/$mytarget으로 패스워드를 출력하는 것을 알 수 있다. 이때 myname은 얻고자 하는 사용자의 whoami, 즉 bandit23이다. mytarget은 echo 이하의 내용을 입력하면 알 수 있다. 그리고 이 mytarget의 출력이 곧 /tmp 내에 있는 bandit23의 패스워드가 담긴 파일 이름이 된다.
위와 같이 mytarget의 값을 통해 bandit23의 패스워드를 얻을 수 있다.
Level23→24
파일을 훑어보면, 대충 60초 주기로 /var/spool/$myname의 모든 스크립트를 삭제한다는 내용이 담겨 있다.
홈페이지의 내용에서 문제 풀이 힌트를 얻을 수 있었다. '네가 만든 쉘 스크립트는 한 번 실행할 때마다 사라져... 그러니까 어디에 복사해 둬'라고 한다.
dumpdir 디렉토리를 만들고, bandit24의 패스워드를 얻을 수 있는 dump.sh라는 쉘 스크립트를 작성해준다. 그리고 해당 디렉토리와 스크립트 파일의 권한을 777(-rwxrwxrwx)로 바꾸고 var/spool/bandit24에 작성한 스크립트를 복사한다. 권한을 바꾸는 이유는, 바꿔주지 않으면 bandit24의 권한으로 tmp/dumpdir에 내용을 작성할 수 없기 때문이다.
스크립트의 내용은 다음과 같다. 약 60초 정도 뒤에 bandit24의 패스워드가 담긴 tmp/dumpdir/bandit_pass의 파일이 생성될 것이다.
성공!
Level24→25
이 문제는 포트 30002번으로 bandit24의 패스워드와 4자리의 임의의 핀코드를 전달해 bandit25의 패스워드를 얻는 문제다. 4자리는 우리가 알 수 없으며(왕노가다...), 이 문제를 풀기 위해 무차별 대입 공격을 사용하라고 한다.
무차별 대입을 위한 10000가지 경우의 수를 만들어 줄 brute.sh 스크립트를 작성한다. 이 스크립트는 0000~9999의 모든 경우를 다 저장하는 list.txt 파일을 생성한다.
스크립트의 내용은 다음과 같다.
사진에는 담기지 않았지만, cat list.txt | nc localhost 30002 명령어를 입력하면 list.txt의 내용이 한줄씩 전달된다. 그리고 정답인 네 자리 숫자가 맞았을 경우, 다음과 같이 bandit25의 패스워드를 출력한다.
Level25→26
ls -al 명령으로 파일 목록을 확인해 보면 bandit26의 sshkey를 찾을 수 있다. 저 sshkey를 이용해 bandit26에 로그인해 보자.
다음과 같이 되는 것 같더니 갑자기 연결이 끊겨 버린다.
로그인이 되어야 하는데 안 되니까... /etc/passwd 파일을 확인해 봤다. 보면, 다른 사용자들과 달리 bandit26으로 로그인하자마자 bash가 아닌 showtext를 실행하는 것을 알 수 있다. 즉, bash를 얻지 못한다는 것이다.
사진에는 담기지 않았지만, 저 showtext 파일에는 more를 이용해 텍스트 파일을 읽어들인다. 이때 more은 파일을 한 페이지씩 읽기 때문에, 위의 사진과 같이 bandit26이 잘리면 --More-- 같은 메시지가 뜬다. 이때 엔터를 누르는 등의 행동 대신 v를 누르면 vi 에디터를 실행할 수 있다. vi 에디터 사용 중에 명령어를 입력할 수 있는 것은 이미 알고 있는 내용이다. 우선, 다음과 같이 :e /etc/bandit_pass/bandit26을 입력하면 bandit26 패스워드 파일이 바로 열린다.
하지만... 어차피 패스워드로 로그인해봤자 로그인이 되지 않으니 알아도 별 쓸모가 없다.
따라서 다음과 같이 bandit26의 권한으로 쉘을 얻어 접속해야 한다.
Level26→27
파일 목록을 확인해 보면 bandit27 소유의 bandit27-do 파일이 보인다. 그리고 이 파일엔 setuid가 걸려 있다. 이를 이용해 bandit27의 패스워드를 얻을 수 있다. 우선 파일을 실행시키면 Example처럼 명령어와 함께 전달하라고 말한다. cat 명령어로 bandit27의 패스워드를 출력하는 명령을 작성하면 다음과 같이 쉽게 패스워드를 얻을 수 있다.
'3. Pwnable (포너블) > 2) 개념 정리' 카테고리의 다른 글
[2022.03.12] 달고나 문서 -p.5 및 "생활코딩-Linux" 강의 듣기 (0) | 2022.03.19 |
---|---|
[2022.03.12] "생활코딩-Linux" 강의 듣기 (0) | 2022.03.13 |
[2021.11.13] OverTheWire 11-20, 달고나문서 -p.17 (0) | 2021.11.14 |
[2021.11.07] OverTheWire 0-10, 달고나문서 -p.12 (0) | 2021.11.06 |
[2021.09.25] 해커스쿨 F.T.Z Level11~15 풀이 (0) | 2021.09.26 |