전체 글 31

[Dreamhack] command-injection-1

위 화면에 보이는 페이지에서 command injection을 통해 flag를 획득해야 한다. 아래는 웹서버 코드이다. #!/usr/bin/env python3 import subprocess from flask import Flask, request, render_template, redirect from flag import FLAG APP = Flask(__name__) @APP.route('/') def index(): return render_template('index.html') @APP.route('/ping', methods=['GET', 'POST']) def ping(): if request.method == 'POST': host = request.form.get('host') cm..

dreamhack 2024.01.10

[Dreamhack] CSRF-1 / 2

xss 문제에서는 임의의 사용자가 내가 원하는 페이지에 쿠키를 넣어서 보내게 했다면 csrf 문제에서는 임의의 사용자가 로그인한 상태로 내가 원하는 페이지에 특정 요청을 하게 만들면 된다. CSRF-1 4개의 페이지가 있고 /vuln 페이지는 xss 문제와 다르게 'iframe, script, on' 문자열 필터를 걸어 못 쓰게 만들었다. xss-2 에서 script가 막혀서 우회했던 3가지 방법 중 iframe과 svg/onload는 막혔지만 img 태그는 필터링 되지 않았으니 이걸 이용해보자 CSRF 문제는 다른 사용자의 쿠키를 탈취하는 것이 목적이 아닌 다른 사용자가 특정 페이지를 요청하도록 만들어야한다. 여기서 특정 페이지는 /admin/notice_flag 이다. @app.route("/admi..

dreamhack 2024.01.01

[Dreamhack] xss-2

xss-1 문제와 매우 유사하지만 이번에는 /vuln(xss) page에서 {% endblock %} xss-1에서는 "/vuln" 엔드포인트에 대한 GET 요청이 들어왔을 때 "param" 값을 읽어와 해당 값을 그대로 반환한다. xss-2에서는 innerHTML 코드가 있는데 innerHTML을 사용하여 삽입된 HTML 코드 안에 포함된 태그는 실행되지 않는다. 하지만 innerHTML은 html 태그를 읽기 때문에 다양한 html 태그를 활용한 공격이 가능하다. xss cheat sheet로 검색해보니 엄청나게 다양한 xss 공격 방법이 존재했다. 테스트를 해보니 되는 것도 안되는 것도 있었다. 왜 안되는지까지는 알아보는건 나중에.. 하기로 하자 아래는 성공적으로 xss 공격을 수행한 코드 3가지이..

dreamhack 2023.12.31

[Dreamhack] xss-1

서버 생성 후 페이지에 들어가보면 /vuln, /memo, /flag 페이지로 들어갈 수 있다. /vuln(xss) page는 접속하자마자 '1' 이라는 알림창이 뜬다. 접속 url을 보면 파라미터 값에 들어가있는 스크립트가 그대로 실행되는 것을 알 수 있다. /memo 는 'memo'파라미터의 값인 'hello'가 페이지에 출력된다. 파라미터 값을 'test'로 바꿔서 새로고침하면 'hello' 아래에 'test'가 누적되어 적힌다. /flag 는 텍스트를 입력할 수 있는 박스와 제출버튼이 있다. 코드 분석 @app.route("/flag", methods=["GET", "POST"]) def flag(): if request.method == "GET": return render_template("f..

dreamhack 2023.12.31