본문 바로가기

전체 글

(113)
[드림핵 워게임] session 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 페이지의 기능을 확인한다. 페이지에 접속했을 때 처음 뜨는 화면이다. 상단 메뉴바에서 Login을 클릭하면 로그인 폼이 뜬다. users = { 'guest': 'guest', 'user': 'user1234', 'admin': FLAG } 코드를 살펴보면 이미 등록되어 있는 계정이 3개 있는 것을 볼 수 있다. guest 계정으로 로그인해본다. Hello guest, you are not admin이라는 문구가 뜬다. user 계정으로도 로그인해본다. Hello user, you are not admin이라는 문구가 뜬다. admin 계정으로는 로그인을 할 수가 없다. 패스워드가 코드에 드러나있지 않기 때문이다. 2. 코드를 분석한다. if __nam..
[드림핵 워게임] simple-ssti 위의 문제를 다음과 같은 방법으로 풀어보았다. • SSTI 취약점이란? SSTI는 Server Side Template Injection의 약자로, 템플릿에 공격자의 공격코드를 실어보내 서버 측에서 template injection 이 일어나게 하는 공격을 할 수 있는 취약점이다. 1. 페이지의 기능을 확인한다. 페이지에 방문하면 처음으로 뜨는 화면이다. My Pages 목록에서 404Error 를 클릭하면 에러화면이 출력된다. My Pages 목록에서 robots.txt를 클릭하면 robots.txt 문구가 출력된다. url을 확인해보면 host 뒤에 붙은 robots.txt가 출력된 값과 일치하는 것을 볼 수 있다. url에 test123입력해보니 출력값이 test123으로 나온다. 이것으로 url이..
[드림핵 워게임] php-1 위의 문제를 다음과 같은 과정으로 풀어보았다. 문제에 있는 LFI 취약점은 Local File Inclusion의 약자로, 외부에 있는 txt, php 등의 파일을 내부의 php 파일처럼 사용할 수 있는 취약점이다. 서버 내부의 파일을 가져오는 정보 유출에 많이 이용된다. 1. 페이지의 기능을 확인한다. 드림핵에서 사이트에 접속하면 처음으로 뜨는 페이지이다. 상단 메뉴에서 List에 접속해보면 flag.php와 hello.json이 있다. hello.json을 클릭하면 View 페이지로 이동하며 데이터가 출력된다. 주소를 확인해보면 url에서 파일 경로를 전달하는 것을 볼 수 있다. flag.php로 클릭해보면 이 또한 View 페이지로 이동하며 url로 파일 경로를 전달하고 있지만, flag.php 내..
[드림핵 워게임] proxy-1 위의 문제를 다음과 같은 방법으로 풀어보았다. 1. 페이지를 확인한다. 페이지에 방문하면 뜨는 첫 화면이다. Raw Socket Sender (Done) 을 클릭해보았다. host, port, Data를 입력할 수 있는 폼이 뜬다. host, port, Data에 아무 값이나 넣어서 Send해보았다. timed out 에러가 뜬다. 2. 코드를 확인한다. @app.route('/admin', methods=['POST']) def admin(): if request.remote_addr != '127.0.0.1': return 'Only localhost' if request.headers.get('User-Agent') != 'Admin Browser': return 'Only Admin Browser..
[드림핵 워게임] blind-command 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 페이지에 방문해본다. ?cmd=[cmd] 라는 텍스트만 보인다. cmd에 어떤 값을 넣어 공격을 시도해볼 수 있지 않을까 라는 생각을 해본다. 2. 코드를 살펴본다. @app.route('/' , methods=['GET']) def index(): cmd = request.args.get('cmd', '') if not cmd: return "?cmd=[cmd]" if request.method == 'GET': '' else: os.system(cmd) return cmd request 아규먼트에 cmd가 없으면 ?cmd=[cmd] 라는 텍스트를 return 한다. 1에서 페이지에 방문했을 때 ?cmd=[cmd] 텍스트만 뜬 이유가 request 아..
[드림핵 워게임] web-ssrf 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 엔드포인트 확인 @app.route("/img_viewer", methods=["GET", "POST"]) def img_viewer(): if request.method == "GET": return render_template("img_viewer.html") elif request.method == "POST": url = request.form.get("url", "") urlp = urlparse(url) if url[0] == "/": url = "http://localhost:8000" + url elif ("localhost" in urlp.netloc) or ("127.0.0.1" in urlp.netloc): data = open("e..
[드림핵 워게임] file-download-1 위의 문제를 아래와 같은 과정으로 풀어보았다. 1. 사이트의 기능을 확인한다. Upload My Memo 페이지로 들어가면 파일을 업로드할 수 있는 기능이 있는 것을 확인할 수 있다. 테스트 삼아 Filename과 Content에 아무 내용이나 적어 Upload해본다. 파일 업로드 후 Home 페이지에 들어가보면 내가 작성한 파일이 업로드되어 있는 것을 확인할 수 있다. 파일을 클릭해보면 내용을 읽을 수 있다. 2. 다양한 접근방법으로 취약점을 공략해본다. 우선 동적 리소스를 그대로 읽어내는지 확인하기 위해 javascript 코드를 입력한 scirpt.html 파일을 작성해서 업로드해본다. javascript 코드는 위와 같이 간단하게 작성해보았다. Home 페이지에서 script.html을 클릭하여 ..
[드림핵 워게임] image-storage 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 페이지를 확인한다. 문제의 사이트에 들어가보면 위와 같이 메뉴바에 3개의 페이지가 있는 것을 확인할 수 있다. 문제에서 다운로드한 파일들을 확인해보면 마찬가지로 3개의 파일이 각각의 페이지를 구성하고 있는 것을 볼 수 있다. 각각 index.php 페이지는 Home페이지를, list.php는 List 페이지를, upload.php는 Upload 페이지를 작성한 코드이다. 3개의 파일 중 upload.php가 문제를 푸는 데 가장 중요한 파일인 것을 짐작할 수 있다. 2. upload.php 코드를 살펴본다. upload.php에서 php코드 부분에 해당하는 1~26행을 살펴본다. 업로드할 파일을 POST 요청으로 받아 같은 이름의 파일이 이미 디렉토리에..