Path Manipulation
2023. 1. 17. 06:09ㆍ지식정리
Path manipulation
위험도
- high
요약
file 시스템 경로를 입력값이나 변수로 제어가능할 때, 공격자가 의도할 경우 보호해야할 파일이 접근, 수정될 수 있습니다.
설명
path manipulation은 공격자가 파일 시스템 작업에 사용되는 경로를 지정할 수 있고,
리소스를 지정해서 다른식으로는 허용될수 없는 권한을 얻을 수 있을 때, 이 두 조건을 만족할 때 성립한다.
공격자는 특정 파일을 덮어쓰거나, 제어하는 식으로 실행권한을 획득할 수 있다.
예시
file 접근 시 file 경로에 request.getParameter(NAME) 같이 parameter 값이 포함 되는 경우가 있는데,
해당 parameter 값을 제어해서 ../../tomcat/conf/server.xml 같이 상위 디렉토리를 타고 서버 설정파일에 접근할 수 있다.
EX1
../../tomcat/conf/server.xml 같은 파일이름을 통해 서버의 구성파일을 접근 및 삭제
String rName = request.getParameter("reportName");
File rFile = new File("/usr/local/apfr/reports/" + rName);
...
rFile.delete();
EX2
구성파일 입력을 통해 파일을 열고 사용자에게 반환, 프로그램을 사용해서 txt 확장자 파일을 읽을 수 있게 한다
fis = new FileInputStream(cfg.getProperty("sub") + ".txt");
amt = fis.read(arr);
out.println(arr);
EX3(Android)
같은 장치에 여러 소스 프로그램이 다운, 실행되는 특성을 이용한 모바일 환경 상의 자가 공격
String rName = this.getIntent().getExtras().getString("reportName");
File rFile = getBaseContext().getFileStreamPath(rName);
...
rFile.delete();
방지법
- file upload 시
- 상위 디렉토리 접근을 방지하기 위한 .. 문자열 제거.
- 업로드 디렉토리를 지정
- 웹서버에서 실행가능한 확장자인 .jsp, .asp, .js 와 같은 확장자 제거
- 업로드 디렉토리의 실행 권한을 제거 - 770 -> chmod 660 FILENAME
ex)
fileName = request.getParameter("filename").replaceAll("..","");
if( !fileName.endsWith(".js") || !fileName.endsWith(".asp") || !fileName.endsWith(".js")) {
File f = new File("/was/upload/" + fileName);
~~ UPLOAD LOGIC ~~~
}
- file download 시
- .. 문자열 제거
- 다운로드 디렉토리 지정
- .jsp, .asp, .js , .properties , web.xml 같은 중요한 파일 다운로드 금지 구문 추가
ex) upload 예시와 같음
핵심은 파일 접근시 외부 입력을 받아들이는 경우, 경로조작에 이용될 수 있는 문자열을 충분히 필터링하는 것이다.
그리고 경로에 사용되는 외부 입력 값에 대한 화이트리스트를 만들어 해당 문자만 허용하는 것이다.
JAVA 예시
name = name.replaceAll("/","");
name = name.replaceAll("\\","");
name = name.replaceAll(".","");
name = name.replaceAll("&","");
'지식정리' 카테고리의 다른 글
Division by Zero(0으로 나누기) (2) | 2023.01.17 |
---|---|
7. CSS (0) | 2022.05.20 |
6. Browser는 어떻게 동작하는가? (0) | 2022.05.15 |
5. Domain name이란? (0) | 2022.05.13 |
4. Web Hosting이란? (0) | 2022.05.12 |