완료됨
(스포주의!!!) 문제는 풀었는데 (스포주의!!!)

(스포 주의!!)

url파라미터에 'file:/%66%6c%61%67.txt' 를 입력해서 flag를 얻긴했는데, request.args.get() 부분에서 디코딩되면서 결국 url변수에 담긴 값은 'flag' 가 되며 if문에 걸려야 했던 거 아닌가요?

초보라서 아직 많이 부족합니다..

#web
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1

FORM을 통해서 GET 요청이 보내질 때 인코딩 작업을 수행하여 "fl%61g"라고 보낸 값이 "fl%2561g"로 변환되게 됩니다.
%25는 '%'을 의미합니다.

"fl%2561g"값이 서버에 도착할 때에는 이 값을 한 번 디코딩해서 "fl%61g"로 변합니다.
서버 입장에서는 '%' 뒤에 붙은 두 숫자만을 가지고 디코딩하기 때문에 "%2561"에서 뒤에 있는 61는 인/디코딩과는 관련이 없는 순수 문자라고 생각합니다.
그렇기 때문에 61는 그대로 남게되고 %25는 '%'가 돼 최종적으로 %61만 남게된 것입니다.

즉, 서버가 받은 값은 "fl%61g"입니다.
그렇기 때문에 필터링에 걸리지 않게 된 것입니다.

2025.07.04. 11:45