ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • |Lord of SQL_injection| #26 Red_dragon
    Wargame Site/SQL injection 2019. 3. 2. 14:12





    이제 어느덧 두 줄을 남기고 있다.



    가볼까아












     26단계 문제 Red_dragon 이다. 


    우선 id 의 문자 길이가 7 이하여야 한다는 가정을 미루어볼때 뭔가 특별한 구문을 넣는 것 같다.


    그리고 no 에는 숫자만 넣을 수 있는 것으로 보아 hex 값을 이용하는 것 같다.







    우선은 조건을 무조건 참으로 만들어볼까아??










    문장을 참으로 만들면 admin 에 접근할 수 있는 것을 볼 수 있다.


    그리고 no 에는 숫자 혹은 문자열만 들어갈 수 있다.




    그.렇.다.면




    id = ''||[field][부등식]#         no=[줄바꿈][비교대상]


    와 같은 접근을 생각해볼 수 있다. 필드와 비교대상을 연결하는 방식이다.





    우선 호기심에 no 이라는 필드에 대해 탐색을 시작해보았다. (사실 pw 만 탐색하면 된다 ㅎㅎ)




    이를 통해 no 이라는 필드는 존재하지 않는 필드일 수도, 

    존재하더라도 no 필드의 해당값을 가지는 계정이 없다는 것을 알 수 있다. 




    자, 그럼 이제 pw 필드에 대한 탐색을 해보자. 






    만약, 'abcd' 라는 문자열과 'z' 라는 문자열을 비교한다면 'z' 가 크기 때문에 한글자 한글자 탐색을 할 수 있다.


    이런점을 이용해서 코딩해보았다.





     










    코드를 돌려보니 






    짜잔!!








    A53DD46A 라는 결과가 나왔다. MySQL 에서는 대소문자를 구분하지 않기 때문에 'A' = 'a' 가 성립한다.

    하지만, WAS 인 php 에서는 대소문자를 구분하여 A53DD46A 라는 것을 pw 로 줬을 때 문제가 풀리지 않는 것이다.

    그래서 스크립트 작성시에 패스워드 탐색에 ord 를 씌울 수 있는 상황이면 ord 를 활용하는 것이 좋다.



    만약 소문자부터 탐색을 시작하면 a53dd46a 라는 결과를 얻을 수 있다.



    ,소문자 관련해서 이해하는데 도움을 주신 KMC 님에게 다시한 번 감사하다는 말씀드립니다.








    댓글

Designed by Tistory.