2021. 8. 26. 21:08ㆍwebhacking.kr
<script>alert(1);</script>를 실행시키라고 나와있습니다.
우선 입력창에 <script>alert(1);</script>를 넣어보겠습니다.
URL을 보면 GET 형식으로 입력을 받는걸 볼 수 있습니다.
그리고 no hack이 뜨는걸 보면 php 코드 내에 필터링 구문이 있을 듯합니다.
주어진 코드가 없기 때문에 특수문자들을 입력해가며 어떤 것들을 필터링하는지 찾아보겠습니다.
- 123 -> 123
- abc -> no hack
- aa -> no hack
- <script>alert(1);</script> -> no hack
- < -> <
- ! -> !
- # -> #
- and -> no hack
- or -> no hack
- && -> &&
- || -> ||
- <h1>1</h1> -> 1
- a1a1 -> a1a1
숫자는 필터링 대상이 아닌 것 같고, abc랑 aa를 필터링하는거 보니 그냥 연속된 알파벳은 필터링 하는 것 같습니다.
그리고 <h1> 태그를 실행시켜보니 정상적으로 실행됐습니다.
알파벳이랑 숫자를 섞어서 쓰면 괜찮은 건가 싶어서 a1a1을 입력해봤더니 제대로 나왔습니다.
필터링은 대충 파악이 됐으니 어떻게 문제를 풀까 생각해보겠습니다.
문자랑 숫자를 섞어서 쓰면 괜찮으니 URL Encoding을 활용해보면 좋을 것 같습니다.
script, alert, (, ) 이렇게 4개는 Encoding이 되지 않았습니다.
여기에는 한 글자마다 NULL을 Encoding 해서 넣어보겠습니다.
%3Cs%00c%00r%00i%00p%00t%3Ea%00l%00e%00r%00(%001%00)%00%3B%3C%2Fs%00c%00r%00i%00p%00t%3E
이제 위의 문장을 URL 쿼리에 입력하겠습니다.
음.... 실패했습니다.
이번에는 그냥 스크립트 구문 전체를 Encoding 하지 말고 사이사이에 NULL 문자만 넣어서 시도해보겠습니다.
<s%00c%00r%00i%00p%00t>a%00l%00e%00r%00t(1);</s%00c%00r%00i%00p%00t>
푼 문제가 하나씩 늘어가니 뿌듯하네요.
이 맛에 IT 공부하는 것 같습니다.