2025/04 42

[dreamhack] Beginner file-download-1

웹 서비스 분석사용자가 글을 입력하여 업로드 하면 인덱스 페이지에 리스트 되고, 업로드된 글들을 열람할 수 있다. 엔드포인트 분석/upload@APP.route('/upload', methods=['GET', 'POST'])def upload_memo(): if request.method == 'POST': filename = request.form.get('filename') content = request.form.get('content').encode('utf-8') if filename.find('..') != -1: return render_template('upload_result.html', data='bad characters,..

CTF & Wargame(WEB) 2025.04.14

[dreamhack] level 1 image-storage

웹서비스 분석해당 웹서비스는 이용자가 임의의 파일을 올릴 수 있는 기능을 구현해두었다. 그리고 이용자가 파일을 업로드하면 List 탭에 이용자가 올린 파일이 업로드 되고, 해당 파일을 열람할 수 있다. 엔드포인트 분석/list $value) { echo "".$value.""; } ?>해당 코드는 이용자가 올린 파일을 열람할 수 있도록 구현한 코드이다. 하지만 파일들을 보여줄때 '..', '.', 'index.html 파일은 제외한다. /upload 0 ) { echo "Error: " . $error . ""; }else { if (file_exists($directory . $name)) { echo $name ..

CTF & Wargame(WEB) 2025.04.14

[dreamhack] level 1 simple_sqli (blind_sqli 활용)

BSSQLiblind sql injection은 여러번의 질의를 통해 정답을 찾아내는 것이다. 따라서 데이터의 구조를 파악하고 파이썬 스크립트로 자동화하여 비밀번호를 찾아낸다. 로그인 요청의 폼 구조 파악개발자 도구에서 network 탭을 클릭하고 preserve log를 체크하면 login 탭으로 로그인할때 전송하는 POST 데이터의 구조를 확인할수 있다. 확인을 위해 guest, guest로 로그인을 해보면위와 같이 userid, userpassword로 전송되는 것을 확인할 수 있다. BSQLi를 이용한 비밀번호 추출#!/usr/bin/python3import requestsimport sysfrom urllib.parse import urljoinclass Solver: """Solver f..

CTF & Wargame(WEB) 2025.04.14

[dreamhack] level 1 csrf-2

해당 문제의 목표는 관리자 계정으로 로그인하는 것이다. 문제 분석users = { 'guest': 'guest', 'admin': FLAG}위와 같은 코드가 있기에 id : guest, pw : guest로 로그인 해보니, index 페이지에 Hello guest, you are not an admin 라는 문구가 출력되었다./vuln사용자가 param에 입력한 값을 페이지에 출력해준다./flagparam에 입력한 url로 이동/loginid와pw를 입력하여 로그인 할 수 있는 기능/change_password사용자의 비밀번호를 바꿀수 있는 기능엔드포인트 분석/vuln@app.route("/vuln")def vuln(): param = request.args.get("param", "")..

CTF & Wargame(WEB) 2025.04.13

[dreamhack] level 1 csrf-1

엔드포인트 분석/vuln@app.route("/vuln")def vuln(): param = request.args.get("param", "").lower() xss_filter = ["frame", "script", "on"] for _ in xss_filter: param = param.replace(_, "*") return param유저가 입력한 param 값을 소문자로 바꿔서 param 변수에 저자함. frame, script, on을 필터링하고 해당 키워드들을 *로 변환함. /memo@app.route("/memo")def memo(): global memo_text text = request.args.get("memo", None) if t..

CTF & Wargame(WEB) 2025.04.13