-
[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 댓글