대표적이 웹 해킹 기법이라 하면 SQL injection, XSS, CSRF, XXE 등등이 있다.
이중 XXE는 무엇일까?
XXE는 XML External Entity의 약자이다.
먼저 XXE를 알아보기전에 XML이 무엇인지 알아야 한다.
XML이란?
XML이란 Extensible Markup Language의 약자로 다른 특수한 목적을 갖는 마크업 언어를 만드는 데 사용하도록 권장되는 다목적 마크업 언어이다.
마크업 언어(Markup Language)는 양식이 있는 문서의 한 종류이며 그 양식을 태그(좌, 우 부등호 처럼 생긴 꺽쇠 < >로 구분)등으로 구분하여 문서 정보를 정확하게 전달하기 위한 목적으로 만들어진 문서이다. 예를 들어 우리가 흔히 아는 HTML이 있다.
그러나 XML은 HTML처럼 데이터를 보여주는 목적이 아닌, 데이터를 저장하고 전달할 목적으로만 만들어졌다.
또한, XML 태그는 HTML 태그처럼 미리 정의되어 있지 않고, 사용자가 직접 정의할 수 있다.
XML의 중요한 특징은 다음과 같습니다.
- XML은 다른 목적의 마크업 언어를 만드는 데 사용되는 다목적 마크업 언어입니다.
- XML은 다른 시스템끼리 다양한 종류의 데이터를 손쉽게 교환할 수 있도록 해줍니다.
- XML은 새로운 태그를 만들어 추가해도 계속해서 동작하므로, 확장성이 좋습니다.
- XML은 데이터를 보여주지 않고, 데이터를 전달하고 저장하는 것만을 목적으로 합니다.
- XML은 텍스트 데이터 형식의 언어로 모든 XML 문서는 유니코드 문자로만 이루어집니다.
XML 문서는 다음과 같이 자신에 대한 정보 일부를 선언하는 것으로 시작된다.
<?xml version="1.0" encoding="UTF-8" ?>
이제 XXE에 대해 알아보자.
XXE 란?
XXE는 XML External Entity의 약자로 XML 외부요소를 주입한 공격이라 볼 수 있다.
XML 데이터를 제대로 검증하지 않거나 안전하게 파싱 하지 않고 사용자가 제어하는 입력에서 XML 데이터를 가져올 때 발생하며 이를 통해 악의적인 작업을 수행할 수 있다.
민감한 파일 노출될 시 백엔드 서버 다운 등을 통해서 웹 애플리케이션이나 백엔드 서버에 상당한 위협이 된다.
사용자가 웹 애플리케이션으로 전달되는 XML 데이터를 직접 업로드/수정 가능
- 공격자는 외부 엔티티를 참조하는 XML 데이터 전송
- 파일과 같은 서버 내부의 정보 탈취/DOS/SSRF 등의 공격 수행
XML 외부 엔티티 선언 형태
<!DOCTYPE test [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
- DOCTYPE 선언을 한 다음 ENTITY 태그 이용, xxe라는 외부 엔티티 선언
- 선언된 외부 엔티티는 프로그래밍 시 변수 참조처럼 XML 내부에서 참조 가능
- xxe 엔티티를 참조하면 xxe 값인 SYSTEM 키워드로 지정된 /etc/passwd 파일 참조
- file:// 대신 http://를 사용하여 외부 리소스 참조도 가능
XXE에 대한 간단한 공격은 https://jh-hack.tistory.com/77에서 볼 수 있다.
'Web > 개념정리' 카테고리의 다른 글
[개념정리] SameSite (0) | 2023.10.27 |
---|---|
[개념정리] XSS (0) | 2023.08.23 |
[개념정리] UNION (0) | 2023.07.10 |
[개념정리] Base64 (0) | 2023.07.03 |
[개념정리] NAT(Network Address Translation) (0) | 2023.06.16 |