Wargame/Overthewire-bandit

Bandit overthewire writeup

1. level0

  putty 를 실행시키고 host를 bandit.labs.overthewire.org로 입력하고, port는 2220으로 설정해줍니다.

username과 password는 둘다 bandit0이고, 이를 입력하면 다음 단계로 넘어갑니다.

 

2. level0->level1

 리눅스 명령어가 몇개 필요한데, 모르는게 많아서 정리하겠습니다.

  1) cat: 파일의 내용을 표준 출력으로 내보내어 파일 내용을 알아보거나,

       여러 파일을 하나의 파일로 출력하여 연결합니다.

  2) ls: 디렉토리와 파일의 정보를 출력합니다.

  3) cd: 디렉토리를 이동할때 사용하는 명령어입니다.

 solution)

  ls ->readme 파일 뜸

 cat readme ->readme 파일 안의 비밀번호 찾을 수 있음

...더보기

password: boJ9jbbUNNfktd78OOpsqOltutMc3MY1

 

3. level1->level2

solution)

1) ls -> -이라는 파일이 뜹니다. 이를 dashed filename 이라고 하는데, dashed filename앞에

./를 앞에 붙여주면 -를 감춰주는 역할을 한다고 합니다.

2) cat ./-

...더보기

 패스워드: CV1DtqXWVFXTvM2F0k09SHz0YwRINYA9

 

4. level2->level3

 

1) ls -> spaces in this filename이라는 파일이 뜹니다.

2) cat+tab-> tab을 누르면 자동완성으로 파일명을 알 수 있습니다

cat spaces\ in\ this\ filename

 

...더보기

패스워드: UmHadQclWmgdLOKQ3YNgjWxGoRMb5luK

 

5. level3->level4

1) ls-> inhere파일 찾음

2) find inhere 

inhere안에 inhere/.hidden이라는 파일명을 찾을 수 있다.

3)cat inhere/.hidden

:패스워드가 숨겨져 있다.

 

...더보기

패스워드: pIwrPrtPN36QITSp3EQaw936yaFoFgAB

 

6. level4->level5

1) ls

2)find inhere

파일이 여러개 있다.

3) 처음부터 cat을 차근차근 해보면 -file07에서 암호를 찾을 수 있다.

 

...더보기

패스워드:koReBOKuIDDepwhWk7jZC0RTdopnAYKh

 

7. level5->level6

1) ls

2) find inhere

파일이 아주 많지만, 조건에 맞는 파일(1033byte)인 파일을 찾아야 한다.

여기서 size를 찾는 명령어를 몰라서 검색을 해보았다.

find ./(filename) -size (용량)으로 입력하면 정확히 맞는 파일을 찾을 수 있었다.

  b : 블록단위 512kb
  c : byte
  k : kbyte
  w : 2byte 워드
3) 용량에 맞는 파일은 ./inhere/maybehere07/.file02였다.

cat ./inhere/maybehere07/.file02

 

...더보기

패스워드:DXjZPULLxYr17uwoI01bNLQbtFemEgo7 

 

8. level6->level 7

1) 조건에 맞는 파일 이름을 찾아야 한다.

find / -user bandit7 -group bandit6 -size 33c

2) 조건에 맞는 파일을 찾을 수 있다.

 cat /var/lib/dpkg/info/bandit7.password 

...더보기

패스워드: HKBPTKQnIay4Fw76bEy8PVxKEDQRKTzs

 

9.level7->level8

data.txt라는 파일 안에서 millionth라는 단어 뒤의 암호를 찾아야 합니다.

1. grep "(문자열)" (파일명) 을 입력하면

millionth라는 단어 뒤에 암호가 숨겨져 있다.

...더보기

패스워드: cvX2JJa4CFALtqS87jk27qwqGhBM9plV

10. level8->level9

1. cat data.txt

2. sort data.txt | uniq -c

하면 문자열이 줄대로 정렬이 되고, 그 앞에 특정 문자열이 몇번 나왔는지 횟수가 보이게 된다.

sort 와 uniq는 같이 쓰기 좋다. (uniq- 반복되는 문자열은 제거하고 횟수를 보여줌)

...더보기

패스워드: UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR

패스워드: UsvVyFSfZZWbi6wgC7dAFyFuR6jQQUhR

 

