김승현
XML EXTERNAL ENTITY 본문
XML이란?
Extensible Markup Language (XML)은 데이터를 저장하고 전송하기 위해 설계된 마크업 언어
개발자가 임의의 데이터 구조를 텍스트 형식으로 정의하고 표현할 수 있도록 하며, HTML과 유사한 트리 구조
<saml:AttributeStatement>
<saml:Attribute Name="username">
<saml:AttributeValue>
vickieli
</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
XML은 사용자 정의 태그 이름을 사용하기 때문에 XML 문서를 자유롭게 구조화 가능
-> XML 형식은 웹 애플리케이션의 인증, 파일 전송, 이미지 업로드, HTTP 데이터를
클라이언트와 서버 간에 전송하는 다양한 기능에서 널리 사용
또한 XML은 문서 형식 정의(DTD)를 포함할 수 있음
이러한 DTD는 외부 소스에서 로드하거나 DOCTYPE 태그 내에 문서 자체에 선언 가능함
예시
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE example [
<!ENTITY file "Hello!">
]>
<example>&file;</example>
XML 엔터티는 프로그래밍 언어의 변수처럼 작동함
이 엔터티를 &file; 구문을 사용하여 참조할 때마다 XML 문서는 그 자리에 file의 값을 로드.
위 경우 XML 문서 내의 &file; 참조는 모두 "Hello!"로 대체됨
XML 문서는 URL을 사용하여 로컬 또는 원격 콘텐츠에 접근하는 외부 엔터티도 사용할 수 있음
엔터티의 값이 SYSTEM 키워드로 시작하면, 해당 엔터티는 외부 엔터티이며, 그 값은 URL에서 로드됨
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE example [
<!ENTITY file SYSTEM "file:///example.txt">
]>
<example>&file;</example>
예방법
XXE 공격을 예방하는 방법은 XML 파서의 기능을 제한하는 것에 달려있음.
- XML 파서에서 DTD 처리를 비활성화해야 함
- DTD 처리가 XXE 공격의 필수 조건이기 때문
만약 DTD를 완전히 비활성화하는 것이 불가능하다면?
외부 엔티티, 매개변수 엔티티, XML 문서에 포함된 인라인 DTD를 비활성화해야 함
+XXE 기반의 DoS를 방지하기 위해, XML 파서의 파싱 시간과 파싱 깊이 제한
+엔티티의 확장을 아예 비활성화
+입력 값 검증
+XML대신 JSON 사용
XXE 헌팅법
- XML 데이터 입력 지점을 찾기
- base64로 인코딩된 XML 코드 블록은 'PD94bWw'
- XML은 XML, HTML, DOCX, PPTX, XLSX, GPX, PDF, SVG, RSS 피드와 같은 문서 및 이미지 형식에 작성 가능
또한, GIF, PNG, JPEG 파일과 같은 이미지 내에 포함된 메타데이터도 모두 XML 기반 - 다른 형식의 입력을 받는 엔드포인트에서 요청의 Content-Type 헤더를 아래의
- Content-Type: text/xml
- Content-Type: application/xml
- 전형적인 XXE 테스트
- 블라인드 XXE 테스트
- 다른 파일 형식에 XXE 페이로드 삽입
공격 확대
- SSRF 공격을 위한 기반 마련
- 파일 읽기
'book_summary' 카테고리의 다른 글
Bugbounty Boot Camp Chap.10 INSECURE DIRECT OBJECT REFERENCES (0) | 2024.07.28 |
---|---|
Bugbounty Boot Camp Chap.7 CLICKJACKING (0) | 2024.07.26 |
Bugbounty Boot Camp Chap.7 OPEN REDIRECTS (0) | 2024.07.25 |
Bugbounty Boot Camp Chap.6 CROSS - SITESCRIPTING (0) | 2024.07.24 |
Bugbounty Boot Camp Chap.5 WEB HACKING RECONNAISSANCE (0) | 2024.07.24 |