webhacking.kr - old 23
문제 화면이다.
'<script> alert(1);</script> inject 하면 문제 해결이라고 합니다.
XSS 관련 문제인거같다.
양심 없게 한번 써보자 어차피 필터링 어느 정도인지는 봐야 하니까.
당연히 막힌다.
다른 것들도 실험해 보자.
[<,>,<>,/,(),(,),1,;]
을 대입해 봤더니 정상적으로 출력이 되었고
[alert,script,img,table]
이러한 tag_name 종류들은 다 막힌 거 같다. (예시 보다 더 많이)
대문자도 물론 막힌다.
그 외 상관없는 문자, 문자열들은 정상적으로 출력이 된다.
URL Encode으로 한번 해보자.
특수문자들은 필터링에 막히지 않으니 encode 해봤자 의미가 없다 그럼 공백을 한번 넣어보자.
<s%09c%09r%09i%09p%09t>a%09l%09e%09r%09t(1);</s%09c%09r%09i%09p%09t>
안되네......
tab 이 막힌다면 띄어쓰기인 '%20'도 막힌 다는 뜻이니 그만 알아보자..
구글링 해서 찾아본 결과
eregi 함수에 대한 취약점인 거 같다. [현재 preg_match 함수로 사용되는 정규표현식을 이용한 대소문자 무시 검색]
이 취약점은 PHP 7.0.0 버전부터는 완전히 제거되었다고 한다.
따라서 잘 안 쓴다고 생각하면 될 거 같다.
일단은 문제를 풀자.
eregi 우회를 통한 NULL byte Injection %00(URL) 이 있으면 문자열 검사를 하지 못한다.
<s%00c -> <sc으로 문자열 검사 없이 입력이 된다.
%00 -> NULL byte