11. level9->level10

==로 시작하는 data.txt 안의 문자열을 찾아야 한다.

strings data.txt 

를 입력하면 사용한 문자열만 추출해준다.

 

...더보기

패스워드:truKLdjsbJ5g7yyJ2X2R0o3a5HQJFuLk

 

12. level10->level11

base 64로 인코딩된 내용을 디코딩 해주어야 한다.

 1. base64 -d data.txt

 

...더보기

패스워드: IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR

 

IFukwKGsFW8MOq3IRFqrxE1hxTNEbUPR

 

13. level 11->level 12

rot 13이라는 암호체계로 암호화된 문자열을 복호화시켜주어야 한다.

rot 13이란 현재 알파벳을 13개 다음의 문자열로 변환시키는 암호체계이다.

이를 decrpyt 하기 위해 cat data.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m'을 입력해주었더니 패스워드를 찾을 수 있었다.

 

...더보기

패스워드:5Te8Y4drgCRfCx8ugdwuEX8KFC6k2EUu 

 

14. level 12-> level 13

과정이 갑자기 복잡해져서 당황했던 문제이다.

압축되어져 있는 데이터 파일을 압축을 풀어주는 과정을 계속 반복해야 했었다.

 

사용되었던 명령어)

1. mkdir : 새로운 디렉토리를 만든다

2. mv : 데이터 파일을 옮긴다.

3. cp : 데이터의 파일을 복사한다.

4. file: 파일의 정보를 보여준다.

5. gzip : gz 확장자의 압축을 풀어준다.

6. tar -xvf : tar 파일의 압축을 풀어준다.

7. bunzip2: bz2 파일의 압축을 풀어준다.

 

(풀었던 과정)
bandit12@bandit:~$ mkdir /tmp/jiyul 
mkdir: cannot create directory ‘/tmp/jiyul’: File exists 
bandit12@bandit:~$ mkdir /tmp/jiyul2 
bandit12@bandit:~$ cp data.txt/tmp/jiyul2 
cp: missing destination file operand after 'data.txt/tmp/jiyul2' 
Try 'cp --help' for more information. 
bandit12@bandit:~$ cp data.txt /tmp/jiyul2 
bandit12@bandit:~$ cd /tmp/jiyul2 
bandit12@bandit:/tmp/jiyul2$ xxd -r data.txt>data 
bandit12@bandit:/tmp/jiyul2$ file data 
data: gzip compressed data, was "data2.bin", last modified: Tue Oct 16 12:00:23 2018, max compression, from Unix 
bandit12@bandit:/tmp/jiyul2$ mv data data.gz 
bandit12@bandit:/tmp/jiyul2$ gzip -d data.gz 
bandit12@bandit:/tmp/jiyul2$ file data 
data: bzip2 compressed data, block size = 900k 
bandit12@bandit:/tmp/jiyul2$ mv data data.bz2 
bandit12@bandit:/tmp/jiyul2$ bunzip2 data.bz2 
bandit12@bandit:/tmp/jiyul2$ file data 
data: gzip compressed data, was "data4.bin", last modified: Tue Oct 16 12:00:23 2018, max compression, from Unix 
bandit12@bandit:/tmp/jiyul2$ mv data data.gz 
bandit12@bandit:/tmp/jiyul2$ gzip -d data.gz 
bandit12@bandit:/tmp/jiyul2$ file data 
data: POSIX tar archive (GNU) 
bandit12@bandit:/tmp/jiyul2$ mv data data.tar 
bandit12@bandit:/tmp/jiyul2$ tar -xvf data.tar 
data5.bin 
bandit12@bandit:/tmp/jiyul2$ file data5.bin 
data5.bin: POSIX tar archive (GNU) 
bandit12@bandit:/tmp/jiyul2$ mv data5.bin data5.tar 
bandit12@bandit:/tmp/jiyul2$ tar -xvf data5.tar 
data6.bin 
bandit12@bandit:/tmp/jiyul2$ file data6.bin 
data6.bin: bzip2 compressed data, block size = 900k 
bandit12@bandit:/tmp/jiyul2$ mv data6.bin data6.bz2 
bandit12@bandit:/tmp/jiyul2$ bunzip2 data6.bz2 
bandit12@bandit:/tmp/jiyul2$ file data6 
data6: POSIX tar archive (GNU) 
bandit12@bandit:/tmp/jiyul2$ mv data6 data6.tar 
bandit12@bandit:/tmp/jiyul2$ tar -xvf data6.tar 
data8.bin 
bandit12@bandit:/tmp/jiyul2$ file data8.bin 
data8.bin: gzip compressed data, was "data9.bin", last modified: Tue Oct 16 12:00:23 2018, max compression, from Unix 
bandit12@bandit:/tmp/jiyul2$ mv data9.bin data9.gzip 
mv: cannot stat 'data9.bin': No such file or directory 
bandit12@bandit:/tmp/jiyul2$ mv data9.bin data9.gz 
mv: cannot stat 'data9.bin': No such file or directory 
bandit12@bandit:/tmp/jiyul2$ mv data8.bin data8.gz 
bandit12@bandit:/tmp/jiyul2$ gzip -d data8.gz 
bandit12@bandit:/tmp/jiyul2$ file data8 
data8: ASCII text 
bandit12@bandit:/tmp/jiyul2$ cata data8 
-bash: cata: command not found 
bandit12@bandit:/tmp/jiyul2$ cat data8 
The password is 8ZjyCRiBWFYkneahHwxCv3wb2a1ORpYL 

 

