나는 현재 공업고등학교 3학년으로 9월부터 회사에 취직하여 12월에 퇴사하였다. 고작 3개월밖에 안 다녔지만, 평생 학생신분이었다가 회사원이 된 것은 값진 경험이었다. 나는 호스팅 회사에서 시스템 개발 파트를 담당하고 있었다. 주로 쉘이랑 파이썬으로 개발을 하다가 가끔 코드리뷰를 하고 팀장님께 보고드리는 게 내 주 업무였다. 그런데 매번 보고를 드릴 때마다 리소스 관리와 메모리 누수에 관한 얘기가 항상 있었다. 이 말에 대해 다시 곰곰이 생각해보면 학생과 회사원의 차이와 개발자와 회사에 취직하여 일어난 일인 것을 알 수 있었다. 우선 학생과 회사원은 책임감을 기준으로 나누어진다. 예를 들어 학생 때는 개인 서버를 구매하여 굴릴 수 없으니 VM이라는 가상 머신을 돌려 각종 OS를 빌딩 하여 사용할 수 있다..

Git : 깃은 하나의 버전관리시스템이다. 개발은 수정과 에러 및 업데이트의 반복인데 이에 대한 편의성을 높이고자 사용하는 것이 깃이다. 따라서 깃은 시스템이 변경사항을 추적, 감시하고 기록해서 버전을 쉽게 관리할 수 있게 해주는 역할을 수행한다. Github : 깃허브는 기존 Git을 웹 사이트를 통해 사용할 수 있는 서비스로 더 용이하고 관리가 쉬워진다. 일종의 클라우드 서버 저장소라고 볼 수 있다. 동작원리Working DirectoryGit에서 소스 코드를 작성하고 있는 로컬 저장소이다. ADD를 사용하여 Staging Area에 파일을 추가할 수 있다. Staging AreaGit으로 관리하고 싶은 파일들을 추가하는 공간이다. Commit으로 파일의 변경 사항을 저장하고 변경된 파일은 Loca..

1. ls 2. cat - 3. file - 4. cat ./- 영어를 해석해보면 다음 레벨을 가기 위한 비밀번호가 있는 파일은 -로 불린다. 홈 디렉토리에 있다. 라는 것을 알 수 있다. 먼저 ls를 입력하여 파일의 정보를 알아냈다. 문제 설명과 동일하게 이름이 -인 파일이 있다. -를 cat으로 읽으려하니 읽을 수가 없다. file로도 마찬가지다. 그래서 cat ./-를 입력하니 비밀번호가 나왔다. cat은 파일을 r(읽다)의 명령어이고, ./은 현재 디렉토리를 뜻한다. 따라서 현재 디렉토리에 -를 읽겠다라는 명령어이다.

1. cd 2. cat readme 문제에 들어가니 영어가 나온다. 해석을 해 보면 이 레벨의 목표는 SSH접속을 하는 것이다. 유저네임은 bandit0이고 패스워드는 bandit0이다. 로그인을 하고 level1으로 가자라고 해석해 볼 수 있다. SSH에 접속을 하면 초록색으로 자신의 닉네임이 바뀐 것을 확인할 수 있다. 접속을 했으니 뭐가 있는지 확인해야 한다. cd를 입력하니 readme라는 파일이 보인다. cat readme로 파일을 읽으니 비밀번호가 나온다. 비밀번호는 다음 level1 접속할 때 입력하면 된다.
bandit이란 bandit의 쉘을 SSH로 접속하여 리눅스 명령어를 사용하는 워게임이다. 문제는 총 34문제가 있고 풀면 풀수록 난이도는 올라간다. 중간중간마다 모르는 명령어가 많이 나오기 때문에 문제를 풀기전 리눅스의 기본 명령어를 공부하는 것을 추천한다. 다음은 bandit을 하는 방법이다. SSH 접속 : ssh -p 2220 bandit레벨숫자@bandit.labs.overthewire.org bandit : https://overthewire.org/wargames/bandit/ 문제를 풀기 위해 SSH 접속을 해야한다. 유닉스 계열 OS에 들어 가 위 코드를 입력한다. bandit레벨숫자는 자신이 도전할 레벨을 적으면 된다. -p는 옵션이므로 아무 데나 적으면 된다. 지금까지 bandit의 ..

