ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Webhacking.kr] 59번 풀이
    Wargame/webhacking.kr (old) 2019. 5. 11. 03:08
    728x90


    소스를 보자.



    로그인하여 나온 lv값이 admin이면 문제가 풀린다.

    Join 부분의 insert 문을 보면 lv값을 guest로 지정해준다.


    phone은 길이가 20미만으로 제한되어 있고, eregi 함수에 의해 몇몇 문자열이 필터링되어 있다.

    id값으로는 admin이 필터링되어 있다.

    insert문에서 phone의 값은 '로 묶여있지 않은 것을 보니 문자열이 아닌 정수형 값이라는 것을 추측할 수 있다.


    우선 Join하고,,



    로그인하였다.



    lv의 값은 guest이다. lv값에 다른 값이 나올 수 있는 값들을 넣어보았다.


    insert into c59 values('inid',1,1)--',1,'guest')



    id : inid, phone : 1, lv : 1 일 것으로 예상하였으나, 아니었다.

    id 값은 싱글 쿼터로 묶여 있어 문자열로 인식한다.


    insert into c59 values('inphone',1,1)--,'guest')



    id : inphone, phone : 1, lv : 1로 lv값을 바꾸는데 성공하였다.

    phone부분을 이용하여 lv를 admin으로 만들어야한다.

    phone의 문자열 필터링을 우회하기 위해 SQL 내장함수를 찾아보았다.

    (보통 SQL Injection에서 필터링을 우회할 때 내장함수 bin, hex를 많이 사용한다.)


    [ SQL 내장함수 ] https://blog.naver.com/foryunha/20139047181


    admin을 포함하지 않고 admin을 출력할 수 있는 함수가 있는지를 중점으로 찾아보았다.

    문자 함수 중 reverse 함수를 이용할 수 있을 것 같다.


    insert into c59 values('testtt',1,reverse('nimda'))--,'guest')


    phone의 길이가 20자가 넘어서 필터링된다.


    insert into c59 values('nimda',1,reverse(id))-- ,'guest')


    phone의 길이는 17자로 필터링되지 않는다.



    id : nimda, phone : 1 로 로그인 시도



    lv가 admin이 되어 문제가 풀린다.


    insert into c59 values('nimda',1,reverse(id)),(1,1 ,'guest')


    insert문에 값을 삽입할 때, values이므로 여러 개의 값을 한번에 넣을 수 있다.

    따라서, 위와 같은 쿼리문을 만들어 문제를 풀 수도 있다.



    id : 1, phone : 1, lv : guest인 데이터도 같이 저장된다.



    반응형

    'Wargame > webhacking.kr (old)' 카테고리의 다른 글

    [Webhacking.kr] 61번 풀이  (0) 2019.05.11
    [Webhacking.kr] 60번 풀이  (0) 2019.05.11
    [Webhacking.kr] 59번 풀이  (0) 2019.05.11
    [Webhacking.kr] 58번 풀이  (0) 2019.05.11
    [Webhacking.kr] 57번 풀이  (0) 2019.05.09
    [Webhacking.kr] 56번 풀이  (0) 2019.05.09

    댓글 0

@Jo Grini's Blog