15. level 13->14

 

숨겨져있는 sshkey 파일을 통해서 바로 bandit14로 넘어갈 수 있다.

1. ssh -i sshkey.private bandit14@localhost

 

16. level 14->15

위 문제에서 암호가 숨겨져있는 파일을 알려주었다.

 1. cat  /etc/bandit_pass/bandit14

 2. nc localhost 30000

 포트 30000번으로 들어가서 위에서 찾은 비밀번호를 입력해준다.

 

패스워드:BfMYroe26WYalil77FoDi9qh59eK5xNr 

 

17. level 15->16

ssl protocol을 사용하라고 문제에서 명시해주었으니, openssl을 사용해서 연결해야 한다.

그리고 저번에 사용했던 비밀번호를 그대로 30001번 포트에 옮겨주어야 하는 문제이다.

여기서 몇가지 명령어를 알아야 했다.

 1) s_client : ssl server에 연결하는 ssl client 프로그램을 실행 시켜준다.

  서버의 ssl인증서 정보 등을 살펴 볼 수 있다.

  s_client 사용법: openssl s_client -connect host:port [옵션]

  -> this implements a generic ssl/tls client which can establish a transparent connection to a remote server speaking ssl/tls. It's intended for testing perposes only and provides only rudimentary interface functionality but internally uses mostly all functionality of the openssl ssl library.

2) echo: 문자열을 넘겨줄 수 있다.

3) -connect host:port -> 접속할 호스트와 실행중인 포트를 지정한다 (ex) localhost:30001)

4) -quiet/ -ign_eof : 입력이 파일 끝에 도달하면 접속이 종료되는데 이를 방지해주는 역할을 한다.

 

1. echo "이전 비밀번호" | openssl s_client -connect localhost:30001 -quiet

->이를 입력해주면 다음 패스워드가 뜬다.

...더보기

패스워드: cluFn7wTiGryunymYOu4RcffSxQluehd 

패스워드: cluFn7wTiGryunymYOu4RcffSxQluehd 

 

18. level 16->level 17

 

1. nmap으로 31000부터 32000까지의 포트를 스캔해서 열려있는 포트를 찾아주어야 한다.

nmap localhost -p31000-32000

->열려있는 포트 31790을 찾을 수 있다.

2. 열려있는 포트 31790에 전 단계의 비밀번호를 그대로 입력해주면 sshkey값을 돌려준다.

 echo "cluFn7wTiGryunymYOu4RcffSxQluehd" |openssl s_client -connect localhost:31790 -quiet 

3. 여기 sshkey값을 다른 디렉토리를 만들어 복사해준다.

 echo "cluFn7wTiGryunymYOu4RcffSxQluehd" |openssl s_client -connect localhost:31790 -quiet > /tmp/17.prviate

4. 이 다음 단계에서 바로 tmp/17.private으로 접속해주려 했으나 너무 오픈된 파일이라 권한을 설정해주어야 한다고 한다.

chmod 명령어로 권한을 설정해주었다.