리눅스란? 리누스 토르발스가 개발한 운영체제이자 오픈 소스의 unix 계열의 OS이다. 오픈 소스이기에 많은 사람들이 코드를 수정, 확인할 수 있고 이로 인해 초기에는 많은 취약점들이 나왔지만 현재에는 매우 탄탄한 OS라고 할 수 있다. 또한 리눅스와 윈도우 같은 운영체제는 컴퓨터라는 하드웨어 위에 설치되는 것이므로 현재 사용중인 노트북 혹은 데스크탑의 OS를 날려야한다. 이러한 번거로운 방법과 여러 단점을 해결해주는 프로그램이 VM(virtual machine)이다. 말 그대로 가상의 머신이기에 컴퓨터에 있는 OS 안에 또 다른 OS를 하나 더 만들어주는 프로그램이라고 생각하면 된다. 우리는 Virtualbox라는 VM을 설치할 것이고 아래와 같은 방법으로 설치하면 된다. 1. virtualbox에 들..

Pwn환경설정을 하는 방법은 두 가지가 있다. 첫 번째는 유지와 관리가 편리하지만 용량과 성능이 무겁다는 VM(Virtual machine)이 있고, 두 번째는 가볍고 효율을 높일 수 있지만 리눅스OS에서만 실행 가능한 SW를 지원하는 Docker가 있다. 1. docker build -t (image 이름:tag) . 2. docker images 3. docker run -it (복붙 한 image ID) zsh 나는 위 두개 중 Docker을 사용할 것이다. 먼저 vscode 확장프로그램에 docker를 설치한다. 자기가 만들 폴더를 만든 후 파일 이름은 Dockerfile로 지정한다. 내 PC에서 자기가 만든 Dockerfile에 들어가 터미널을 연다. 터미널에 첫번째 코드를 입력 후 image가..

1. docker build -t (도커 이미지 이름 지정). 2. docker run -it (image ID) /bin/bash 3. docker ps 4. docker exec -it (컨테이너ID) /bin/bash 문제 파일을 다운로드하면 Dockerfile이 있다. Dockerfile을 터미널로 연다. 터미널에 첫 번째 코드를 입력 후 이미지가 빌드되는 화면이 보인다. 그 후 docker images 로 도커에 활성화된 도커 이미지들을 확인하고 컨테이너를 실행시키기 위해 두 번째 코드를 입력한다. 만들어진 컨테이너를 확인하기 위해 세 번째 코드를 입력한다. 마지막으로 세 번째 코드 실행 결과에 있는 컨테이너ID를 네 번째 코드에 넣어 실행한다. 그리하면 컨테이너에 접속이 되고 ls로 디렉터리의..

문제에 들어가면 별 다른 기능 없이 @이미지1 처럼 memo를 작성할 수 있는 화면이 뜬다. 작성한 메모를 저장하면 @이미지2 처럼 저장한 메모를 확인할 수 있다. 웹 페이지 내에서 딱히 찾을게 없으니 소스코드를 보자 @이미지 3을 보면 Post 요청으로 받은 페이로드를 이용하여 파일을 만들고 저장한다라는 것을 알 수 있다. @이미지 4에는 도트(..)과 슬래시(/)가 필터링 되어있는 것을 알 수 있다. 웹의 동작 방식은 {UPLOAD_DIR}/{filename}으로 파일을 open하여 내용을 보여준다. 이를 통해 name이라는 매개변수를 공격해야한다는 것을 알 수 있다. 저장한 메모를 들어가면 name=(자신이 저장한 메모 이름)이 보이고 = 뒤에 공격을 해야한다. 먼저../flag를 입력하면 exis..

웹 페이지에 들어가면 uid와 upw를 입력할 수 있는 페이지가 나온다. uid와 upw에 아무 값이나 입력했더니 아무런 반응이 없다. 문제 이름이 baby-union이니 sql union을 생각했다. 데이터베이스 버전 ' union select 1,2,3,version()# res : 10.3.39-MariaDB-0+deb10u1 데이터베이스 유저 ' union select 1,2,3,user()# res : dbuser@localhost 데이터베이스 이름 ‘ union select 1,2,3,datebase()# res : secret_db 데이터베이스 테이블 ' union select 1,2,3,table_name from information_schema.tables# res : users, on..