없다.
문제에 들어가면 'Your mission is to inject <script>alert(1);</script>' 라는 글과 위에 입력칸이 있다.
한 번 <script>alert(1);</script>
을 넣어본다.
그러자 nohack이라는 문구만 뜨고, 주소창에 ?code=
에 값이 들어가는 것을 알 수 있다.
nohack이라는 문구가 뜨는 것을 봤을 때 어딘가 필터링이 되고 있는 것을 알 수가 있다. 그래서 필터링 되는 부분을 찾아본다.
alert
, script
이 필터링에 걸렸다.
그러면 몇 글자가 적혀야 필터링에 걸리는지 알기 위해 al
만 적어서 제출해 봤는데 이것 또한 필터링에 걸렸다. 즉 두글자 이상 있으면 필터링에 걸린다.
a
만 적었을 때
al
을 적었을 때
필터링이 안 되는 부분은 ;
,(1)
,<
,>
,/
,영어 한글자씩이다.
이제 이 필터링을 우회해야 한다. 그런데 필터링되는 부분을 찾다보면 주소창에 몇몇 특수문자는 아스키코드로 출력되는 것을 알 수 있다.
아스키코드 중에는 NULL값이 나타내는 값이 있는데 바로 %00
이다.
그래서 한 번 주소창에 al 사이에 %00를 넣어봤다. 그러자 al이 출력이 되었다.
%00
을 통해 필터링 우회를 할 수 있다는 것을 알게 되었다.
이것을 활용하여 코드를 작성하면 이렇게 나온다.
<s%00c%00r%00i%00p%00t>a%00l%00e%00r%00t(1);</s%00c%00r%00i%00p%00t>
이 코드를 가지고 주소 ?code=
에 작성하면 script가 작동한다.
그리고 문제가 풀린다.