본문 바로가기

Wargame(hacking)

(112)
Lab : DOM XSS via client-side prototype pollution Write Up 먼저, Prototype pollution 근원지를 수동으로 탐색해 본다. 이는 많은 시도와 에러들이 동반된다. 즉 Object.prototype 이 작동하는 근원지를 찾을 때까지 임의의 속성을 추가하는 다양한 방법을 시도해야 한다.  → 쿼리 스트링, URL fragment, JSON input을 통해 임의 속성 주입을 시도해 본다.  해당 Lab에서는 쿼리 스트링을 사용해 속성 주입을 시도하였고, 성공적으로 prototype pollution 이 발생하였다.   만약, 속성이 Prototype에 추가되지 않은 경우 대괄호 표기 대신 점 표기 방식으로 전환하거나 그 반대로 전환하는 등 다양한 기술을 사용해봐야 한다. ( 해당 Lab에서는 . 표기 법으로는 prototype polluti..
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..
LORD OF SQLINJECTION : red_dragon Write-Up
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 )의 이름과 함께 전..