ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Webhacking.kr] 26번 풀이
    Wargame/webhacking.kr (old) 2019. 5. 7. 01:08


    index.phps로 접근하면 php 소스코드를 볼 수 있다.



    eregi("정규 표현식", "대상 문자열")  //대소문자 구분 x

    ereg("정규 표현식", "대상 문자열")  //대소문자 구분 o

    대상 문자열이 정규 표현식과 일치하면 true, 그렇지 않으면 false 반환하는 함수


    소스 코드를 해석해보면,

    get 방식으로 id 값을 전달하고, 전달한 id 값이 urldecode 함수에 의해 복호화 된다.

    복호화된 값이 admin일 경우에 문제가 풀린다.

    단, admin이라는 문자열은 필터링되어 있다.


    urlencode(\$str)

    문자열 url encode하는 함수

    - _ .을 제외한 모든 영, 숫자가 아닌 문자를 퍼센트(%) 사인에 이어지는 두 16진수로 교체하고,

    공백은 플러스(+) 사인으로 교체한 문자열 반환


    urldecode(\$str)

    url 인코딩된 문자열 decode하는 함수


    admin 값을 url encoding하여 id 값으로 넘겨주면 admin 문자를 포함하지 않으면서,

    urldecode 함수에 의해 복호화되어 admin이 된다.


    따라서, admin을 url encoder를 이용하여 암호화해보았으나, admin이 그대로 반환된다..;;

    직접 암호화하는 수 밖에 없나보다..

    문자열을 직접 encoding하는 방법은 hex로 변경 후 앞에 %기호를 붙여주면 된다.


    url encoder로는 암호화되지 않는 값들을 표로 정리해보았다.



    url encoding 한 값인 admin(%61%64%6d%69%6e) 값을 전송해주었다.



    그.러.나.

    자동으로 admin으로 바뀌어서 전송된다..



    아무래도 url을 통해 값을 넘길때 자동으로 decoding하는 것 같다.

    encoding을 한번 더 해주었다.


    1. url encoder 이용



    encoding된 값 admin(%2561%2564%256d%2569%256e)을 전송하면 문제가 풀린다.



    2. hex 값을 이용하여 직접 encoding

    %%36%31%%36%34%%36%64%%36%39%%36%65



    자동으로 decoding되어 %61%64%6d%69%6e 값이 되었으나,

    문자열에 admin을 포함하지 않기 때문에 문제가 풀린다.



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

    [Webhacking.kr] 29번 풀이  (0) 2019.05.07
    [Webhacking.kr] 27번 풀이  (0) 2019.05.07
    [Webhacking.kr] 25번 풀이  (0) 2019.05.07
    [Webhacking.kr] 24번 풀이  (0) 2019.05.06
    [Webhacking.kr] 23번 풀이  (0) 2019.05.06

    댓글

@Jo Grini's Blog