티스토리 뷰
파일업로드 기능을 구현할 때 개발자는 취약점 방지를 위해 확장자에대한 제한을 거는 경우가 많다.
예를 들면, php, jsp, asp 확장자는 업로드할 수 없게 블랙리스트 필터링을 건다던지
jpg, jpeg, png 등의 이미지 파일만 업로드할 수 있게 화이트리스트 필터링을 건다던지 한다.
이 때 이 확장자를 우회하는 방법에 대해 몇가지 적어보겠다.
1. NULL Byte Bypass
예를 들면 webshell.php%00.jpg 와 같이 중간에 NULL Byte를 넣어주게 되면,
NULL Byte는 문자열의 끝을 의미하므로 처리되는 파일명은 webshell.php가 되게된다.
2. HTML Encoding
잘 안되는 경우가 많은데 간단한 방법으로 webshell.ph%70 와 같이 HTML Encoding을
이용하는 방법이 있다.
3. PHP의 숨겨진 확장자명을 이용하는 방법.
PHP5는 안되고 PHP7에만 해당되는 내용이다.
PHP7에는 .php 이외에 추가로 인식하는 확장자가 여러개있다. 나열하자면
.php .php3 .php4 .php5 .php7 .pht .phtml .htm .html .inc 이 있다.
( 사실 htm, html, inc 는 검증되지 않아서 따로 확인해봐야한다. )
4. Content-type 을 수정해서 우회하는 방법.
파일을 처리할 때 HTTP는 파일의 종류에 따라 다른 Content-type을 사용한다.
jpg 는 image/jpg, png는 image/png, txt는 text/plain, php파일은 text/html 등이다.
서버단에서 Content-type을 통해서 필터링할 경우 (text/html 차단)
프록시툴로 이 Content-type만 다른 것으로 수정해주는 것만으로도 우회가 가능하다.
추가로 이미지파일을 확장자가 아니라 파일의 시그니쳐를 통해 확인하는 경우도 있다.
이럴경우에 두가지 방법을 통해 우회가 가능하다.
1. 이미지파일에 스크립트 추가
→ 제일 마지막에 추가해도 되며 반드시 헥스에디터를 사용 ( 메모장 사용시 기존 시그니쳐가 깨진다. )
2. php 파일 시작부에 시그니쳐 추가. ( JPEG의 시그니처 3Byte가 만만하다. )
'Web > Concept' 카테고리의 다른 글
[Concept] DNA Code 디코딩 표 (0) | 2019.07.26 |
---|---|
[Concept] 멍청한 개발자의 필터링. (0) | 2019.07.19 |
[Concept] PHP의 비교구문의 허점 (0) | 2019.07.19 |
[Concept] PHP의 이스케이프 처리함수 목록 (0) | 2019.07.18 |
[Concept] PHP 백도어에서 자주사용하는 함수. (0) | 2019.07.17 |