웹 서버의 File Upload 취약점 traversal
File Upload 취약점
- Traversal 우회방법을 이용하여 업로드 파일 저장 위치를 바꿀 수 있다.
-
정삭적으로 파일을 업로드 하였을 때.
-
현재 디렉토리를 의미하는
./
를 파일 이름에 붙이고 업로드 하였을 때. - 이렇게 공격자는 마음대로 업로드 파일 저장 위치를 바꾸어 저장할 수 있다.
특정 문자 금지하기
- 업로드 파일 명에 특수문자를 사용하여 디렉토리를 옮기는 것을 막기위해 특정 특수문자를 필터링한다.
- 즉
\ , / , : , * , ? , < , > , | , % , "
문자를 필터링 한다. - 다음과 같은 문자가오는 파일이름이면 서버에 저장하지 않는다.
var regex = "[/\\\\:*?<>|\"%]+";
var pattern = Pattern.compile(regex);
pattern.matcher(fileName).find()
구현
- 특정 문자가 파일이름에 들어가 있으면 업로드 파일을 서버에 저장하지 않는다.
MainPage.java
- 특수 문자 검사 함수
// true : dont save file in server
// false : save file in server
private boolean notCorrectFileName(String fileNmae){
var regex = "[/\\\\:*?<>|\"%]+";
var pattern = Pattern.compile(regex);
return pattern.matcher(fileNmae).find();
}
- 검사하고 싶은 파일 이름을 넣어준다. 검사를 통과해야 업로드한 파일을 서버에 저장한다.
// 파일 이름에 금지된 문자가 사용되면 파일 업로드 안하기.
if(notCorrectFileName(파일 이름)){
continue;
}
결과
- burp suite 의 intercept 기능을 이용하여 파일 이름을 변경하여 서버로 요청을 보내게한다.
- 게시글은 작성되지만 파일은 서버에 저장이 안되는 것을 확인할 수 있다.
댓글남기기