WAR GAME/Bandit

[OverTheWire: Bandit] level22 -> level23

jir4vvit 2020. 3. 3. 21:19

사용 툴: cygwin

 

1) 문제

level22 -> level23 문제

프로그램은 시간 기반 작업 스케줄러인 cron으로부터 일정한 간격으로 자동으로 실행되고 있다. /etc/cron.d/에서 구성을 살펴보고 실행 중인 명령을 확인해라..

 

NOTE: 다른 사람들이 쓴 shell 스크립트를 보는 것은 매우 유용한 기술이다. 이 스크립트는 의도적으로 읽기 쉽게 만들어진다. 이 기능이 무엇인지 이해하는 데 문제가 있는 경우 그냥 실행해 봐라..

 

 

2) 문제풀이

bandit22로 로그인 해 준 후, 일단 홈디렉터리를 살펴보았다.

bandit22@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
bandit22@bandit:~$ cd /etc/cron.d
bandit22@bandit:/etc/cron.d$ ls -al
total 28
drwxr-xr-x  2 root root 4096 Dec  4 01:58 .
drwxr-xr-x 88 root root 4096 Aug  3  2019 ..
-rw-r--r--  1 root root  189 Jan 25  2017 atop
-rw-r--r--  1 root root  120 Oct 16  2018 cronjob_bandit22
-rw-r--r--  1 root root  122 Oct 16  2018 cronjob_bandit23
-rw-r--r--  1 root root  120 Oct 16  2018 cronjob_bandit24
-rw-r--r--  1 root root  102 Oct  7  2017 .placeholder
bandit22@bandit:/etc/cron.d$

하지만 별다른 단서가 보이지않아 문제에서 언급했던 /etc/cron.d로 가보았다.

 

bandit22@bandit:/etc/cron.d$ cat cronjob_bandit23
@reboot bandit23 /usr/bin/cronjob_bandit23.sh  &> /dev/null
* * * * * bandit23 /usr/bin/cronjob_bandit23.sh  &> /dev/null
bandit22@bandit:/etc/cron.d$ cat /usr/bin/cronjob_bandit23.sh
#!/bin/bash

myname=$(whoami)
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)

echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"

cat /etc/bandit_pass/$myname > /tmp/$mytarget
bandit22@bandit:/etc/cron.d$

바로 직전 문제랑 비슷한 양상이다...

 

재부팅할 때마다, 매순간마다 /usr/bin/cronjob_bandit23.sh이 파일이 휴지통으로 버려진다고 한다.

 

그래서 cat으로 열어보았다.

#!/bin/bash #bash 쉘을 사용한다 

myname=$(whoami) #bandit23
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)
# I am user bandit23을 md5sum 암호화 시키고 ' '공백을 다 제거 후 첫 번째 덩어리를 선택한다.


echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"

myname과 mytarget은 저기서 변수처럼 쓰이고 있다.

 

맨 마지막 echo에서 말했듯이 패스워드 파일은 /tmp/$mytarget에 복사되어있다고 한다.

우리는 mytarget에 해당하는 값을 구한 뒤 cat으로 복사된 패스워드 파일을 보면 된다.

 

bandit22@bandit:/etc/cron.d$ echo I am user bandit23 | md5sum | cut -d ' ' -f 1
8ca319486bfbbc3663ea0fbe81326349
bandit22@bandit:/etc/cron.d$ cat /tmp/8ca319486bfbbc3663ea0fbe81326349
jc1udXuA1tiHqjIsL8yaapX5XIAI6i0n
bandit22@bandit:/etc/cron.d$

 

bandit22@bandit:/etc/cron.d$ ssh bandit23@localhost
bandit23@bandit:~$ id
uid=11023(bandit23) gid=11023(bandit23) groups=11023(bandit23)
bandit23@bandit:~$

끝!