[Webhacking.kr] old-23 (NULL Byte Injection 활용)

728x90
반응형

1. 서론

본 포스팅 시리즈는 webhacking.kr의 문제 풀이를 하면서 정리한 자료이다.
필자가 풀이한 방법들이기 때문에 완벽하지 않을 수도 있다는 점을 참고 바란다. (지적과 조언은 언제나 환영이다)

이번 문제는 old-23, NULL Byte Injection 활용이 필요한 문제이다.

2. 본론

이번 문제에 접속하면 이런 화면을 볼 수 있다. 이번엔 이 페이지에 "<script>alert(1);</script>"를 삽입하는 것이 목표이다.
그래서 우선 여러가지 케이스들을 넣어보고 상태를 관찰해보았다.

"asdf"를 입력한 화면
"as"를 입력한 화면
"a"를 입력한 화면
"a1"을 입력한 화면
"a1s"를 입력한 화면

기본적으로 문자열을 입력한 후 submit을 하면 입력 폼 윗쪽에 흰색 텍스트로 나타나게 되는데, 일부 케이스에 경우 입력한 값이 그대로 출력되지 않고 "no hack"이라는 문자열이 나타난다. 현재까지 확인한 케이스들을 기반으로 규칙을 추정해보자면, 단순히 문자의 개수를 가지고 필터링이 되진 않는거같고 영문자가 2개이상 연속해서 조합된 문자열은 필터링되는 듯하다. 영문자가 연속해서 나오지 못하면 "<script>alert(1);</script>" 또한 입력값으로 그대로 submit하게 되면 분명 필터링 될 것이다. 하지만 여기서 중요한건 "연속"이라는 것이다. 영문자와 영문자 사이에 다른 문제가 들어가 있으면 된다는건데, 이럴때 사용할 수 있는 문자로 "NULL"문자가 있다. "NULL"문자는 URL encoding을 하게 되면 "%00"이 되는데, 이걸 문자와 문자 사이에 넣어주면 분명 필터링을 우회할 수 있을 것이다.

https://webhacking.kr/challenge/bonus-3/index.php?code=<%00s%00c%00r%00i%00p%00t%00%3E%00a%00l%00e%00r%00t%00(%001%00)%00;%00<%00/%00s%00c%00r%00i%00p%00t%00>

그래서 주소창에서 직접 GET 파라미터 "code"에 위 문자열을 넣어주었다.

결과는 성공이다.

728x90
반응형