ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • |Lord of SQL_injection| #28 Frankenstein
    Wargame Site/SQL injection 2019. 3. 5. 12:32


    이것 까지 해결하면 4 문제만 풀면 끝난다!!




    가보자~






    학창시절 별명이 프랑켄슈타인이었는데....




    우선 if(mysql_error()) 를 보니 Error 기반의 SQL Injection 인 것 같다.



    하지만 우선, select 1 union select 2 를 사용할 수 없다.


    따라서 다른 에러를 발생하는 구문을 떠올려야한다.



    우선 조건을 사용해야하지만 '( ' 가 필터링 되어있으므로 if 를 사용할 수 없다.


    이럴 때 생각나는 한가지 !!!



    21번 문제 Iron_golem 에서 다뤘던 Case when then else end 문을 떠올려보자





    그럼 then ?? else ?? 자리에 어떤 것을 넣어야할까?




    도저히 구문을 못찾겠다..... 그래서 구글링을 해봤다 ㅎㅎ


    결.과. MySQL 에선 9e307을 초과하는 수를 받을 경우 에러를 발생시킨다는 점을 Catch 했다.








    모든 준비는 끝났다




    이를 이용해서 query 를 작성했다.











    ?pw=' or case when id='admin' and [ pw 조건 ] then 9e308 else 0 end%23











    하.지.





    단일쿼리를 날렸을 때는 반응을 했지만, 패스워드를 찾는 과정에서는 반응하지 않는것이다!!


    html 에서 인자를 통해 넘겨줬을 땐 error 라고 나왔던 구문이 스크립트를 작성했을 때 검출이 안되는 것이 확인 되었다.



    이 부분에 대해서는 다시 생활코딩에 질의를 했고, 우선 다른 사람들의 풀이를 봤더니 9e307*2 를 하시는 분들이 계셨다.










    그냥 단순히 9e308 을 9e307*2 로 바꿔주었을 뿐인데 문제가 해결된 것을 알 수 있었다.


    혹시나해서 9e123123123123123123 와 같은 형태의 큰 수를 대입해봐도 반응을 하지 않았다.



    오로지 9e307*[ ] 와 같은 형태에만 반응을 보였다!!



    이에대한 부분은 끝까지 파헤쳐봐야겠다




















    짜잔!!












    대문자를 소문자로 바꿔서 대입한 이유는 앞서 포스팅했던 글에 적어놨다. ㅎㅎ




    Clear!!







    댓글

Designed by Tistory.