문제에 접속하면 아래 이미지와 같은 페이지로 구성되어 있고, 'Your mission is to inject <script>alert(1);</script>'의 문구와 함께 문제 해결을 위한 힌트가 제시되어있는 것 같다.
먼저, 값을 넣어주어야 하는 공간에 미션으로 주어졌던 <script>alert(1);</script>을 그대로 넣어서 제출을 해봤더니
'no hack'이라는 문구가 출력된 것을 볼 수 있었다.
어떤 값이 필터링되고 있는지 확인하기 위해 여러 값을 넣고 제출해보았다.
임의로 a만 넣고 제출했을 때는 입력한 값이 그대로 출력되는 것을 볼 수 있었다.
입력 공간에 'swlug'를 넣고 출력시켰더니 alert 스크립트를 넣었을때와 마찬가지로 'no hack' 문구가 출력되는 것을 볼 수 있었다.
이 외에도 다른 입력 값들도 시도해보았으나, 어떤 값이 필터링되고 있는지 감이 잘 안와 구글링도 함께 하면서 해당 문제에서 필터링하고 있는 값을 찾을 수 있었다.
문제에서는 숫자를 제외하고 문자를 2개 이상 연속으로 입력할 경우 'no hack'을 출력하고 있었다.
아래는 php 서버에서 다음과 같은 필터링 코드가 작성되었을 것이라 예측되는 코드이다.
if (preg_match('/[A-Za-z]{2,}/', $_GET['code'])) {
echo "no hack <br>";
} else {
echo "{$_GET['code']}<br>";
}
출처 : https://kangmyoungseok.github.io/webhacking/webhacking23/
따라서 입력해야하는 문자열 중간중간에 null byte(0x00) 값을 넣어 필터링되지 않을 수 있도록 할 수 있다.
<s%00c%00r%00i%00p%00t>a%00l%00e%00r%00t(1);</s%00c%00r%00i%00p%00t>
<script>alert(1);</script> 중간중간에 null byte를 넣어준 값인 위 값을 입력 값으로 넣어보자.
주소창에 해당 값을 넣어주니 alert(1)으로 넣은 값 1이 alert 창으로 출력되는 것을 볼 수 있었고,
이후에 문제를 해결했다는 alert 창이 뜬 것을 볼 수 있었다.
'CTF' 카테고리의 다른 글
[Dreamhack] csrf-1 write-up (0) | 2023.11.15 |
---|---|
[Dreamhack] XSS Filtering Bypass write-up (0) | 2023.11.15 |
[Dreamhack] xss-2 write-up (0) | 2023.11.04 |
[Dreamhack] xss-1 write-up (0) | 2023.11.04 |
[Dreamhack] DOM XSS write-up (1) | 2023.11.04 |