참고※참고 자료는 드림핵을 이용하였습니다.
※드림핵의 로드맵대로 공부할 예정입니다.
※스스로를 위해 정리한 참고 자료입니다.
Description
리눅스 명령어를 실행하는 웹 서비스가 작동하고 있습니다.
해당 웹 서비스의 코드가 첨부파일로 주어집니다.
flag.txt 파일을 찾아 출력하여 플래그를 획득하세요!
플래그 형식은 DH{...} 입니다.
#코드 첨부파일 내용
#!/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)
이번 글에서는 코딩을 시작하는 발걸음이 되는 소스 코드 편집기 사용법을 알아보고, 기본적인 C 코드를 컴파일하여 실행하는 과정을 살펴 보겠습니다.
- 비주얼 스튜디오 코드(Visual Studio Code, 이하 VS Code)는 Windows, macOS, Linux에서 사용 가능한 소스 코드 편집기입니다.
- 기본적으로 JavaScript, TypeScript, Node.js를 지원하며 확장 프로그램(Extension)을 통해 C, Java, Python 등 100개 이상의 언어를 지원합니다.
- 가볍고 무료인데 다양한 기능을 제공하여 많은 사람들이 사용하고 있습니다.
- 개발을 할 때만 소스 코드 편집기를 사용한다고 생각하는 것은 큰 오해입니다.
- 해킹 공부를 할 때도 직접 익스플로잇 코드 혹은 스크립트를 작성해야 하는 경우가 많습니다.
커맨드 팔레트(Command Palette)는 VS Code에 존재하는 기능을 키보드 입력으로 검색하고 실행할 수 있는 간편한 명령 처리 기능입니다.
View-Command Palette... 혹은 단축키 Ctrl+Shift+P로 열 수 있습니다.
VS Code 내에서 빠르게 명령어를 실행할 수 있는 터미널(Terminal) 창이 존재합니다.
View-Terminal 혹은 단축키 Ctrl+`로 터미널 창을 엽니다.
- 대부분의 드림핵 강의가 리눅스 환경을 필요로 하기 때문에 앞서 리눅스 VM을 구축했습니다.
- 그런데 VM에서 코딩을 하다 보면 속도가 느리거나 불편한 경우가 있습니다.
- 이번 강의에는 편리한 코딩을 위해 VS Code 편집기를 리눅스 VM에서 사용할 수 있도록 연결하겠습니다.
VirtualBox로 리눅스 VM을 구축한 경우 다음과 같이 연결합니다.
리눅스 VM에서 VS Code 편집기를 사용한다는 것은 호스트 머신에서 리눅스에 원격으로 접속한 상태로 VS Code를 사용한다는 것과 같습니다.
원격 접속을 하기 위해서는 ssh를 이용합니다.
먼저 리눅스 VM의 터미널에 아래 명령어를 입력하여 업데이트를 진행하고, ssh 서버를 설치합니다.
sudo apt update
sudo apt upgrade
sudo apt-get install openssh-server
※ VirtualBox로 우분투 22.04.5 lts 실행 시 해상도가 자꾸 깨져서
vmware로 다시 설치 후 진행 ※
:우분투 22.04 마우스 우클릭 > Setting 클릭 > Network Adapter > Custom에서 NAT 선택
: Edit 클릭 > Virtual Network Editor 클릭 > NAT 선택 후, Change Setting 클릭
: NAT 선택 후, NAT Settings 클릭
NAT Settings에서 Add 버튼 클릭 후, 두 번째 사진과 같이 설정하기
이제 VS Code에서 리눅스 ssh 서버로 접속하기 위한 설정을 진행하겠습니다.
VS Code 좌측 Extensions 탭을 열어 ssh를 검색합니다. Remote - SSH extension를 클릭하고 Install 버튼을 눌러 설치합니다. 아래와 같이 Uninstall 버튼이 뜨면 정상적으로 설치가 완료된 것입니다.
이제 Remote - SSH의 기능을 실행할 수 있습니다. 리눅스 ssh 서버로의 연결을 등록하기 위해 Ctrl+Shift+P로 아래와 같이 커맨드 팔레트를 열고, ssh를 검색합니다.
목록에서 Remote-SSH: Open SSH Configuration File…을 클릭한 뒤 기본 config 파일 경로인 ~/.ssh/config를 선택하여 ssh config 파일을 엽니다.
config 파일은 여러 ssh 서버에 간편하게 접속할 수 있도록 호스트, 포트, 키 파일 등의 옵션을 미리 지정해 두는 파일입니다. 기본 config 파일은 ~/.ssh/config 경로에 존재합니다. 만약 config 파일이 없다면 해당 경로에 생성하면 됩니다.
접속할 호스트를 등록하는 기본 구성은 다음과 같습니다.Host [접속할 호스트 이름] HostName [호스트 IP 주소] Port [접속할 포트] User [호스트 사용자 이름] IdentityFile [접속시 사용할 개인 키 파일 경로]
ssh 개인 키(private key) 파일은 ssh-keygen 등을 이용하여 생성할 수 있습니다. 현재 ~/.ssh 경로 아래 개인 키 파일이 존재한다고 가정하며, 키 파일 생성 과정은 자세히 다루지 않겠습니다.
이제 생성한 호스트에 접속하기 위해 커맨드 팔레트에서 Remote-SSH: Connect to Host…를 클릭하고 앞서 작성한 Host 이름을 클릭합니다.
새 윈도우가 열리고 윈도우 상단에 사용자 암호를 입력하는 창이 뜨면 리눅스 사용자의 암호를 입력하고 엔터를 눌러 접속을 완료합니다.
- 아까 config에 본인이 설정한 HostName이 뜰겁니다!
Open Folder를 클릭하고 원하는 디렉토리를 선택한 뒤 암호를 한 번 더 입력합니다. 이제 리눅스 환경에 존재하는 파일들을 VS Code에서 열고 수정할 수 있습니다. 테스트로 Desktop 디렉토리에 a.txt 파일을 생성하고 내용을 작성한 뒤 저장하겠습니다.