Dreamhack Wargame(63)
-
rev-basic-2 풀이
우선 IDA로 파일을 열어서 main() 함수에서 쓰이는 함수를 세 가지 가져왔습니다. main() 함수에서 if문을 보면 sub_140001000()의 반환 값에 따라서 correct인지 wrong인지 판별이 됩니다. 그러므로 sub_140001000() 함수를 분석해보겠습니다. for문을 돌리면서 aC의 인덱스와 비교를 합니다. aC가 문자열인지 배열인지는 모르겠지만, 우선 구성을 알기 위해 aC 함수를 보도록 하겠습니다. 문자들이 쭉 나열되어있는 걸 볼 수 있습니다. 여기에 나오는 문자들을 하나씩 이어 붙여보면 FLAG가 나올 것 같습니다. (FLAG 획득 완료?) 간단한 문제였습니다. 목표는 rev-basic 시리즈 올솔!
2021.10.28 -
devtools-sources 풀이
뭔가 여러 가지 파일들이 있습니다. 문제 정보를 보면 개발자 도구의 Sources 탭 기능을 활용하라 했으니, 이 파일들을 Sources에서 열겠습니다. 그리고 하나하나 파일을 열어가며 Ctrl+F를 누르고 FLAG 형식인 DH{ 를 검색해보겠습니다. main.4c6e144e.map라는 파일에서 FLAG를 찾았습니다. 예전에 풀었던 cookie 문제보다 더 간단한 것 같습니다.
2021.09.05 -
php-1 풀이
view.php를 보면 flag를 필터링해주고 있는 걸 볼 수 있습니다. 이 필터링을 우회해야하는데, 이 부분은 php wrapper 취약점을 써서 해결해보겠습니다. http://host1.dreamhack.games:10099/?page=php://filter/convert.base64-encode/resource=/var/www/uploads/flag 쿼리에 이렇게 입력을 넣고 엔터를 누르면 아래와 같이 화면이 바뀌게 됩니다. 이제 여기에 나온 값을 Base64로 디코딩하면 FLAG가 나올 것입니다.
2021.09.05 -
web-ssrf 풀이
/img_viewer 페이지에 들어가 보겠습니다. 기본값으로 /static/dream.png라는 url이 들어있습니다. View를 눌러서 무슨 파일인지 확인해보겠습니다. 그냥 드림핵 로고 그림의 png 파일이었습니다. 소스코드에서 elif 부분을 보면 POST 형식으로 보내야 한다는 걸 알 수 있습니다. 이제 어떻게 flag.txt를 찾아야 할지 생각해봐야 하는데, 여기서 local_host 변수를 보면 host는 127.0.0.1로 고정입니다. 하지만 local_port 변수는 1500~1800 사이 범위에서 랜덤으로 주어집니다. 그렇기에 이 port를 중심으로 Brute force를 돌려서 문제를 해결하면 될 것 같습니다. 또한, 코드에서 elif 안에 있는 elif를 보면 127.0.0.1을 필터링..
2021.08.25 -
blind-command 풀이
소스코드에서 두 번째 if를 보면 request의 method가 GET이 아니여야 os.system() 함수가 실행됩니다. 항상 GET, POST만 써서 생각나는 메소드가 POST 밖에 없는데 if문을 저렇게 작성을 해놓은걸 보면, POST 메소드가 아닌 다른 형식의 메소드가 있는 것 같습니다. https://developer.mozilla.org/ko/docs/Web/HTTP/Methods/HEAD HEAD - HTTP | MDN HTTP HEAD 메서드는 특정 리소스를 GET 메서드로 요청했을 때 돌아올 헤더를 요청합니다. developer.mozilla.org HEAD 메소드를 사용해서 문제를 풀어보겠습니다. 이번 문제는 웹페이지가 저렇게 되어있는 관계로 버프 스위트를 사용해서 풀어야 할 것 같습니..
2021.08.18 -
csrf-2 풀이
#!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" users = { 'guest': 'guest', 'admin': FLAG } session_storage = {} def read_url(url, cookie={"name": "name", "value":..
2021.08.17