ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LOS - 3 (goblin) Write Up
    CTF/Web 2020. 3. 11. 17:39

    Los.3_goblin

     

    select id from prob_goblin where id='guest' and no=

     

     

    우선 필터링 되는 부분을 보면 싱글쿼터와 더블쿼터와 역쿼터를 필터링 중인 것을 확인할 수가 있다.

    id가 'admin'이면 문제는 풀리게 되어 있다.

    where 절을 보면 guest의 no의 번호를 올바르게 입력하면 "Hello guest"가 나올 것으로 보인다.

    한번 guest에 맞는 no을 찾아보자.

     

    사실 찾을 필요는 없다.

    그저 이 문구가 나오지 않게 하는 것이 중요하다.

    우리는 이제 where id='guest' and no= 절이 거짓이 되도록 만든 후 or 연산을 시작 할 것이다.

    우리는 사전에 필터링 문에서 쿼터들이 다 먹혀있는 것을 확인했다.

    하지만 no 컬럼은 int형 컬럼이다.

    그 점을 우리가 잘 이용한다면 사실 쿼터들은 사용하지 않아도 상관이 없다.

     

     

     

    숫자를 터무니 없는 것을 넣지 않으셨을거라고 생각하고 2를 집어 넣어봤는데 amdin이 걸렸다.

    그렇다면 혹자는 의문점을 갖을 것이다.

    2가 아니였으면 어떻게 풀었을 것인가.

    우리에게는 등호 말고도 부등호가 존재한다는 것을 기억해야 한다.

    여기서 조심해야할 것은 no=1은 guest라는 것이다.

    무턱대고 no>0라고 한다면 guest가 걸리고 말 것이다.

    (admin이 0 이하의 숫자가 아니라는 가정하에)

    사실 이 guest조차도 숫자를 몰라도 풀 수가 있다.

    해보면 되는 것이다.

     

     

    이렇게 한걸음 한걸음 밟아 가면 되는 것이다.

    no>0을 했는데 guest가 걸렸다.

     

    guest의 no가 admin보다 작다는 것을 알 수가 있다.

    그렇다면 이럴땐 이분법을 이용해서 업다운 게임을 하듯이 예측을 해야할 것이다.

    하지만 재수없게도 guest는 1, amdin은 2임으로 꽤 많은 시간이 걸려야 알 수 있는 방법일것이다.

    다양한 방법이 존재한다는 것만 기억하고 가자.

     

     

    guest의 no은 알려주고 풀게해주세요..ㅠㅠ

    댓글

Designed by Tistory.