OverTheWire - Bandit
강의목차: Level 22 → Level 23(쉘 스크립트 변수)
Bandit 웹페이지
https://overthewire.org/wargames/bandit/
1. Bandit Level 22 → 23
Level Goal
A program is running automatically at regular intervals from cron, the time-based job scheduler. Look in /etc/cron.d/ for the configuration and see what command is being executed.
NOTE: Looking at shell scripts written by other people is a very useful skill. The script for this level is intentionally made easy to read. If you are having problems understanding what it does, try executing it to see the debug information it prints.
Commands you may need to solve this level
cron, crontab, crontab(5) (use “man 5 crontab” to access this)
한 프로그램이 cron에 의해 자동으로 그리고 주기적으로 실행되고 있다. 참고로 cron은 시간 기반의 스케줄러 프로그램이다. /etc/cron.d/ 디렉터리에 가보면 어떤 프로그램이 실행하도록 설정되어있는지 확인할 수 있다.
참고: 다른 사람들이 작성한 쉘 스크립트를 볼 수 있는 능력은 유용하다. 현재 레벨의 스크립트는 읽기 쉽게 작성되었다. 만약 이해하는데 어려움을 겪는다면, 그것을 출력하는 디버그 정보를 확인하라.
Level 22 로그인
$ ssh -p 2220 bandit22@bandit.labs.overthewire.org
Level 22 패스워드: WdDozAdTM2z9DiFEQ2mGlwngMfj4EZff
$ ls -al
$ cd /etc/cron.d
→ /etc/cron.d 로 디렉터리 이동
$ ls -al
→ cron 확인
bandit23 패스워드는 cronjob_bandit23 에 있는것으로 추정된다.
$ file ./cronjob_bandit23
→ cronjob_bandit23 파일형태 확인 - ASCII text
$ cat ./cronjob_bandit23
→ cronjob_ bandit23 화면에 출력
cron 에 등록하려면 일정 형식을 맞춰서 등록해야한다.
* * * * * : 주기 , 매분 실행된다.
bandit23 : 사용자
/usr/bin/cronjob_bandit23.sh &> /dev/null : 매분 누구의 계정으로 쉘 스크립트를 백그라운드(&) 에서 실행하며, 그 결과는 화면에 별도로 표시하지 않는다. ( /dev/null - 휴지통으로 보낸다. )
매분 bandit23 의 계정으로 쉘 스크립트를 실행한다.
cronjob_bandit23.sh →쉘 스크립트
쉘 스크립트 → 쉘 스크립트에서 사용하는 언어가 쉘에서 사용하는 명령어 기반으로 구성되어 있다.
쉘 종류에 따라 달라진다. 쉘 문법을 가지고 프로그램을 만들면 그것이 쉘 스크립트이다.
bash 에서 쉘 스크립트 만들면 bash shell script
cut 명령어
cut 명령어는 특정 파일의 열을 출력하여 제거하거나 원하는 열만 출력할 수 있는 명령어이다.
이 명령어는 텍스트 문서의 특정 필드를 제거, 편집을 통해 원하는 내용으로 출력이 가능하며, awk의 명령어를 사용하여 디테일하게 텍스트 파일의 출력 편집용으로 사용되기도 한다.
사용법
cut [옵션] [파일이름]
옵션
옵션 | 내용 |
-b | 지정된 바이트(byte)를 출력하는 옵션 |
-c | 지정된 문자를 출력하는 옵션 |
-d | 필드 구분자를 설정하는 옵션 |
-f | 지정된 필드를 출력하는 옵션 |
-s | 필드 구분자를 포함하지 않는 행을 출력하는 옵션 |
$ cat /usr/bin/cronjob_bandit23.sh
→ bandit23 쉘 스크립트 화면에 출력
#!/bin/bash
→ bash shell
myname=$(whoami)
→ whoami 입력해서 나온 값(bandit23)을 myname 변수에 저장한다($).
mytarget=$(echo I am user $myname | md5sum | cut -d ' ' -f 1)
→ echo(화면에 출력) I am user $myname(bandit22)
→ md5sum ( md5 해시함수 암호화 )
→ cut -d ' ' -f 1 ( 공백문자를 기준으로 문자를 자른다, 첫번째 거를 택한다. )
→ $ ( 위에서 암호화 후 공백문자를 기준으로 문자열 자른 후 첫번째 거를 mytarget 변수에 저장한다. )
echo "Copying passwordfile /etc/bandit_pass/$myname to /tmp/$mytarget"
→ 화면에 Copying passwordfile /etc/bandit_pass/bandit23 to /tmp/$mytarget 글자를 출력
→ 사용자를 위한 안내문 ( bandit23 의 패스워드를 /tmp/$mytarget(암호화된 값) 으로 보낸다 )
cat /etc/bandit_pass/$myname > /tmp/$mytarget
→ /etc/bandit_pass/bandit23 을 /tmp/$mytarget 으로 보낸다.
$ echo I am user bandit23 | md5sum | cut -d ' ' -f 1
→ I am user bandit23 을 md5 해시암호화 후 cut 명령어 사용해서 공백문자 기준으로 자르고 첫번째거만 출력
→ 8ca319486bfbbc3663ea0fbe81326349
$ cat /tmp/8ca319486bfbbc3663ea0fbe81326349
→ /tmp/8ca319486bfbbc3663ea0fbe81326349 에 저장되어있는 플래그 출력
플래그: QYw0Y2aiA672PsMmh9puTQuhoz8SyR2G
$ exit ( ssh 접속 상태에서 홈으로 나가기 )
Level 23 접속 시도
$ ssh -p 2220 bandit23@bandit.labs.overthewire.org
Level 23 패스워드: QYw0Y2aiA672PsMmh9puTQuhoz8SyR2G
$ whoami
$ id
입력하여 현재 로그인한 계정 확인
2. 총 정리
/etc/cron.d 에 cron(스케쥴러) 정보가 있다.
cronjob_bandit23 에 bandit23 패스워드 정보가 있는것으로 추정됨.
cron 에 등록된 정보를 확인해보면 매분마다 bandit23 계정으로 쉘 스크립트를 백그라운드에서 실행한다.
cronjob_bandit23.sh - 쉘 스크립트
bandit23.sh 쉘 스크립트 내용은 아래와 같다.
bandit23 을 myname 변수에 저장.
echo I am user bandit23 을 md5 해시함수 암호화 후 공백문자를 기준으로 문자를 잘라서 첫번째 문장을 mytarget 변수에 저장.
( md5 해시함수 암호화된 값: 8ca319486bfbbc3663ea0fbe81326349 *- )
패스워드가 저장되어있는 /etc/bandit_pass/bandit23 출력하여 /tmp/$mytarget 에 보낸다.
/tmp/8ca319486bfbbc3663ea0fbe81326349 에 저장되어 있는 bandit23 패스워드 출력
bandit23 패스워드 : QYw0Y2aiA672PsMmh9puTQuhoz8SyR2G
취미로 해킹1 강의 : https://www.inflearn.com/course/linux-3
'보안 > Bandit 워게임' 카테고리의 다른 글
OverTheWire - Bandit : Level 23 → Level 24 (0) | 2023.05.02 |
---|---|
OverTheWire - Bandit : Level 21 → Level 22 (0) | 2023.04.18 |
OverTheWire - Bandit : Level 20 → Level 21 (0) | 2023.04.17 |
OverTheWire - Bandit : Level 19 → Level 20 (0) | 2023.04.16 |
OverTheWire - Bandit : Level 18 → Level 19 (0) | 2023.04.15 |