CTF & Wargame(WEB) 40

[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

[dreamhack] level 1 xss-2

/vuln사용자가 입력한 값을 출력한다/memo사용자가 memo에 입력한 값을 출력한다./flag사용자가 param에 입력한 Url로 이동한다. 엔드포인트 분석/vuln@app.route("/vuln")def vuln(): return render_template("vuln.html")xss-1과는 다르게 /vuln 페이지에서는 render_template 함수를 사용하여 vuln.html을 띄워준다. render_template 함수는 전달된 템플릿 변수를 HTML 엔티티로 변환하여 전달하기 때문에 xss가 발생하지 않는다. /memo@app.route("/memo")def memo(): global memo_text text = request.args.get("memo", "") ..

CTF & Wargame(WEB) 2025.04.12

[dreamhack] level 1 xss-1

/vuln사용자가 입력한 파라미터대로 출력해준다./memomemo= 에 입력한 값을 그대로 출력해준다./flag전달된 url에 사용자가 접속하도록 한다. /vuln@app.route("/vuln")def vuln(): param = request.args.get("param", "") return paramget 방식으로 param을 이용자에게 입력받고 param의 값을 출력한다. /memo@app.route("/memo")def memo(): global memo_text text = request.args.get("memo", "") memo_text += text + "\n" return render_template("memo.html", memo=memo_text)..

CTF & Wargame(WEB) 2025.04.12