완료됨
(스포주의!!!) 문제는 풀었는데 (스포주의!!!)
(스포 주의!!)
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"입니다.
그렇기 때문에 필터링에 걸리지 않게 된 것입니다.