본문 바로가기

Wargame(hacking)/Dreamhack

(17)
Dreamhack : CSRF Advanced Write-Up @app.route('/login', methods=['GET', 'POST'])def login(): if request.method == 'GET': return render_template('login.html') elif request.method == 'POST': username = request.form.get('username') password = request.form.get('password') try: pw = users[username] except: return '' if pw == password: resp = make..
Dreamhack : csrf-2 Write-Up @app.route("/flag", methods=["GET", "POST"])# flag 페이지 라우팅 (GET, POST 요청을 모두 받음)def flag(): if request.method == "GET": return render_template("flag.html") elif request.method == "POST": param = request.form.get("param", "") session_id = os.urandom(16).hex() # 무작위 세션 ID 생성 후 16진수 문자열로 변환 session_storage[session_id] = 'admin' # 세션 ID를 키로 사용..
Dreamhack : csrf-1 Write-Up @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@app.route("/admin/notice_flag")def admin_notice_flag(): global memo_text if request.remote_addr != "127.0.0.1": return "Access Denied" if request.args.get("userid", "") != "a..
Dreamhack : XSS Filtering Bypass Advanced Write-Up def xss_filter(text): _filter = ["script", "on", "javascript"] for f in _filter: if f in text.lower(): return "filtered!!!" advanced_filter = ["window", "self", "this", "document", "location", "(", ")", "&#"] for f in advanced_filter: if f in text.lower(): return "filtered!!!" return text filtering 조건들이 이전에 비해 많이 추가되었고, filtering하는 패턴과 일치 시, 곧바로, "filtered!!!" 메시지를 반환한다. iframe 과 javasc..
Dreamhack : XSS Filtering Bypass Write-Up def xss_filter(text): _filter = ["script", "on", "javascript:"] for f in _filter: if f in text.lower(): text = text.replace(f, "") return text @app.route("/vuln") def vuln(): param = request.args.get("param", "") param = xss_filter(param) return param 해당 Challenge의 주요 부분은 위와 같다. vuln 페이지에서 param에 대한 인자 값을 xss_filter 함수로 필터링한다. xss_filter 함수는 ["script", "on", "javascript:"] 를 필터링 한다. 위와 ..
Dreamhack : xss-2 Write-Up [[ xss-1 문제 ]] @app.route("/vuln") def vuln(): param = request.args.get("param", "") return param [[ xss-2 문제 ]] @app.route("/vuln") def vuln(): return render_template("vuln.html") XSS-2 가 XSS-1 문제와 달라진 부분은 위의 /vuln 엔드 포인트에 render_template 함수를 통해 페이지를 랜더링 하고 있다는 것이다. ( render_template 함수는 Flask 웹 프레임워크에서 제공하는 함수로, Jinja2 템플릿 엔진을 사용하여 HTML 템플릿 파일을 렌더링한다. 주어진 템플릿 파일( vuln.html )의 이름과 함께 전..
Dreamhack : xss-1 Write-Up def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0.1"}) driver.add_cookie(cookie) driver.get(url) read_url 함수의 주요 부분이다. cookie.update({"domain": "127.0.0.1"}) 를 통해 쿠키가 유효한 범위(도메인)가 127.0.0.1 이란 것을 알 수 있다. 여기서 127.0.0.1 은 Target 서버의 local ip이다. @app.route("/flag", methods=["GET", "POST"]) def flag(): if request.method == "GET": return render_t..
Level 2 : web-ssrf @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("error.png", "rb").read() img = base64.b..