티스토리 뷰

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

27단계 소스코드이다.

이번 문제는 id와 pw를 둘 다 입력받으며 각각 싱글 쿼터, 역 슬래쉬, prob, _,. 이 필터링되어있다.

그리고 admin의 pw값을 입력해주면 문제는 해결된다.

이번 문제에서 유심히 봐야 할 점은 싱글 쿼터와 역 슬래쉬는 쿼리가 실행된 후에 필터링이 된다는 것이다.

시간 기반 문제이다.

바로 풀어보겠다.

pw의 길이를 알아낸다.

쿼리 :? id=\&pw=||if(id='admin'and(length(pw)>1), sleep(3),2)--+-

          ㄴid에\를 넣어 싱글 쿼터 우회를 시켜주고 pw파라미터에 admin의 비밀번호 길이가 1보다 크면 3초 동안 재우               고 거짓이면 아무 값이나 넣어 준다.

시도해본 결과 비밀번호는 8자리였다.

바로 인젝터를 돌려준다.

결과가 나왔다.

d948 b8 a 0

 문제 해결!

시행착오

1. 항상 하는 실수지만 문제를 제대로 읽지 않아 해결에 난항을 많이 겪는다. 이번에는 필터링 과정이 쿼리문이 실행된 후 진행되는 걸 놓쳐 싱글 쿼터, 역 슬래쉬 우회 문제인 줄 알았다.

2. 시간 기반은 100퍼센트 정확하지 않기에 제대로 확인을 해줘야 한다.(인젝터에서 볼 수 있다시피 단순히 웹페이지 로드 시간을 계산하기에 타 요인에 의해 응답 시간이 느려졌을 경우 또한 계산되어 잘 확인해야 한다.) 

댓글