ABOUT ME

-

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


    Login, Join 버튼이 두 개만 있다. 일단 Join을 해보았다.



    접근이 거부되었다...

    아무것도 안했는데.. 접근 거부부터 당했다..;;

    이럴땐 소스를 보아야한다.



    Join 버튼을 누르면 alert 창이 뜨고, Login버튼을 누르면 mem/login.php 페이지로 이동한다.

    Join도 mem/join.php 페이지로 접근하지 않을까? 일단 접근해보았다.



    404에러 없이 검정화면이 뜬다..!

    하지만 join할 수 있는 form이 존재하지 않는다.

    소스를 보자..!



    페이지 소스가 난독화되어 있다.

    정확하게 뭔지는 알 수 없지만 느낌적으로 bye, alert('access_denied')가 걸려있는 if문을 제거해야 할 것 같다.



    위 if 구문을 지워주고 개발자 도구의 Console 창에 소스 그대로 붙여넣기!

    개발자 도구는 아주 유용하다.



    그 결과 화면에 id와 pass를 입력하는 form이 생겼다.



    id : test, pass : 1234 로 회원 가입!



    가입 성공!


    로그인 페이지로 돌아가서 가입한 id와 pass로 로그인 시도!



    읭..?!

    id는 admin이어야 하나보다. 다시 id를 admin으로 가입을 시도해보았다.



    id : admin, pass : 1234 회원 가입!



    역시 쉽게 admin이라는 아이디로 회원가입할 수 없다.


    동일한 아이디로는 회원가입이 안되는지 확인하기 위해 아까 가입했던 test로 회원 가입!



    가입 성공!


    가입이 된다..?!

    데이터베이스 상에서 아이디 중복이 막혀있는 것이 아니다.

    php에서 id의 값이 admin일 경우를 막고 있는 것 같다.


    그렇다면,

    php에서는 admin이 아니고, sql 상에서는 admin으로 인식하도록 회원가입을 해야 한다.

    php에서는 'admin'과 'admin(공백)'은 다른 문자열로 인식한다.

    이를 이용하여 'admin '으로 회원가입을 시도해보았다.


    그러나, id의 길이는 5로 설정되어 있어 5글자 이상의 id는 입력할 수 없게 되어 있다.

    이럴 때는 유용한 개발자 도구(F12)를 이용하면 된다..!



    id 부분의 maxlength를 5에서 10으로 변경해주고 'admin '로 회원 가입!


    역시 가입 성공!

    로그인 페이지로 가서 login을 시도하니 문제가 풀렸다.



    join.php에 접근하기 위한 또 다른 방법으로 소스코드를 해석해보았다.

    우선, 난독화된 소스는 javascript로 짜여 있다.

    java를 이용하여 소스 코드의 난독화를 풀어보았다.


    java로 난독화를 풀어보자!


    실행시켜 아래와 같이 보기 쉬운 소스 코드를 얻었다.



    소스 코드를 해석해보면, cookie 값에 oldzombie가 존재하고, url에 mode=1이 존재해야 한다.


    1. oldzombie 쿠키 생성



    2. url에 ?mode=1 입력



    소스 코드의 조건을 맞춰주니 id와 pass를 입력하는 form이 출력되었다.

    이후에는 이전에 한 것처럼 하면 된다.


    데이터 베이스에 id 입력 값 길이도 정해둔건지 궁금해져서 테스트 해보았다.

    만약 데이터 베이스에서 길이를 5자로 제한해두었다면,

    공백 문자가 아니라도 admin으로 인식하여 가입이 가능할 것이다.


    5글자 이상의 문자가 들어올 경우 5글자 이외의 문자는 버리고 5글자만 DB에 저장하기 때문으로

    이는 취약점(Column Truncation Vulnerability)이 발생하기도 한다. 



    id : 'admin    4' (공백 : 4, 총 10글자)로 회원 가입!


    login 페이지에서 id는 admin으로 입력하여 로그인을 시도하였더니 Wrong password가 출력되었다.

    'admin    4'로 회원 가입이 된 것 같다.



    id : 'admin         9' (공백 : 9, 총 15글자)로 회원 가입!


    또 다시 login 페이지에서 id는 admin으로 로그인을 시도하였더니..!



    admin으로 로그인 성공!

    (길이를 찾아 본 결과 id의 Column 길이는 10으로 설정되어 있다. 11부터 짤린다.)


    Column 길이 제한으로 발생하는 취약점으로 인해 'admin         9'의 유저가 'admin'인 관리자가 될 수 있다.


    반응형

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

    [Webhacking.kr] 8번 풀이  (0) 2019.03.02
    [Webhacking.kr] 6번 풀이  (0) 2019.03.02
    [Webhacking.kr] 5번 풀이  (0) 2019.03.02
    [Webhacking.kr] 4번 풀이  (0) 2019.03.02
    [Webhacking.kr] 3번 풀이  (0) 2019.02.28
    [Webhacking.kr] 2번 풀이  (0) 2019.02.28

    댓글 0

@Jo Grini's Blog