File Upload_(3)_.htaccess

HackBeom·2022년 10월 24일
0

이번에는 블랙리스트 기반으로 필터링을 특정파일인 .htaccess 파일을 이용하여 우회해 보겠다.

<?php
$myfile_save_dir = 'upload/';
if($_FILES['fileToUpload']['size'] >= 1024 * 1024 * 1){ exit("<script>alert(`file is too big`);history.go(-1);</script>"); }

$file_path = pathinfo($_FILES['fileToUpload']['name'], PATHINFO_EXTENSION);
$allow_extension = array("php", "exe", "php3", "PhP");
if(in_array($file_path, $allow_extension)){

    exit("<script>alert(`No!!!!!!!!!!!!`);history.go(-1);</script>");
}
else{
    echo $_FILES[ 'myfile' ][ 'type' ];
    move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $myfile_save_dir . $_FILES['fileToUpload']['name']);
    exit("<script>alert(`upload ok`);location.href=`file.php`;</script>");
}
?>

블랙리스트로 php가 필터링 되고 있다고 가정을 하여 코드를 만들었다.
이때 php로 작성된 웹쉘을 실행시킬 수 있게 만드는 방법에 대해 설명하자면

.htaccess 파일을 이용하여 txt를 php로 인식하게 만들어 웹쉘 실행이 가능하다.
.htaccess 파일이란 요약하자면 분산설정파일로
/var/www/html/web/.htaccess 가 존재할 시 해당 위치에서는 전체 설정파일이 아닌
.htaccess 파일을 우선적으로 적용하게 된다.
이때문에 .htaccess 파일에 Addtype application/x-httpd-php .txt 로 입력하고 업로드를 하게 되면 확장자가 txt인 파일들은 php로 인식하여 실행시킬 수 있게 만들어준다.

아래는 실습이다.

서버에 업로드가 된 상황이고 웹 상에서 실행하게 되면

아래 와 같이 실행이 되게 된다.

이를 막기 위해선 .htaccess 파일을 업로드불가능하게 필터링 하거나
에초에 사용을 안하도록 설정을 하는 방법이 있다.

0개의 댓글