본문 바로가기

전체 글

(210)
CSRF/CORS Bypass CSRF는 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이다. CSRF 취약점을 방어하기 위해 CSRF Token을 사용한다. 웹 서버는 전송된 Token을 이용해 이용자로부터 요청이 온 것인지 확인할 수 있다.
드림핵 CSP Bypass Advanced 롸업 @app.route("/vuln") def vuln(): param = request.args.get("param", "") return render_template("vuln.html", param=param, nonce=nonce) flag, memo 등의 페이지는 이전 문제와 동일하지만 vuln 페이지에서 return param으로 그대로 실행하던 것이 render_template으로 바뀌었다. @app.after_request def add_header(response): global nonce response.headers['Content-Security-Policy'] = f"default-src 'self'; img-src https://dreamhack.io; style-src 'self'..
드림핵 CSP Bypass 롸업 http://host3.dreamhack.games:12324/vuln?param=%3Cscript%20src=%22/vuln?param=alert(document.cookie)%22%3E%3C/script%3E @app.route("/vuln") def vuln(): param = request.args.get("param", "") return param @app.route("/flag", methods=["GET", "POST"]) def flag(): if request.method == "GET": return render_template("flag.html", nonce=nonce) elif request.method == "POST": param = request.form.get("param..
Content Security Policy & CSP Bypass CSP는 xss나 데이터를 삽입하는 공격이 발생했을 때 피해를 줄이고 공격 시도를 보고 받을 수 있게 하기 위해 새롭게 추가된 보안계층이다. CSP는 웹 페이지에 사용될 수 있는 자원의 위치, 출처에 제약을 걸 수 있다. Content-Security-Policy: default-src 'self' https://example.dreamhack.io HTTP 헤더를 이용한 CSP 헤더 정의 방법이다. 비슷하게 meta 태그로도 정의할 수 있다. CSP는 scipt 태그 내에 코드를 삽입하는 것 포함, 이벤트 핸들러 속성, URL 스킴 등을 인라인 코드로 간주하고 허용하지 않는다. 또한, eval, setTimeout 등 문자열로부터 코드를 실행하는 함수의 실행을 유해하다고 간주해 차단한다. Policy-..
드림핵 XSS Filtering Bypass Advanced 롸업 Exercise: XSS Filtering Bypass의 패치된 문제입니다. def check_xss(param, cookie={"name": "name", "value": "value"}): url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}" return read_url(url, cookie) 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"..
드림핵 XSS Filtering Bypass 롸업 Exercise: XSS Filtering Bypass에서 실습하는 문제입니다. def check_xss(param, cookie={"name": "name", "value": "value"}): url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}" return read_url(url, cookie) 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 = reques..
XSS Filtering Bypass 태그 이외에도 자바스크립트 코드를 실행할 수 있는 HTML 태그가 많이 존재한다. 대표적으로 on으로 시작하는 이벤트 핸들러 속성들이 있다. 1. onload 태그가 요청하는 데이터를 로그한 후에 실행된다. 로드에 실패하면 실행되지 않는다. 이런 식으로 작성된다. 2. onerror 태그가 요청하는 데이터를 로드하는데 실패할 때 실행된다. 로드에 성공하면 실행되지 않는다. 이렇게 작성된다. 3. onfocus input 태그에 커서를 클릭하여 포커스가 되면 실행된다. 이렇게 실행된다. XSS 필터링을 할 때 문자열을 치환하는 방식으로 필터링하는 경우에는 키워드를 조작해서 필터링을 우회할 수 있다. 예를 들어, script라는 문자열을 ""로 치환해서 필터링하는 경우, scrscriptipt 이런식으로 작..
DVWA Open HTTP Redirect(medium) 롸업 창은 low 레벨과 같다. Unknown redirect target. Missing redirect target. 구성 코드이다. target이 빈 문자열이 아닐 때 location으로 링크를 이동시키는데 redirect할 때 case1, 2, 99에 해당해야 target이 정해진다. target을 원하는 대로 바꿀 수도 없고 정해진 링크로만 이동시킨다. 이 파일은 medium.php의 파일 내용이다. 그러니 링크를 low.php의 redirect로 변조하면 필터링 없이 location이 실행되던 low.php 파일의 코드를 이용할 수 있다. http://127.0.0.1/DVWA/vulnerabilities/open_redirect/source/low.php?redirect=https://bluesu..