전체 글 82

RPO(Relative Path Overwrite) 이해하기

level 2 Relative Path Overwrite 문제에서 http://host/?page=vuln&param=on이라고 입력했을 때는 filter.js가 정상적으로 로드되어 필터링이 되고 http://host/index.php/?page=vuln&param=on이라고 입력했을 때는 filter.js가 정상적으로 로드되지 않아 필터링도 적용되지 않는 이유는이 코드에서 filter.js를 상대 경로인 /filter.js 로 로드하고 있기 때문이다. 위에서 말한 내용을 이를 기반으로 다시 설명하면http://host/?page=vuln&param=on은 현재 문서가 /(루트)라고 보고 filter.js를 요청하기 때문에 정상적으로 로드가 된다.하지만http://host/index.php/?page=..

CTF & Wargame(WEB) 2025.04.21

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