<?php

$a = $_GET['a'];

if(eregi("script", $a){

echo "detected!<br>";

}else{

echo "bypass<br>";

echo $a;

}

?>


위와 같이 eregi 함수를 사용하여 script 문자열을 필터링할 때 php 5.3+ 부터는 널바이트 삽입을 통해 우회가 가능하다.


http://hackability.kr/entry/PHP-%EB%AC%B8%EC%9E%90%EC%97%B4-%ED%95%84%ED%84%B0%EB%A7%81-%ED%95%A8%EC%88%98ereg-eregi-%EC%B7%A8%EC%95%BD%EC%A0%90%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9A%B0%ED%9A%8C






어떠한 것들이 필터링 되었는지 특수문자도 입력해보고 ScriPt등과 같이 대소문자를 조합하여 입력해보고 테스트한 결과

2글자 이상의 문자열을 입력했을 때 no hack이라고 필터처리된다. 위에서 언급한 것과 같이 eregi 함수를 사용했고 php 5.3+ 이라면

널바이트 삽입으로 필터링을 우회할 수 있을 것이다.


따라서 %00<script>alert(1)</script>을 URL에 입력한다. 주의할 점은 입력폼에 삽입을 하면 %부분을 URL 인코딩하여 

index.php?code=%2500%3Cscript%3Ealert%281%29%3B%3C%2Fscript%3E 같이 전송하기 때문에 URL에 직접 입력한다.


23번 문제는 필터링 우회, eregi 함수 취약점에 관한 문제인 것 같다.






'WEB Hacking > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] 18번 SQL 인젝션  (0) 2018.08.29
[webhacking.kr] 39번 SQL 인젝션  (0) 2018.08.28
[webhacking.kr] 26번  (0) 2018.08.24
[webhacking.kr] 20번  (0) 2018.08.24
[webhacking.kr] 24번  (0) 2018.08.23

+ Recent posts