->chmod 600 /tmp/17.private

5. 17.private파일을 이용해 bandit17로 넘어가주었다.

 

ssh-i /tmp/17.private localhost@bandit17

 

19. level17->level 18

1. ls

passwords.old passwords.new

파일 두개를 찾을 수 있다. 두 파일에서 다른 점을 찾아야 한다.

2. diff passwords.new passwords.old

여기서 비밀번호는 passwords.new라고 했으므로 passwords.new에서 달라진 내용이 비밀번호가 된다.

 

...더보기

패스워드: kfBf3eYk5BPBRzwjqutbbfE887SVc5Yd 

 

20. level 18->level 19

bandit18에 로그인을 하면 바로 로그아웃이 되어버린다.

이는 문제에서 누군가 bashrc의 내용을 로그아웃되게 바꿔놓았다고 명시해놓았는데, 이 때문에 바로 로그인하는 것이 아니라 bandit17에서 우회해서 바로 로그인되도록 해야 겠다고 생각을 했다.

tip! bashrc란 bash shell에서 환경설정을 위해 로드하는 파일 중 하나라고 한다. 사용자가 로그인을 시도하려고 하면  인증 과정을 거친 뒤 login shell을 띄워주게 되는데, 이 과정에서 profile, bashrc, .bashrc, .bash_profile등등의 파일들을 실행하면서 .profile을 로드하게 되고, 이걸 실행하면서 .bashrc가 불리게 된다고 한다.

 

또 구글링 해본 결과, ssh에 명령어를 줘서 실행할 경우 login shell을 실행하지 않아 bashrc가 실행이 되지 않는다고 한다.

 

1. readme라는 파일을 읽어야 하므로 bandit17에서

ssh bandit18@localhost cat readme를 실행시켜준다.

2. bandit18의 비밀번호를 입력하면, 다음단계의 비밀번호를 찾을 수 있다.

 

...더보기

패스워드: IueksS7Ubh8G3DCwVzrTd8rAVOwq3M5x 

 

 

21. bandit19->bandit20

bandit20의 권한이 필요하다.

따라서 ls 를 하여 bandit20-do파일을 찾은후, ./bandit20-do cat /etc/bandit_pass/bandit20 을 입력하여

bandit20-do파일의 권한을 빌려서 패스워드가 들어있는 파일을 읽을 수 있다.

 

...더보기

패스워드:GbKksEFF4yrVs6il55v6gwY5aVje5f0j

 

 

22. bandit20->bandit21

1.  nc명령어로 포트를 하나 열어주고, 거기에 전 비밀번호를 넣어준다.

 

nc -l -p 31555 < /etc/bandit_pass/bandit20 &

2. setuid 파일을 이용해 연결해준다.

./suconnect 31555

자동으로 전의 패스워드가 입력되면서 비교가 되고, 다음 패스워드를 얻을 수 있다.

 

...더보기

패스워드: gE269g2h3mw3pwgrj0Ha9Uoqen1c9DGr

 

23. bandit 21->bandit 22

1. ls /etc/cron.d

2. cat /etc/cron.d/cronjob_bandit22

이를 통해 위 크론탭이 무슨 일을 하는지 볼 수 있다.

3. cat /usr/bin/cronjob_bandit22.sh

4. cat /tmp/t7O6lds9s9S0RqQh9aMcz6ShpAoZkF7fgv

 ->패스워드가 나온다.

 

...더보기

패스워드: Yk7owGAcWjwMVRwrTesJEwB7WVOiILLI 

 

 

24. bandit 22->bandit 23

 1. ls /etc/cron.d

2. cat /etc/cron.d/cronjob_bandit23

이를 통해 위 크론탭이 무슨 일을 하는지 볼 수 있다.

3. cat /usr/bin/cronjob_bandit23.sh

4.  echo I am user bandit23 | md5sum | cut -d '' -f 1 

5. cat /tmp/8ca319486bfbbc3663ea0fbe81326349

 

...더보기

패스워드: jc1udXuA1tiHqjIsL8yaapX5XIAI6i0n

 

25. bandit 23->bandit 24

꽤 헤멨던 문제이다. 파일이 제거되는 시간제한이 있는것을 간과하고 문제를 풀었더니 패스워드 파일을 읽어낼 수가 없었다.

 

 1. ls /etc/cron.d

