반응형
SVG 란?
SVG(Scalable Vector Graphics)는 XML 기반의 벡터이미지 포멧을 말합니다. 이러한 SVG의 가장 큰 특징은 벡터 기반이기 때문에 크기를 확장하거나 축소해도 해상도가 유지가 된다는 점입니다.
| * XML(eXtensible Markup Language): 데이터를 구조적으로 표현하기 위한 마크업 언어입니다. |
File Upload 취약점을 이용한 XSS
파일 업로드를 통해 공격자가 할 수 있는 공격 방식은 다양하게 존재합니다. 그 중에는 대표적으로 Web Shell 공격이 있으며 이번에 알아볼 공격 방식은 파일 업로드를 통해 XSS 공격을 시도해보는 것입니다.
(Web Shell 공격은 제가 작성한 글을 참조해주세요!)
File Upload를 이용한 Web Shell 공격
File Upload 취약점을 이용한 XSS - 발생조건
- 파일 업로드 기능이 존재해야 합니다.
- 업로드된 경로에 접근이 가능해야 합니다.
사용 도구
- Burp Suite
실습
- 파일 업로드 기능이 있는 게시판에 접속하여 글 작성 페이지 접속합니다.

- 먼저 php 파일을 업로드하면서 웹쉘 업로드가 가능한지 확인합니다.

- 허용되지 않는 파일 형식이라고 화면에 출력되며 php 파일을 업로드할 수 없음을 확인할 수 있습니다. (이번 File Upload 공격은 SVG 파일을 이용한 XSS가 목적이므로 php 파일 우회는 다른 글을 참고해 주세요.)

- 이번엔 파일 업로드를 할 때 Burp Suite를 이용하여 Request를 가로챈 뒤에 확장자를 .svg 로 바꿔서 파일 업로드를 시도합니다. Response를 보면 php 파일은 안되지만 SVG 파일은 업로드할 수 있음을 알 수 있습니다.

- SVG 파일을 이용하여 XSS 공격을 하기 위해서는 파일 경로로 접근이 가능해야 합니다. 파일 다운로드와 같은 버튼이 있을 때 우클릭한 뒤 링크 주소 복사를 클릭하면 복사된 주소가 파일이 저장되어있는 경로입니다.

- 복사한 주소를 URL 주소창에 입력하고 접속하면 접속이 가능하며 어떤 에러가 화면에 출력되고 있는 것을 볼 수 있습니다. 해당 에러는 XML 파서 에러이므로 업로드한 파일이 SVG(XML)로 인식되고 있음을 알 수 있습니다.

- SVG 파일 업로드가 가능하며 업로드된 파일 경로에도 접근이 가능한 상태입니다. XSS 공격을 시도하기 위해 파일 업로드할 때의 Request를 가로채서 확장자를 .svg 로 바꾸고 페이로드를 삽입합니다.
[페이로드]
| 페이로드 : <svg onload="alert('1')" xmlns="http://www.w3.org/2000/svg"></svg> (확장자 .svg) svg 태그와 이벤트 속성인 onload를 이용하여 스크립트를 실행하는 페이로드 입니다. xmlns는 네임스페이스(Namespace)를 선언하는 속성이며 SVG 규격에 따른 XML 문서라는 것을 알려주는 선언입니다. "http://www.w3.org/2000/svg" 은 SVG의 공식 네임스페이스 입니다. (.svg 파일은 xmlns를 명시해줘야 XSS를 성공시킬 수 있습니다. xmlns을 명시하지 않으면 XSS가 발생하지 않습니다.) |
- 페이로드를 삽입한 뒤 Request를 보내면 Response에 글 작성에 성공했다는 것을 볼 수 있습니다.

- 이어서 파일 경로를 복사해 줍니다.

- 복사한 파일 경로를 URL 주소창에 입력한 뒤 접속해줍니다.

- 결과를 보면 파일 업로드로 올렸던 SVG 파일로 인해 스크립트가 실행되며 XSS가 발생하는 것을 볼 수 있습니다.

반응형
'[WEB] 모의해킹 > File Upload' 카테고리의 다른 글
| 📌File Upload 취약점 (3) | 2025.07.27 |
|---|