[Level 21] 포트 연결
Level 20과 같은 setuid binary 파일이 있는데 그 파일은
$ ./suconnect <portnumber> 형태로 사용하면 localhost의 해당 포트 번호로 연결을 하는 프로그램이다.
해당 포트 번호에 연결해서, 텍스트를 읽어서 bandit20 패스워드랑 일치하는지를 확인하는 프로그램이므로, 해당 포트 번호로 비밀번호를 넘겨줄 필요가 있다. 레벨 14 문제 풀이에서 썼던 nc를 사용하면 된다!
우선 쉘을 두 개 켜주자.
그 후 한 쪽에서는 nc를 listening mode로 열어두고 (거부되는 포트도 있는데 몇 개를 쳐보니 되는 포트가 있었다.)
한 쪽에서는 ./succonnect로 연결해 준다.
왼쪽에서 현재 패스워드를 보내주니, 오른쪽에서 확인을 거쳐 다음 패스워드를 보내주었다.
[Level 22] cron 확인하기
Level 22에서 24까지는 모두 cron과 관련된 문제이다.
cron은 유닉스 계열 운영체제의 Job Scheduler로, 고정된 시간, 날짜, 간격에 주기적으로 작업을 실행하기 위해 사용한다.
문제에서 주어진 폴더로 들어가 cronjob_bandit22 파일을 확인해 보았더니,
"* * * * * bandit22 /usr/bin/cronjob_bandit22.sh $> /dev/null" 을 확인할 수 있었다.
앞에 *는 순서대로 분 / 시 / 일 / 월 / 요일이고 뒤는 실행할 명령어를 의미한다.
예를 들어 0 20 * * * /test.sh는 매일 20시에 test.sh라는 셸 프로그램을 실행하는 스케줄이다.
즉 "* * * * * bandit22 /usr/bin/cronjob_bandit22.sh $> /dev/null"는 매 분 cronjob_bandit22.sh를 실행하라는 의미이므로, 스크립트를 확인해 보자.
/etc/bandit_pass/bandit22의 파일 내용을 확인한 후 /tmp/어쩌고저쩌고에 저장하고 있는 것을 볼 수 있다.
살펴보니, /etc/bandit_pass/bandit22의 파일 내용은 권한 문제로 볼 수가 없어서 tmp/어쩌고저쩌고의 파일 내용으로 확인해야 했다.
패스워드 GET!
[Level 23] cron 확인하기 2
Level 22와 같은 방식으로 확인해 주자.
전 단계와 마찬가지로 /tmp/? 파일에 패스워드 파일이 있지만 어떤 파일인지 모르는 상황이다.
$mytarget이 그 파일 이름인데, $myname을 사용하여 특정 과정을 거쳐서 나온다는 것을 알 수 있다. (md5가 있는 걸 봐서 해싱 하는 과정일 듯하다.)
혹시나 하여 $myname에 bandit22를 넣어 확인해 보니 전 단계의 tmp/어쩌고저쩌고의 부분도 위 단계를 거쳐서 나온 거였다.
[Level 24] cron 확인하기 3 & 쉘 스크립트 작성하기
같은 방식으로 확인해 보았다.
살펴보면 /var/spool/bandit24 안에 있는 스크립트 파일들을 Executing and Deleting 하는 쉘 스크립트이다.
풀이 흐름은 이러하다.
프로그램이 매분 /var/spool/bandit24 안의 스크립트를 실행하므로, 폴더 안에 패스워드를 얻을 수 있는 스크립트를 넣어놓고 실행이 되도록 한다. 다만 1분 후에는 파일이 삭제될 테니, 다른 폴더에 저장되게 한다.
그렇다면 패스워드는 어떻게 얻을 수 있을까?
Bandit Level 20에서 /etc/bandit_pass/bandit20 안의 파일을 확인한 적이 있다.
Level n의 패스워드는 /etc/bandit_pass/banditn에 있다는 의미이다.
따라서 스크립트로 /etc/bandit_pass/bandit24의 파일을 읽어서 /tmp/어딘가에 저장하게 해두면, cron이 그 스크립트를 실행해 줄 것이다.
실행 권한을 수정해 줘야 하는데, 빨리하지 않으면 삭제되어버린다.
$ chmod 777 pw24.sh로 권한을 주고 잠시 후 /tmp/pw24.txt 파일을 확인해 보면 패스워드가 들어있는 것을 볼 수 있다.
난이도 있는 문제였다.
[Level 25] 쉘 스크립트에서 반복문 작성하기
UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ ####의 형태를 원하는데, 0000부터 9999까지 10000개의 조합을 확인해 봐야 한다. 0000부터 9999까지 조합을 list.txt에 저장하는 스크립트를 만들어 실행해 주자.
home에서는 파일 생성이 불가능해서 /tmp 안에 만든 후 chmod 777로 권한을 주고 실행했다.
list.txt 파일을 확인해 보면 10000가지 조합이 모두 입력됐음을 확인할 수 있다.
pin code가 틀리면 Wrong! 이 출력되므로 grep에서 제외 옵션인 -v로 Wrong이 나오는 것을 출력 제외해 주었다.
'WarGames > Bandit' 카테고리의 다른 글
Bandit : Level 31 ~ Level 33 (0) | 2021.11.14 |
---|---|
Bandit : Level 26 ~ Level 30 (0) | 2021.11.07 |
Bandit : Level 16 ~ Level 20 (0) | 2021.11.01 |
Bandit : Level 11 ~ Level 15 (0) | 2021.10.30 |
Bandit : Level 6 ~ Level 10 (0) | 2021.10.27 |
댓글