ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Webhacking.kr] 23번 풀이
    Wargame/webhacking.kr (old) 2019. 5. 6. 17:02


    <script>alert(1);</script>를 삽입하는 xss 문제이다.


    XSS(Cross Site Scripting)란?

    게시판이나 웹 메일 등에 악의적인 스크립트 코드를 삽입해 개발자가 고려하지 않은 기능을 작동하게 하는 공격

    클라이언트 대상


    입력 form에 <script>alert(1);</script>를 삽입해보았다.



    get 방식으로 입력한 값이 전송되고, 사이트에 연결할 수 없다는 페이지가 출력된다.



    안되는 문제인줄 알았으나, 1을 입력해보니 페이지에 출력되었다.

    그냥 스크립트 문을 필터링해놓은 것 같다.



    <script>alert(1);</script>에서 어느 부분이 필터링되어 있는지 알아보기 위해

    하나씩 입력해보기로하고 우선, <>부터 입력해보았다.



    잘된다. 필터링되어 있지 않다.

    script를 입력해보았다.



    no hack이 출력된다.

    엥?!

    필터링되어 있는 문자를 넣어도 사이트 연결안되는게 아닌가보다...?


    아무튼 script가 필터링된 것을 확인하였고, alert를 입력해보았다.



    alert도 필터링되어 있다. 무슨 글자가 막혀있는지 알아보기위해 a ~ z 를 입력해보았는데,,

    필터링되어 있지 않았다.


    글자수를 늘려 ab를 입력해보았더니 필터링되어 있었다.



    [ 필터링 확인 결과 ]

    한 글자의 문자 x

    두 글자 이상의 문자 o

    두 글자 이상의 숫자 x

    두 글자 이상의 특수기호 x

    ▶ 두 글자 이상의 문자만 필터링 되어 있다.


    script문 사이에 공백문자를 넣어보았다.



    페이지에 출력이 잘 된다.

    공백문자대신 null문자(%00)를 넣어주면 script문으로 인식될 것 같다.


    <s%00c%00r%00i%00p%00t>a%00l%00e%00r%00t(1);</s%00c%00r%00i%00p%00t>



    입력폼에 넣어주었더니 get 방식으로 전송되면서 url encoding이 되어 %가 %25가 되었다.

    %00이 그대로 페이지에 출력된다.



    따라서, URL에 직접 입력해주어야 한다.


    ?code=<s%00c%00r%00i%00p%00t>a%00l%00e%00r%00t(1);</s%00c%00r%00i%00p%00t>



    다른 사람들의 풀이를 찾아보니 글자 사이사이에 공백문자를 넣지않고

    ?code=%00<script>alert(1);</script>를 입력해주어도 문제가 풀렸다.


    null은 문자열의 끝을 의미하기 때문에 <script>문 전에 null 값을 입력해줌으로써

    문자열은 끝난 것으로 판단되어 뒤의 문자열은 검사하지 않는다.


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

    [Webhacking.kr] 25번 풀이  (0) 2019.05.07
    [Webhacking.kr] 24번 풀이  (0) 2019.05.06
    [Webhacking.kr] 22번 풀이  (0) 2019.05.06
    [Webhacking.kr] 21번 풀이  (0) 2019.04.19
    [Webhacking.kr] 20번 풀이  (0) 2019.04.19

    댓글

@Jo Grini's Blog