2025/04/18 7

level 2 Relative Path Overwrite

엔드포인트 분석index.php사용자에게 page라는 파라미터를 입력 받고, page 파라미터가 존재하면 page.php 반환하고 아니라면 main.php 반환함. 그리고 .., : /를 필터링한다. /vuln.phpfilter.js라는 값을 상대경로로 받아온다. 그리고 사용자가 param에 입려한 값을 추출하여 화면에 표시한다. 하지만 만약 filter.js에 저장되어 있는 키워드를 입력한다면 필터링함. 익스플로잇기존 urlhttp://host3.dreamhack.games:13981/?page=vuln&param=script 위와 같이 vuln에서 param을 입력 받으면 키워드들을 필터링한다. 하지만 우리는 필터링을 우회하여 flag를 획득해야한다.그러기 위해선 Url을http://host3.dr..

CTF & Wargame(WEB) 2025.04.18

level 3 CSS Injection

코드 분석token_generate() 함수def token_generate(): while True: token = "".join(random.choice(string.ascii_lowercase) for _ in range(8)) token_exists = execute( "SELECT * FROM users WHERE token = :token;", {"token": token} ) if not token_exists: return token랜덤으로 소문자 아스키값을 8개 생성하고 token 변수에 저장users 테이블에 해당 토큰이 이미 존재하는지 확인한다. 만약 해당 토큰이 존재하지 않으면 해당 토큰을..

CTF & Wargame(WEB) 2025.04.18

level 2 Client Side Template Injection

문제를 살펴보면 이전의 문제들과 마찬가지로 /vuln, /memo, /flag 페이지가 존재한다. 엔드포인트 분석add_header() 함수@app.after_requestdef 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() r..

CTF & Wargame(WEB) 2025.04.18

level 1 CSRF Advanced

웹 서비스 분석/login : 특정 계정으로 로그인을 할 수 있는 페이지/change_password : 현재 로그인 되어 있는 계정의 비밀번호를 바꿀수 있는 페이지/vuln : 사용자가 입력한 값을 그대로 출력해주는 페이지/flag : param에 입력한 url로 사용자가 이동 엔드 포인트 분석/loginusers = { 'guest': 'guest', 'admin': FLAG}session_storage = {}token_storage = {}@app.route('/login', methods=['GET', 'POST'])def login(): if request.method == 'GET': return render_template('login.html') elif..

CTF & Wargame(WEB) 2025.04.18

level 3 CSP Bypass Advanced

이 문제도 이전에 풀었던 xss, csp bypass 문제와 유사하지만 add_header 함수가 조금 다르다. add_header() 함수 분석@app.after_requestdef 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 'self' 'nonce-{nonce}'; object-src 'none'" nonce = os.urandom(16).hex() return response response.headers[..

CTF & Wargame(WEB) 2025.04.18

level 2 CSP Bypass

이번 문제도 저번에 풀었던 xss 문제들과 구조는 거의 유사하다. 하지만 다른점이 있다면 xss 필터링 대신 CSP 기법이 적용되었다는 것이다.add_header() 함수 분석@app.after_requestdef 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 'self' 'nonce-{nonce}'" nonce = os.urandom(16).hex() return response 해당 함수에 ..

CTF & Wargame(WEB) 2025.04.18

XSS Filtering Bypass Advanced level 3

문제는 이전에 풀었던 xss 문제들과 구조는 거의 유사하다. 하지만 달라진 점이 있다면 필터링을 하는 키워드가 더 많아졌다는 것이다. xss_filter() 함수 분석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(): ..

CTF & Wargame(WEB) 2025.04.18