본문 바로가기
[웹해킹]/[Webhacking.kr]

[Webhacking.kr] 23번

by Hevton 2020. 10. 3.
반응형

메인 화면은 이렇다

여기에 정말 다양하게 값들을 입력해보았더니,

 

문자와 문자가 연속으로 나올 경우 no hack 이라는 알림이 뜬다.

즉 아래 <script>alert(1);</script> 는 실행해야 하는데, 문자가 연속으로 붙여져서 입력해서는 안된다는 것.

 

NULL은 문자열에서 문자열의 끝을 나타낸다. 그래서 그냥 널문자를 나타내는 값을 s와c 사이에 넣어봤다.

단순히, 어떻게 처리되나 궁금해서..

-> s%00c

 

결과는 sc가 출력된다. 먹힌 것이다. 문자들은 NULL로 구분되어 입력된 뒤 각자 잘 출력됐다.

 

아마 지금은 사용하지 않는 eregi 함수를 문제의 php 내에서 사용하고 있는 것 같다는 생각이 든다.

eregi 함수는 문자열 필터링에 쓰이는 함수이다. 요즘 eregi 함수는 주로 사용하지 않는다.

 

현재 쓰이는 preg_match()의 이전 버전이라고 생각하면 될 것 같다. eregi 또한 정규표현식 기반으로 문자열을 필터링하는데, 아마 [a-zA-Z][a-zA-Z] 이런식으로 문자가 두번 오는것을 막아놓은 것 같다.

 

eregi가 현재 주로 사용되지 않는 이유는, NULL문자를 마주하면 검사를 하지 않는 오류가 있다. 즉 eregi의 취약점은 널문자(%00)가 있으면 문자열 검사를 제대로 하지 못한다.

 

 

어쨌든 <script>alert(1);</script> 에서 문제가 연속으로 출력되는 부분을 %00으로 구분해서 URL 주소 창에 넣어주면 문제 해결.

<%00s%00c%00r%00i%00p%00t%00>%00a%00l%00e%00r%00t%281%29%3B%00<%00%2F%00s%00c%00r%00i%00p%00t%00>

 

 

 

ps. 그냥 느낌으로 문제를 풀긴 했는데, 문제에서 NULL문자들로 인한 문자열 전체의 처리과정이 어떻게 되는건지 정확한 원리가 궁금해서

이 23번 문제에 대해 검색을 좀 해봤는데, 다들 그냥 "검색해보니 널문자를 넣어야 한다고 한다", "검색해보니 널문자를 넣어야 풀 수 있단다", "널문자를 넣어야 풀린다고 한다", "띄어쓰기 안되니까 널문자를 넣는다", "널문자를 넣으면 뒤에가 인식안되니까 넣는다"(->그럼 나머지문자들은 어떻게 출력되는거죠..?ㅋㅋ) 등등 이유는 없고 다들 그냥 넣으셨길래 알 길이 없다.

문자 사이사이에 널 문자를 넣어 문자를 구분시켜주는건 알겠는데, 그럼 출력될 때 어떻게 널 문자 이후의 것들도 다 정상적으로 출력되는지 궁금하다. 현재까지 아무리 찾아봐도 제대로 된 설명이 없다. 나중에라도 알면 좋겠다.

 

+ 해당 문제풀이 기법은 Null byte Injection이라고 불린다고 한다.

정말 인터넷의 모든 풀이를 다 뒤졌지만.. NULL 문자로 문자를 구분하는 것 까지는 알고있는 내용인데ㅋㅋ, 그 내용밖에 없고..

"NULL 문자가 문자열의 끝을 나타내는데, NULL이후 나머지 문자들은 왜 어떻게 잘 처리되는지에 대한 설명", 즉 원리에 대한 설명은 없다.

 

 

 

 

반응형

'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글

[Webhacking.kr] 25번  (0) 2020.10.05
[Webhacking.kr] 24번  (0) 2020.10.05
[Webhacking.kr] 21번  (0) 2020.10.02
[Webhacking.kr] 20번  (0) 2020.09.30
[Webhacking.kr] 19번  (0) 2020.09.28