본문 바로가기

Webhacking/개념

[Web] Dreamhack STAGE 8

https://dreamhack.io/lecture/roadmaps/1

 

Web Hacking

웹 해킹을 공부하기 위한 로드맵입니다.

dreamhack.io


[ Web STAGE 8: File Vulnerability ]

 

[ File Upload Vulnerability ]

: 공격자의 파일을 웹 서비스의 파일 시스템에 업로드하는 과정에서 발생하는 보안 취약점

: 파일 시스템 상 임의 경로에 원하는 파일을 업로드하거나 악성 확장자를 갖는 파일을 업로드할 수 있을 때 발생

: 원하는 시스템 커맨드를 실행하는 원격 코드 실행 취약점 유발 가능

: 이용자가 업로드될 파일의 이름을 임의로 정할 수 있을 때 발생

: 파일 이름에 이용자가 입력한 문자열을 그대로 사용하거나, 이용자의 이메일, 닉네임 등을 포함시키는 등

소스 코드 패턴이 취약점의 원인

Path Traversal / 악성 파일 업로드

 

1. Path Traversal

: 파일 업로드를 허용하는 대개의 서비스는 보안을 위해 특정 디렉터리에만 업로드 허용

: 위와 같은 제한이 없다면 악의적인 이용자가 웹 서버의 소스 코드나 서버에 있는 중요 시스템 파일을 덮어쓸 위험이 있음

: Path Traversal 취약점 à 업로드에 존재하는 이러한 제약을 우회하여 임의 디렉토리에 파일을 업로드할 수 있는 취약점

 

2. 악성 파일 업로드

: 이용자가 파일을 업로드할 때, 이를 제대로 검사하지 않아서 발생하는 취약점

 

1) 웹 셸

 - 웹 서버는 .php, .jsp, .asp와 같은 확장자의 파일을 common gateway Interface(CGI)를 실행하고, 그 결과를 이용자에게 반환함

 

2) 악의적인 웹 리소스

 - 웹 브라우저는 파일의 확장자나 응답의 Content-Type에 따라 요청을 다양하게 처리함

 요청한 파일의 확장자가 .html이거나, 반환된 Content-Type 헤더가 text/html일 경우

: 응답은 HTML 엔진으로 처리

 파일의 확장자가 .png, .jpg 등의 이미지 확장자이거나, Content-Type이 image/png일 경우

      : 응답은 이미지로 렌더링

 - 만일 공격자가 서버에 exploit.html을 업로드하고, 이에 접근하는 URL이 https://dreamhack.io/uploads/exploit.html이라면, 브라우저는 이를 HTML로 해석함

이때 exploit.html에 악의적인 스크립트를 삽입하면, cross-site-scripting(xss) 공격으로 이어질 수 있음

 

 

 

[ File Download Vulnerability ]

: 웹 서비스의 파일 시스템에 존재하는 파일을 다운로드하는 과정에서 발생하는 보안 취약점

: 이용자가 다운로드할 파일의 이름을 임의로 정할 수 있을 때 발생

: 공격자는 웹 서비스의 파일 시스템에 존재하는 임의 파일을 다운로드할 수 있음

: 설정 파일, 패스워드 파일, 데이터 베이스 백업 본 등을 다운로드 하여 민감한 정보를 탈취할 수 있고 2차 공격 수행

   가능

 

 대응 방안

   : 웹 서비스는 이용자가 업로드한 파일을 다운로드 받거나 이미지를 불러올 때 특정 디렉터리에 있는 파일만

     접근하도록 해야 함

 

* 파일 다운로드 취약점이 자주 발생하는 URL 패턴

1) https://vulnerable-web.dreamhack.io/download/?filename=notes.txt

2) https://vulnerable-web.dreamhack.io/download/?filename=../../../../../../etc/passwd

3) https://vulnerable-web.dreamhack.io/images.php?fn=6ed0dd02806fa89e233b84f4.png

 

 

[ 실습 ]

 


실습은 위의 코드에서 secret 값을 읽는 것이다!

 

이건 디렉터리~

 

지금 app/src/uploads/upload.txt의 위치게 있고

이걸 /proc/self/environ으로 이동해서 secret 값을 알아내야 한다.

 

이렇게 해주면 melon이라는 값을 얻을 수 있다!

 

 

→ 결론

 

[업로드 취약점을 막기 위한 방법]

 1) 개발자가 업로드 디렉터리를 웹 서버에서 직접 접근할 수 없도록 개발

 2) 업로드 디렉터리에서는 CGI가 실행되지 않도록 하기

 3) 업로드된 파일 이름을 그대로 사용하지 않고 basepath와 같은 함수를 사용하여 파일 이름을 검증 후 사용

 4) 허용할 확장자를 명시해 그 외의 확장자는 업로드될 수 없도록 하기

 

[다운로드 취약점을 막기 위한 방법]

 1) 요청된 파일 이름을 basepath와 같은 함수를 통해 검증

 2) 파일 이름과 1:1 맵핑되는 키를 만들어 이용자로부터 파일 이름이 아닌 키를 요청하도록 하기

'Webhacking > 개념' 카테고리의 다른 글

[Web] Dreamhack STAGE 7  (0) 2022.08.27
[Web] Dreamhack STAGE 6  (0) 2022.08.27
[Web] Dreamhack STAGE 5  (0) 2022.08.26
[Web] Dreamhack STAGE 4  (0) 2022.08.25
[Web] Dreamhack STAGE 1 ~ 3  (0) 2022.08.15