1. 소스코드
- 소스코드 없이 풀지 못했으므로 이번문제는 소스코드부터 확인하겠다.
- 소스코드는 위 사진과 같다. 코드를 확인한 결과 필터링에 대한 내용을 확인할 수 있다.
if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
( $uploaded_size < 100000 ) &&
getimagesize( $uploaded_tmp ) ) {
- 필터링 부분을 확인하자면 jpg , jpeg , png 확장자만 확인하는 화이트 리스트 방식 필터링이 되어있다. 또 다른 getimagesize라는 필터와 strtolower이라는 대소문자 구분을 없애는 필터가 있다.
getimagesize란?
- 이미지 정보를 추출하는 함수이다.
- getimagesize를 사용하였을 때 이미지파일이 아니라면 FALSE라는 값을 반환한다.
2. 공격
- 이중확장자만을 사용했을때에는 필터링에 걸리는 것을 확인할 수 있다.
- 'web.php.jpg' 라는 이중확장자 우회법을 사용
- 'GIF123' 이라는 임의의 getimagesize에 대한 필터를 우회하기 위한 값을 삽입한다.
- 이 후 파일업로드는 성공하였으나 jpg파일이므로 성공되지는 않는다.
- 그러므로 생각해 본 결과 fileinclusion을 사용해야 된다.
※ file inclusion은 해당 글을 보면 알 수 있다.
DVWA실습 (File Inclusion) :: JunHo Life (tistory.com)
DVWA실습 (File Inclusion)
※ File Inclusion 취약점이란? - 파라미터 값을 정확하게 검사하지 않을 때에 공격자가 피해자 대상 서버에서 시스템 파일을 읽어 탈취하거나 공격자가 만들어둔 소스코드를 Include 하도록 유도하는
junho-life.tistory.com
- LFI( Local File Inclusion)을 사용해 본 결과 php파일이 사용이 되지만 파라미터값이 넘어가지 않았다.
- &를 이용하여 파라미터를 하나 더 추가하는 방법으로 파라미터를 전송하여 값을 받아올 수 있었다.
3. 대응방안
1)웹 서버 측에서 업로드 대상 파일의 확장자를 서버 사이드 스크립트에서 검증하며 화이트리스트 방식으로 필터링하여야 하며 특수 문자 및 유니코드 제거해야한다.
2) 파일을 데이터베이스에 저장하거나 격리된 서버를 사용하는것이 좋다.
3) 업로드된 디렉토리는 실행 권한을 주지 않으며, 파일 크기의 최대값을 제한한다.
4) 정적 파일의 응답에 보안 헤더를 추가하여 웹사이트 보호한다.
5) 업로드 폴더 이외의 폴더에 쓰기 권한을 제거하고, 구성 파일이 적절하게 설정되어 있는지 확인
'DVWA' 카테고리의 다른 글
DVWA실습 (XSS -DOM) (1) | 2023.12.04 |
---|---|
DVWA실습 (File Inclusion) (0) | 2023.12.03 |
DVWA 실습 (File Upload - Medium) (0) | 2023.12.01 |
DVWA 실습 (File Upload - low) (1) | 2023.11.30 |
환경구축 ( DVWA 설치 ) (1) | 2023.11.30 |