[webhacking.kr] 23번 문제 풀이[PHP]
💡 Webhacking.kr challenge(old) 23번 문제에 대한 풀이입니다.
문제
문제 화면
문제 풀이
입력 칸에 여러 단어를 입력해 보면서 무엇이 필터링 되는지 먼저 확인합니다.
몇개의 단어를 입력해보니 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>
댓글남기기