본문 바로가기

드림핵

(68)
[드림핵 워게임] 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 요청으로 받아 같은 이름의 파일이 이미 디렉토리에..
[드림핵 워게임] Mango (조건 추가) 위의 문제를 앞서 풀어보았는데, 이전에 풀었던 링크는 아래와 같다. https://studyforall.tistory.com/14 [드림핵 워게임] Mango 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 코드 분석 첫 페이지에 접속해보면 위와 같은 페이지가 출력된다. 이 결과는 아래의 코드가 실행되어 나온 결과이다. app.get('/', function(req, res) { studyforall.tistory.com 같은 문제를 - f스트링 쓰지 않기 - flag가 32자리라는 사실을 모른다고 가정하기 라는 두 조건을 추가하여 다시 풀어보았다. import requests, string HOST = "http://host3.dreamhack.games:*****/" GET_FLAG = strin..
[드림핵 워게임] Carve Party 위의 문제를 다음과 같은 과정으로 풀어보았다. 1. 기능 확인하기 문제에서 다운로드한 파일을 열어보면 위와 같은 화면이 뜨는데, 호박을 한 번 클릭하면 아래의 문구가 10000 more clicks to go! 에서 9999 more clicks to go!로 바뀌는 것을 확인할 수 있다. 호박을 9999번 더 클릭하면 플래그를 얻을 수 있지만 코드상의 취약점을 찾아내어 더 빠르게 플래그를 얻을 수 있는 방법을 택하였다. 2. 코드에서 취약점 찾아내기 개발자 도구(F12)를 열어 Elements 탭에서 html 소스를 확인해보면, 호박이 id="jack-target"으로 지정되어있는 것을 볼 수 있다. Sources 탭에서 확인해보면 jact-target 객체를 클릭했을 때 클릭한 횟수를 세어 count..