ssongk
ssongk
ssongk
전체 방문자
오늘
어제

공지사항

  • resources
  • 분류 전체보기 (626)
    • CTF (24)
    • background (79)
      • fuzzing (5)
      • linux (29)
      • linux kernel (15)
      • windows (2)
      • web assembly (1)
      • embedded (0)
      • web (13)
      • crypto (9)
      • mobile (1)
      • AI (1)
      • etc.. (3)
    • write-up(pwn) (171)
      • dreamhack (102)
      • pwn.college (4)
      • pwnable.xyz (51)
      • pwnable.tw (3)
      • pwnable.kr (5)
      • G04T (6)
    • write-up(rev) (32)
      • dreamhack (24)
      • reversing.kr (8)
    • write-up(web) (195)
      • dreamhack (63)
      • LOS (40)
      • webhacking.kr (69)
      • websec.fr (3)
      • wargame.kr (6)
      • webgoat (1)
      • G04T (7)
      • suninatas (6)
    • write-up(crypto) (19)
      • dreamhack (16)
      • G04T (1)
      • suninatas (2)
    • write-up(forensic) (53)
      • dreamhack (5)
      • ctf-d (47)
      • suninatas (1)
    • write-up(misc) (13)
      • dreamhack (12)
      • suninatas (1)
    • development (31)
      • Linux (14)
      • Java (13)
      • Python (1)
      • C (2)
      • TroubleShooting (1)
    • 자격증 (8)
    • 이산수학 (1)
    • 정보보안 (0)
hELLO · Designed By 정상우.
ssongk

ssongk

background/web

XXE Injection 이해를 위한 XML 기초 지식

2022. 8. 29. 23:31

이 글은 XXE Injection을 공부하기 위해 TCP School의 XML 강의를 정리한 글입니다.

http://www.tcpschool.com/xml/intro

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com


XML

XML은 JSON과 같이 데이터를 전달하기 위한 목적으로 만들어졌다.

XML은 다른 마크업 언어를 만드는데 사용되는 다목적 마크업 언어이다.

또한 스키마를 가지고 있는데 스키마는 DTD(Document Type Definition)와 XML 스키마(XSD)로 작성할 수 있다.

XML의 content-type은 application/xml 이다.

 

DTD

DTD(문서 타입 정의)는 XML 문서의 구조 및 해당 문서에서 사용할 수 있는 적법한 요소와 속성을 정의한다.

DTD에서 엔티티(entity)는 특정 문자열을 손쉽게 사용할 수 있도록 해주는 상용구와 같은 역할을 한다.

DTD에서 엔티티는 일반 엔티티와 파랑미터 엔티티로 구분된다.

일반 엔티티는 XML 문서에만 확장될 수 있고 파싱되거나 파싱되지 않을 수 있다.

파라미터 엔티티는 DTD 내부에서만 확장될 수 있고 반드시 파싱된다.

 

DTD에서 엔티티는 XML 문서, DTD 내부, 파일 외부에 선언할 수 있다.

(참고로 엔티티가 DTD 외부에 있으면 외부 엔티티라고 하고 DTD 내부에 있으면 내부 엔티티라고 한다)

 

내부 엔티티는 아래와 같이 선언할 수 있다.

<!ENTITY 엔티티이름 "엔티티값">

이렇게 선언된 내부 엔티티는 XML 문서에서 &엔티티이름; 의 형식으로 사용한다.

 

외부 엔티티는 다른 DTD 문서에서 재사용할 수 있으며 아래와 같이 선언한다.

<!ENTITY 엔티티이름 SYSTEM "URI또는URL">

외부 엔티티도 내부 엔티티 처럼 XML 문서에서 &엔티티이름; 의 형식으로 사용한다.

 

DTD 문서에서만 사용하기 위해 선언한 엔티티를 파라미터 엔티티라고 한며 아래와 같이 선언한다.

<!ENTITY %엔티티이름 "엔티티값">

엔티티 이름 앞에 %가 들어가는 것을 제외하면 일반 엔티티와 동일하다.


(추가로 공부해서 작성할 예정)

'background > web' 카테고리의 다른 글

[NoSQL] CouchDB  (0) 2022.11.24
SSTI(Server Side Template Injection)  (0) 2022.09.29
XXE(XML External Entity) Injection  (0) 2022.08.27
[MySQL] select 문의 where 절에서 문자열과 숫자의 비트 연산으로 테이블의 모든 데이터 출력되는 현상  (0) 2022.08.09
Same Origin Policy(SOP)  (0) 2022.07.27
    'background/web' 카테고리의 다른 글
    • [NoSQL] CouchDB
    • SSTI(Server Side Template Injection)
    • XXE(XML External Entity) Injection
    • [MySQL] select 문의 where 절에서 문자열과 숫자의 비트 연산으로 테이블의 모든 데이터 출력되는 현상
    ssongk
    ssongk
    벌레 사냥꾼이 되고 싶어요

    티스토리툴바