2. cat /etc/cron.d/cronjob_bandit24

여기서 이 cron이 무슨 동작을 하는지 볼 수 있었다,

모든 파일이 삭제될때까지 동작하는 파일이라고 짐작하였다.

3.  cd /var/spool/bandit24

4. 새로운 스크립트를 만든다.

  1) setuid가 존재하는 cronjob_bandit.sh 스크립트가 bandit24의 권한을 가지고 /var/spool/bandit24안의 파일을 실행할 수 있게 한다.

   2) 1분 정도 후에 bandit24의 권한이 실행되고, 그 후에 읽을 수 있을 것이다.

  -> vi password.sh

  #!/bin/sh

  cat /etc/bandit_pass/bandit24 > ./showpassword (cat을 통해 내용을 복사할 수 있다)

 

  5. chmod 777 password.sh를 통해 권한을 올려준다.

  6. ls-al을 계속 반복하면서 showpassword가 생성되었는지 확인한다.

  7. 생성이 되었다면 즉시 cat showpassword를 통해 패스워드를 읽어내야 한다.

 

...더보기

password: UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ 

 

 

26.bandit 24->bandit 25

bandit 24의 암호+정해져있는 네자리 코드를 포트 30002번에 넣어야 하는 문제였다.

1. cd /tmp/TT

2. vi air.sh

#!/bin/bash 

pw="UoMYTrfrBFHyQXmg6gzctqAwOmw1IohZ" 

for i in {0..9999} 
do 
        echo "$pw $i" >> /tmp/TT/pwlist 
done; 

vi 편집기를 이용해서 0~9999사이의 모든 숫자를 돌아가게 하는 스크립트를 하나 짜주었다.

 

3. nc 127.0.0.1 30002 < ./pwlist

 위 포트로 모든 리스트를 집어넣어주면 어느 한 구간에서 correct! 되어 패스워드를 찾을 수 있다.

...더보기

패스워드: uNG9O58gUE7snukf3bvZ0rxhtnjzSGzG

 

 

27. bandit 25->bandit 26

1. cat /etc/passwd

2. cat /usr/bin/showtext

-> more ~/text.txt라는 명령을 확인 할 수 있다.

 

구글링 결과, more는 vi 편집기를 기반으로 하고, 화면에 내용을 모두 출력시킨 뒤 종료가 되는데, 이를 이용해서 푸티 화면을 아주 작게 만든다면, more가 실행중인 상태에 진입할 수 있는 것이다.

3. ssh-i ./bandit26.sshkey bandit26@localhost

4.

v(vi 편집기에 진입)->:r /etc/bandit_pass/bandit26

의 명령을 삽입하면 패스워드를 알아낼 수 있다.

vi에서는 특정 명령어를 실행할 수도 있고, 쉘을 지정하여 실행시킬 수 있는 기능도 있다고 한다.

 

패스워드: 5czgV9L3Xx8JPOyRbXh6lQbmIOWvPT6Z

 

28. bandit 26->bandit 27

1. ls

2. ./bandit27-do cat /etc/bandit_pass/bandit27

 

권한이 존재하므로 그걸 통해 그냥 패스워드를 읽을 수 있다.

...더보기

패스워드: 3ba3118a22e93127a4ed485be72ef5ea

 

29. bandit27->bandit28

1. ls -l

root로 권한설정이 되어있으므로 tmp디렉토리에서 파일을 복제해야 한다.

2. cd /tmp/TT

3. git clone ssh://bandit27-git@localhost/home/bandit27-git/repo

git 파일을 다운받는다.

4. 그러면 다시 비밀번호를 입력하고,

ls -l repo

README 라는 파일이 존재하지만 바로 읽을수는 없어서 다시 디렉토리 이동을 해주어야 했다.

5. cd /repo

6. cat README

 

...더보기

패스워드:0ef186ac70e04ea33b4c1853d2526fa2

 

30. bandit 28->bandit29

1. ls -l

2. cd /tmp/TT28

3. git clone ssh://bandit28-git@localhost/home/bandit28-git/repo

비밀번호를 입력한다.

4. ls -l 

5. cd repo/

6. cat README.md

-> 여기까진 전 과정과 같다.

