ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Webhacking.kr] 51번 풀이
    Wargame/webhacking.kr (old) 2019. 5. 8. 21:44
    728x90


    오른쪽 아래에 잘보면 Source가 있다.

    클릭해서 소스를 보자.



    id가 admin이면 풀리는 SQL Injection 문제이다.

    SQL 쿼리문이 and로 되어 있기 때문에 pw부분을 주석 처리해 인증을 우회하기로 하였다.


    id : admin'-- , pw : 1



    Wrong이 뜬다. 이 방법으로는 인증우회가 안된다.

    admin의 pw를 알아내거나, 다른 방법으로 인증을 우회해야한다.

    pw가 md5 함수에의해 해시화되고있다. 그런데 의심스럽게 md5의 인자로 true가 전달된다.


    md5(string \$str [, bool \$raw_output ])

    RSA Data Security, Inc. MD5 Message-Digest Algorithm을 사용하여 str의 MD5 해시를 계산하여

    반환하는 함수로 raw_output의 기본 값은 false이다.

    raw_output를 true로 할 경우 binary 형식으로 반환한다.



    binary 형식으로 반환할 경우 md5 raw hash 취약점이 발생할 수 있다.


    MD5 Raw Hash 취약점

    binary로 반환된 문자열에 = 또는 or이 포함된 경우에 인증을 우회할 수 있다.


    이해를 위해 num_51 테이블을 생성하고 실습해보았다.



    1. select* from num_51 where id='admin' and pw='astw'or'5adst';



    id='admin' and pw='astw' 가 False 이지만 or 뒤의 문자열이 5로 시작하여 bool으로 사용될 때

    int 형으로 캐스팅되어 5가된다. 따라서, '5adst' 는 True가 된다.

    (연산자 우선순위 : and > or)

    결과적으로 select* from num_51 where id='admin' and pw='astw' or 5와 같다.


    2. select* from num_51 where id='admin' and pw='astw'='adst';



    pw='astw'는 False이고, 'adst'는 int 형으로 캐스팅되어도 숫자가 없어 0이므로 False가 된다.

    따라서, False=False가 되어 True가 된다.

    결과적으로 select* from num_51 where id='admin' and True와 같다.


    [ MD5 Raw  Hash 취약점 ] http://cvk.posthaven.com/sql-injection-with-raw-md5-hashes

    [ MD5 Raw Hash 취약점 ] https://hyunmini.tistory.com/43


    MD5 Raw Hash 취약점을 이용하여 인증을 우회하면 될 것 같다.

    md5를 binary로 나타낸 값 중 'or'숫자 를 포함하거나 '='를 포함하는 값을 찾아보자. php를 이용하였다.

    ('or'숫자 는 시간이 너무 오래 걸려 '='를 찾는 소스를 짰다.)



    php 실행 결과는 아래와 같다.



    찾아낸 값인 1839431으로 로그인을 시도하니 문제가 풀렸다.


    id : admin, pw : 1839431



    반응형

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

    [Webhacking.kr] 53번 풀이  (0) 2019.05.08
    [Webhacking.kr] 52번 풀이  (0) 2019.05.08
    [Webhacking.kr] 51번 풀이  (0) 2019.05.08
    [Webhacking.kr] 49번 풀이  (0) 2019.05.08
    [Webhacking.kr] 48번 풀이  (0) 2019.05.08
    [Webhacking.kr] 47번 풀이  (0) 2019.05.08

    댓글 0

@Jo Grini's Blog