반응형
문제분석 & 풀이
1. id 파라미터를 이용해 값을 전송받으면 id 파라미터에 "admin"이 들어가면 hack으로 간주한다.
2. id 값을 url 디코딩하여 id 변수에 저장한다.
3. id 값이 "admin"이면 클리어
"admin" 은 정규표현식 필터링에 걸리기 때문에 "admin"을 url 인코딩해서 보내도 필터링에 걸린다.
원래 url 인코딩이 된 값도 서버에서는 알아서 해석하기 때문에 자동으로 디코딩이 된다.
이 점을 이용하면, "admin"을 2번 url 인코딩해서 서버로 전송하면 자동으로 디코딩 한번되고 이후 3번 줄에서 한번 더 디코딩을 해서 총 2번의 디코딩을 거쳐 id값이 "admin"이 될 수 있다.
정규표현식에 의한 필터링 검사를 2번째 디코딩 수행 전에 하기 때문에, id가 "admin"이 아닌 인코딩된 문자인 상태로 if 검증을 수행하고 따라서 필터링에 걸리지 않는다.
admin → %61%64%6D%69%6E → %2561%2564%256D%2569%256E
(평문 → 인코딩 1번 → 인코딩 2번)
인코딩 2번한 "admin"을 id 파라미터로 전송해보자.
반응형