7. 이 git파일에서 비밀번호가 누군가에 의해 수정이 되었으므로 수정되기 전 내역을 찾아야 한다.

 git 명령어에서는 그 전에 수정 과정을 상세히 볼수 있는 log -p 명령어가 있었다.

git log -p

8. 누군가 비밀번호를 바꿔놓은 과정을 살펴볼수 있다.

 

...더보기

패스워드:  bbc96594b4e001778eee9975372716b2

 

 

31. bandit29 ->bandit 30

 

위에서와 6번과정까지 동일하다.

1. 하지만 git파일의 로그를 살펴보아도 패스워드가 바뀐 점을 찾을 수가 없었다.

따라서 이 브랜치에 비밀번호가 없다고 생각하고, 다른 브랜치로 이동해야겠다고 생각했다.

2. git branch -r

로 이동할수 있는 다른 브랜치를 찾아보았다. 총 네개가 나왔는데, 모두 내용을 살펴본 결과 한개의 브랜치에서 뭔가 내용이 있는걸 발견했다.

3. git merge origin/dev

이 git에서 두개의 readme 파일이 있었다.

4. git log -p 를 이용해 readme 파일에서 비밀번호가 바뀐 내역을 확인할 수 있었다.

 

...더보기

패스워드:  5b90576bedb2cc04c86a9e924ce42faf

 

32. bandit30->bandit31

위의 내용과 1,2번까지 동일하다, 그렇지만 어떤 브랜치도 찾을 수가 없었다.

1. 그래서 다시 repo파일을 뜯어보기로 생각했다.

ls -al /tmp/TT30/repo

->.git라는 디렉토리를 찾을 수 있었다.

2. cd .git

3. ls -al 

여러 디렉토리들이 나왔다. 하나하나 cat을 해보던 도중 packed-refs에서 secret tag를 찾을 수 있었다.

tag파일이  무엇인지 몰라서 찾아보니 커밋을 참조하기 쉽도록 이름을 붙이는 것이라고 한다. 각종 주석과 설명을 덧붙일 수 있는 내용이라고 한다. 즉 뭔가 새로운 내용이 있을것 같아서 show tag 명령어를 해보기로 했다.

4. git show secret

-> 패스워드를 찾을 수 있다.

 

...더보기

패스워드: 47e603bb428404d265f59c42920d81e5

 

 

33.bandit 31->bandit 32

역시 git파일을 다운받은 뒤 과정부터 시작하겠다.

1. ls

2. cat README.md

key.txt라는 파일을 만들어서 May I come in?이라는 내용을 적어서 저장소에 push하라는 명령이 담겨있었다.

3. vi key.txt

-> vi 편집기를 이용해  May I come in? 이라고 스크립트를 적어주었다.

4. git add key.txt

add라는 명령어를 통해 master branch에 추가해주려고 했지만, .gitignore 디렉토리의 내용이 막았기 때문에 -f 명령어를 넣어주었다.

5. git commit

찾아보니까 커밋된 파일만 push가 가능하다고 해서 파일을 commit해주었다.

저장소위치가 있는 부분을 주석처리를 떼주면 된다고 한다.

6. git push

->비밀번호를 다시 입력한다

7. 패스워드를 찾을 수 있다.

 

...더보기

패스워드 : 56a9bf19c63d650ce78e6ec0354ee45e

 

34. bandit 32->bandit33

uppercase shell이라는 이름을 보고 뭔가 대문자에 관련된 문제라고 생각했다.

일단 무슨 문자열이든 입력을 해보니 모든 문자열을 대문자로 바꿔버렸다.

전혀 감을 못잡겠어서 쉘에 대한 명령어를 찾아보니 $0을 입력하면 bash shell로 전환이 가능하다고 한다.

바로 ls /etc/bandit_pass를 하니 bandit32 디렉토리를 찾을 수 있었다.

cat /etc/bandit_pass/bandit32-> 패스워드를 읽을 수 있었다.

 

...더보기

패스워드: c9c3199ddf4121b10cf581a98d51caee

35. finish!

리눅스에 대해 아는게 많이 없어서 시간이 꽤 많이 걸렸던 것 같다. 밴딧의 힌트와 구글링에 많이 의존했기 때문에 앞으로는 개념에 대해 공부를 병행하면서 과제를 풀 것이다.